• ベストアンサー

C++にオリジナル言語の解釈をさせたい

Oh-Orangeの回答

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.7

★アドバイス ・http://masudahp.web.fc2.com/cl/→『C言語』  上記サイトの  『言語処理プログラムの作成』の『インタプリタ作成 miniBASIC』が  ちょっとだけ参考になりませんか。 ・簡単なインタプリタなら1ヶ月もあれば十分に作成可能です。  ただ、語句解析や構文解析をしっかりとやる必要があります。  繰り返し処理は再帰関数などで処理すると楽かもしれません。  (この場合はGOTO命令に注意しないといけない)  (GOTO命令をサポートするなら) ・C++ではありませんが次のサイト情報も参考にして下さい。  http://codezine.jp/author/601/→『VB.NETで仮想CPUを作ろう』  オリジナル言語の内部を中間言語として処理すると処理も早くなります。  ただし中間言語の内部表現(仮想CPU)から設計すると時間が掛かりますが  最終的に質の良い言語エンジンができると思います。 最後に  書籍を紹介します。  http://www.amazon.co.jp/dp/4797348550/→『スクリプト言語による効率的ゲーム開発 C/C++へのLua組込み実践』  http://www.amazon.co.jp/dp/4797331976/→『ゲームエンジンプログラミング GAME DEVELOPER』  この辺の本を最低でも1冊手元に置いておいても良いでしょう。  探すともっと詳しい(値段も高額,分厚い)ものあります。

参考URL:
http://www.amazon.co.jp/dp/4797348550/
Fllisy
質問者

お礼

紹介ありがとうございます。 近くの大型書店などで内容を少し覗いてみることにします。

関連するQ&A

  • プログラミング言語Cとプログラミング言語C++

    プログラミング言語Cとプログラミング言語C++の違いって何ですか? あと、プログラミング言語C++についていくつか質問があります。 #include <iostream> using namespace std; void main(){ cout << "Hello world!" << endl; } このプログラムについて質問なんですが、iostreamってプログラミング言語Cで言うstdio.hのことですか? using namespace stdって何ですか? あと、 cout <<"Hello world!"って何ですか?

  • c++での入出力がうまくいきません;

    初心者ですが独習c++でプログラミングについて勉強している者です。 なんとか環境設定もできたと思いきや、うまくコンパイルすることができなくて困っています。具体的には、 #include <iostream> using namespace std; int main() { int i, j; double d; i = 10; j = 20; d = 99.101; cout << "値を表示: "; cout << i << ' ' << j << ' ' << d; return 0; } という値を表示するプログラムではコンパイルもうまくいったのですが、次の #include <iostream> using namespace std; int main() { int i; cout << "値を入力: "; cout >> i; cout << "入力した値: " << i << "\n"; return 0; } という入力のプログラムをコンパイルしようとすると、コマンドプロンプトに演算子が使われたクラス ostream では int型の定義が存在しないとなりコンパイルエラーとなってしまいます。 理由が考えてもわからないので、質問してみました。 どのようにすれば、このエラーを解消できるのか知りたいので、どうかご意見をよろしくお願いします。

  • Borland C++ Compiler 5.5

    ここで教えてもらってBorland C++ Compiler5.5とCPadをつかってるんですが、 #include <iostream> using namespace std; int main() { cout << "Hello, World!" << endl; rreturn 0; } と入れると、 「hello.exeがありません」(helloは保存データの名前) と出るんです。 古いバージョン専用のスクリプトなのですか? それとも設定ミスですか? 教えてください。

  • C++の配列について

    #include <iostream> using namespace std; int main() { float w[] = {1.2,2.3,3.4,4.5,5.6}; float x[] = {4.8,2.6,1.3,9.1,8.7}; float u = 0.0; int i; for(i=0;i<5;i=i++) { u += w[i] * x[i]; } cout << "u=" << u << "です\n"; return 0; } u=105.83って出たんですが、これは何をしているプログラムなんですか

  • C++プログラム問題(初心者です)

    C++の勉強初めて1ヶ月ぐらいです。 以下にある問題がわかりません。 解説付きでお願いします。 [問題] 関数 funcのみを修正することで、標準出力に 2 が表示する。 [プログラム] #include <iostream> using namespace std; int func(int i) {return i;} int main() { int i = 1; cout << ++func(i) << "\n"; return 0; }

  • 関数呼び出しについて

    今cygwin 上でC++の勉強をしているのですが 以下の2つのプログラムの違いがよくわかりません どなたかよろしくお願いします <プログラム1> #include<iostream> using namespace std; int a(); int main(){ cout << abs();  return 0;} int a(){ cout << "test\n";  return 1;} <プログラム2> #include<iostream> using namespace std; int a(int i); int main(){ cout << a(1);  return 0;} int a(int i){ cout << "test\n";  return i;} プログラム1では関数a()内の"test"が出力されるのですが プログラム2ではa(int i)内の"test"は出力されません。 この違いはどこにあるのでしょうか? 同じプログラムでint a() と int a(int i)を double a() と double a(double d)にすると この違いは生じません。なぜaの戻り値をint に設定したときだけ この違いが生じるのでしょうか?

  • ''C++の条件分岐分からないんですが

    #include<iostream> using namespace std; int main(){ int a; cout << "数値を入力してください\n"; cin >> a; if( a > 30) cout <<"31以上ですね\n"; } else if(a<10){ cout <<"10未満ですね\n"; } else { cout <<"30以下で10以上ですね\n"; } return 0; } これが例文なんですが、 変数aの値がbより小さい場合には、『aはbより小さいです』と表示させ、大きい場合には"a=a+b"を計算させる 文字変数mの中身が'a'ならば、『aが格納されています』と表示させて、'a'でないならば『'a'でない文字が格納されています』と表示させたあと、変数bとcを使った『b=b+c』を計算する。 変数aが、変数bより小さい場合には、『aはbより小さいです』と表示し、変数bより大きい場合には、『aはbより大きいです』と表示し、変数bと等しい場合には、『aとbは等しいです』と表示する #include<iostream> using namespace std; int main(){ int a; if(a < b) { __cout("aはbより小さいです\n"); } else { __c = a + b; }return 0; } #include<iostream> using namespace std; int main(){ int a; if(m == 'a') __cout("aが格納されています\n"); } else { __cout("\'a\'でない文字が格納されています\n"); } return 0; } #include<iostream> using namespace std; int main(){ int a; if(a < b) { __cout("aはbより小さいです\n"); } else if(a == b) { __cout("aとbは等しいです\n"); } else { __cout("aはbより大きいです\n"); } return 0; } これ合ってますか?あとプログラミング環境すらないので実行結果教えてもらっていいですか?

  • c++プログラム。どこがだめか教えて欲しいです。

    以下のプログラムにおいて、後者のコンパイルが通りません。 違いは、クラス:Kurasu のコンストラクタに引数があるかないかで、 全部で3行違います。 後者のどこが問題か指摘して欲しいです。(さっぱりわからない…。) 試した環境は、 Visual C++ 2010 Express + インストーラー配布のboostと、 Eclipse 3.5.2 Galileo Windows 32bit ベース / Pleiades All in One 3.5.2.20100226 のUltimate+←を使ってソースをビルドしたboostです。 boostのバージョンは、1.46.1です。 -------------------------------------------------- #include <iostream> #include <boost/thread.hpp> using namespace std; using namespace boost; class Kurasu { public: Kurasu(int ababa){}; void run(){ for( int i = 0; i < 10; i++ ){ cout <<"foo "; } }; }; int main() { cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!! Kurasu hoge(1); Kurasu piyo(2); thread thr_hoge( &Kurasu::run, &hoge ); thread thr_piyo( &Kurasu::run, &piyo ); thr_hoge.join(); thr_piyo.join(); return 0; } -------------------------------------------------- #include <iostream> #include <boost/thread.hpp> using namespace std; using namespace boost; class Kurasu { public: Kurasu(){}; void run(){ for( int i = 0; i < 10; i++ ){ cout <<"foo "; } }; }; int main() { cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!! Kurasu hoge(); Kurasu piyo(); thread thr_hoge( &Kurasu::run, &hoge ); thread thr_piyo( &Kurasu::run, &piyo ); thr_hoge.join(); thr_piyo.join(); return 0; } --------------------------------------------------

  • C++のフローチャート

    #include <iostream> using namespace std; int main() { int m=48,n=36,t,i; for(i=0;;i++) { cout << "m" << i << " " << m << " n" << i << " " << n << '\n'; if(!(t=m%n)) break; m=n; n=t; } cout << "n" << i << "=" << n << '\n'; return 0; } ユーグリッドの互除法で、最大公約数を求めたプログラムなんですが、本当にお願いします。プログラムは書けたんですが、誰かこれのフローチャートを教えてください…これのフローチャートがかけないんです。しかも、テストに出るらしいです。これを書くのが 始まりと終わり→楕円 処理を行う→四角 判断を行う→ひし形 って感じなんですよね

  • なんで繰り返すの?すいません急です汗

    macでソースプログラムを作っています。 #include <iostream> using namespace std; main(){ int i = 1 ; while (i < 1000) { cout << i ; if (i % 2 == 0){ cout << "go\n" ; } else { cout << "\n"; } i++; } } これだとなぜか1000までの数字が 1 2go 3 4go 5 6go と繰り返しででてきてしまいます。 本当は好きな数字を入力する状況になるようにして例えば「2」を入力したら 2go とだけ表示したいんです。 どこがまちがってるのでしょうか?