Happy(Haskell)を使用してyacc文法からFortran 77パーサーを生成します
質問
次のF77 yacc文法につまずいた: http://yaxx.cvs.sourceforge.net/viewvc/yaxx/yaxx/fortran/fortran.y?revision=1.3&view=markup 。
Happy を使用して、このファイルからFortran 77パーサーを作成するにはどうすればよいですか?
C?/ C ++があるのはなぜですか?その.yファイル内のコード?
更新:ご返信いただきありがとうございます!
私はしばらくの間、2つの新しいアプローチで遊んでいます:
- というタイトルのペーパーにバンドルされているソースコードパッケージからパーサーを抽出して変更する>パラメトリックFortran 、
- BNFC の助けを借りて、最初から文法を書く。
すでに簡単なコードの抜粋を解析する必要があります。今世紀中に何か有用なものが存在するようになったら、私は人々に知らせ続けます^ __ ^"へへ。
P / S:当分の間依存しているバイナリのみのエンジンを置き換える自動微分エンジンのプロジェクトを開始するのに十分な勢いを集めることができるかどうかを見たいです。最初の段階でのエンターテイメント:ラブシャッフルを見ています!とても楽しいJドラマです!強くお勧めします...
解決 4
BNFC を使用して、独自の文法をゼロから作成します。 BNFCは驚異的に機能し、必要に応じて構文解析を行うことができます。
他のヒント
Cは、構文が読み込まれるときにスタックを減らすためのセマンティックアクションです。これらのアクションは、Cソースファイルを生成するBison / Yaccを対象としているため、Cにあります。
Happyを使用する場合は、BNFをHappy定義構文に移植し、Haskellでセマンティクスを記述します。
有用な情報を得るための氷山の一角だけです。
まだコピーをお持ちでない場合は、ドラゴンブック(コンパイラー:Aho、Lam、Sethi、Ullman-Pearsonの原則、テクニック、およびツール)に投資してください
他の答えが一般的な意味で真である理由は、リンクしたYacc定義に実際には何も any アクションがない意味のあることを行うために独自のアクションを記述する必要があるからです。文法規則に関連付けられています。 yyerror関数と、トークンタイプに基づいてyylvalから値を抽出するためのコードを定義します。
yyerror / yylvalの内容がわからない場合は、bison / flexチュートリアルを読む必要があります。これについてもっと真剣に考えているのなら、ドラゴンの本も良いリソースです。この本に基づいた、ネット上に浮かぶコンパイラーに関するスタンフォードコースの優れた資料もいくつかあります。
YaccファイルのCフラグメントと同等の方法で構築できるASTを構築する必要があります。