1

http://www.antlr.org/wiki/display/ANTLR3/Five+minute+introduction+to+ANTLR+3http://www.antlrなど、Cのmain()のサンプルがいくつか浮かんでいます。 org / api / C / index.html

間接参照はASTのようです。私はそれが何であるかわかりません、そして-すみません-私がそれを避けることができればしたくありません。

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

少しひねりを加えたのは、ほとんどの例がファイルから読み取られているように見えるのに対し、パラメーターとして渡される一連の入力(ATコマンド)を文字列として取得することです。

誰かが私が適応できる単純なmain()を私に指摘してもらえますか(そしておそらくそれを適応させるためにhwoを提案しますか?)私が知っていることをたくさん尋ねます、ごめんなさい。

4

1 に答える 1

2

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

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

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

コメントへの回答:

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

それで、メインについての他の質問に答えるために:はい、あなたはANTLRwikiにあるものを使うことができます。メモリの一部から読み取るには、antlr3NewAsciiStringInPlaceStream()またはantlr3NewAsciiStringCopyStream()(必要に応じて)の代わりに使用しantlr3AsciiFileStreamNew()ます。

于 2009-12-02T06:38:11.730 に答える