質問

C の main() サンプルがいくつか浮遊しているのが見えます。 http://www.antlr.org/wiki/display/ANTLR3/5+分+紹介+to+ANTLR+3 そして http://www.antlr.org/api/C/index.html

逆参照はASTのようです。それが何なのかわかりません。そして、申し訳ありませんが、避けられるなら避けたくありません。

(モデム AT コマンド用の) レクサーと文法を定義し、main() を自動生成するか、どこかから切り取って貼り付けたいと考えています。

ちょっとした工夫として、ほとんどの例はファイルから読み取るようですが、一連の入力 (AT コマンド) を文字列として取得し、パラメーターとして渡すことになります。

誰かが私に適応できる単純な main() を教えてください (そして、それを適応させる方法を提案してもらえますか?) 聞きたいことはたくさんありますが、申し訳ありません。

役に立ちましたか?

解決

AST は「抽象構文ツリー」であり、AT コマンドの場合は AST は必要ありません。

実際、ANTLR は AT コマンドを解析するには過剰です。「AT」をチェックしてから、手動でコマンドを解析してみてはいかがでしょうか?モデム コマンド セットはおそらく非常に単純なので、これまでに実行したことがない場合は、ANTLR を起動するよりも簡単に実行できるでしょう。

「+++」エスケープ シーケンスを含む完全な AT コマンド セットを実装する場合、タイミングも ANTLR だけを使用して実装できない要因になります。

コメントへの返信:

ANTLR をバグを減らすためのツールとみなすのは合理的です。あなたの質問に答えて、「それを読みますか、それとも作成されたコードを読みますか?」どちらを保守したいですか?」という質問に対する答えは、「それは状況による」です。私はコンテキストに応じて ANTLR と手動でコーディングされたパーサーの両方を使用します。これは、手動でコーディングされたパーサーを選択する状況です。いくつかの理由:おそらく組み込みアプリケーションであり、比較的単純 (多くのコマンドは複雑ではありません)、通信プロトコルです。あなたには別のコンテキストがあり、「試してみる」などの独自の理由があることは明らかです。

したがって、メインに関する他の質問に答えるには、次のようになります。はい、ANTLR wiki にあるものを使用できます。メモリの一部から読み取るには、次を使用します antlr3NewAsciiStringInPlaceStream() または antlr3NewAsciiStringCopyStream() (必要に応じて)代わりに antlr3AsciiFileStreamNew().

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top