• ベストアンサー

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

質問タイトルが適切かどうかが不安ではあるのですが……。 例えば、 V MAIN{ IT = 50; PR("hello,world"); FO(10){  IT --;  PR(IT); } } のような入力を、 #include <iostream> using namespace std; int main(){  int it = 50;  cout << "hello,world\n";  for(int i = 0; i < 10; i++){   it--;   cout << it <<"\n";  }  return 0; } として実行するプログラムを作りたいのです。 (簡単なスクリプト言語を作りたいと言った方が適しているでしょうか?) このようなプログラムを作る際に参考になりそうなWebページ、または書籍などに心当たりある方、是非紹介をお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.8

C++で簡易スクリプトを作りたいというなら、 「変態的」で有名な「boost::script」がお勧めだと思います。 既に出ていますが、日本語の解説サイトも念のため。 http://www.kmonos.net/alang/boost/

Fllisy
質問者

お礼

紹介ありがとうございます。 スクリプト以外にも有用そうですね。ざっと見てみる事にします。

その他の回答 (7)

  • 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
質問者

お礼

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

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.6

>yacc/lex の代わりに LGPL が (多分) 適用される bison/flex を出してきて「GPL の呪縛からも逃れられる」とはこれいかに>#3. 失礼しました。yaccはCDDLの様ですね。LexはMIT licenseって事で問題ないですね。yaccが一部環境でGNUライブラリを使っているって話があったので私が混乱していたみたいです。すいません。 私の知る限りでは、bison/flexの新しいバージョンからLGPL系のコード含まなくなったので、ライセンスの制約は受けなくなっているはずです。 質問者さん、関係ない話で混乱させてすいません。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.5

ある程度までならマクロで逃げられるわけですが, ここまでいくと「新しいスクリプト言語」と言った方が適切でしょうね. ところで, もとから GPL とは全く無関係な yacc/lex の代わりに LGPL が (多分) 適用される bison/flex を出してきて「GPL の呪縛からも逃れられる」とはこれいかに>#3.

Fllisy
質問者

お礼

マクロですか・・・ちょっと自分の目的とは合わないようなので、マクロでは無理なようです。

回答No.4
Fllisy
質問者

お礼

紹介ありがとうございます。 評判や扱っている内容などを吟味した上で、読んでみるか決めたいと思います。

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.3

yaccとlexならここが参考になりますね。 http://kmaebashi.com/programmer/devlang/index.html ちなみに、yaccとlexの代わりにBisonとFlexを使えばGPLの呪縛からも逃れられます。

Fllisy
質問者

お礼

紹介ありがとうございます。 とりあえず、ざっと見てみることにします。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

Boost C++ LibrariesのSpiritを調べてみてください。

参考URL:
http://www.boost.org/doc/libs/1_38_0/libs/spirit/classic/index.html
Fllisy
質問者

お礼

この内容はどうやらまだ自分には厳しいようです。

noname#96023
noname#96023
回答No.1

yaccとかlexを勉強するとよいかと。 http://ja.wikipedia.org/wiki/Yacc http://ja.wikipedia.org/wiki/Lex

Fllisy
質問者

お礼

yaccにlexですか……こういったものがあったのですね。 とりあえずざっと見てみます。

関連するQ&A