C ターゲットでツリー文法を使用する antlr3 についていくつか質問があります。
インタープリター (関数、変数、ブール式、数学式は問題ありません) をほぼ完成させ、最後に最も難しいステートメント (if、switch など) を保持しました。
1) 単純なループ文を解釈したい:
repeat: ^(REPEAT DIGIT stmt);
私は多くの例を見てきましたが、ツリー ウォーカーについては何も見ていません (マクロ MARK() / REWIND(m) + @init / @after を含むトピックのみがここにありますが、機能していません (antlr エラーがあります: "unexpected node at offset 0 "))。Cでこのステートメントをどのように解釈できますか?
2) 単純な if ステートメントを使用した同じ質問:
if: ^(IF condition stmt elseifstmt* elsestmt?);
問題は、条件が false の場合にステートメントをスキップし、他の elseif/else ステートメントをテストすることです。
3) スクリプトを停止できるステートメントがいくつかあります (「break」や「exit」など)。ツリー ウォーカーを中断して次のトークンをスキップするにはどうすればよいですか?
4) レクサーまたはパーサーのエラーが検出されると、antlr はエラーを返します。しかし、自家製のエラーメッセージを作成したいと思います。パーサーがクラッシュした行番号を取得するにはどうすればよいですか?
詳細が必要な場合はお尋ねください。
どうもありがとうございました(そして私の下手な英語をお詫びします)