- ベストアンサー
構文解析について
言語はC(C++)でコンパイラコンパイラを作っています。 自分の考えが正しいのか分からないので訂正があったらそこを指摘して、最後に聞きたいことがあるのでそれにお答えください。 自分でコードを書くと左再帰になるので、パーサージェネレーターといわれるプログラムを使わなければいけないと理解しています。Cでやるにはyacc/lexがあり今はbison/flexが主流となっています。 ただ、ネットで調べると専門的なのかこのことに触れているサイトが少ない気がします。他に有名なプログラムがあるのでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
LR系だと、yaccとbisonが有名/基本なのは確かだと思います。 ただ、昨今はLLのJavaCCとかANTLRとか、 boost::spiritみたいなのも出てきてます。 # サイトという意味では、コンパイラコンパイラ自体がそれほど…
その他の回答 (2)
- uyama33
- ベストアンサー率30% (137/450)
質問の文章を読んでみて、 コンパイラコンパイラを作りたいのか コンパイラを作りたいのか よく分かりません。 コンパイラコンパイラを作りたいなら、 LL(1)文法ですが コンパイラコンパイラの本がサイエンス社から出版されています。 書名は”コンパイラ・コンパイラ”です。 この本にはソースコードも載っています。 Modula2 で書かれていますが、C言語に書き直したものもネット上で 入手できます。 コンパイラを作るには いろいろなコンパイラコンパイラがありますので それを使えばよいことになります。
お礼
私の書いた質問に不備があることをお詫びします。 私はコンパイラコンパイラを作りたいのです。 方法はたくさんあることを知り、どれがいいもか迷いましたがとりあえずboost::spiritを使おうと思いました。 回答ありがとうございます。
- zwi
- ベストアンサー率56% (730/1282)
コンパイラやらスクリプトインタプリタのサイト自体が少ないですね。 中途半端に掲載終了しているのも多いです。 yacc/lexならこちら↓などいかがでしょう。 http://kmaebashi.com/programmer/devlang/index.html 参考になれば幸いです。
お礼
ありがとうございます。 参考にさせていただきます。
お礼
回答ありがとうございます。 boost::spiritの存在を初めて知りました。 調べるとbison/flexよりも評価が高そうですね。 もう少し調べてみます。