私自身の文法では、antlr4 c grammarをインスピレーションとして使用しています。私は実際には得られない1つのことを思い付いた。データ型が使用されていないときにLexerの規則がそこにあるのはなぜですか?たとえば、規則Double : 'double';
は使用されませんが、パーサー規則typeSpecifier:('double' | ...);
(簡略化のために他のデータ型は削除されています)がいくつかの場所で使用されています。パーサールールtypeSpecifierがレクサールールDoubleを使用していない理由はありますか?antlr4 c文法パーサールール "typeSpecifier"がレクサールール "Double"を使用していないのはなぜですか?
0
A
答えて
1
このページのすべての文章はボランティアの投稿であり、ANTLR4の一部ではありません。それは明らかに間違いですが、レクサーのルールがマッチする方法は、レクシングに違いはありません。あなたがメソッドを混在しても、無悪影響のいずれかの方法で
typeSpecifier
: ('void'
| 'char'
| 'short'
| 'int'
| 'long'
| 'float'
| 'double'
:
Double : 'double';
または暗黙的な1:あなたは、明示的なルールのいずれかを実装することを選択することができます。実際、文法全体をよりグローバルに見れば、著者は、例えばRegister
のような他の多くのレクサー規則で同じことをしました。実際の練習に違いはありません。
ボトムライン?好きな方法を選んで一貫して適用してください。私の個人的な好みは簡潔になっているので、暗黙のトークンは、文法の1か所だけで使用されている限り好きです。トークンが2つの場所で使用されるとすぐに、トークンを明示的に作成し、使用されている2つ以上の場所を更新することをお勧めします。
関連する問題
- 1. ANTLR4を使用して文法でレクサールールを注文する
- 2. なぜ1/2 == 0がdoubleを使用していますか?
- 3. Doubleが「必要」でないプロパティに対してScala.jsでDoubleが使用されるのはなぜですか?
- 4. ANTLR4パーサーが他のパーサールールを引数として持つルール(メタルール)
- 5. Antlr4でパーサールールごとに空白を無視する
- 6. ANTL 4結合された文法ではレクサールールが認識されない
- 7. ANTLR4トークンの順序が重要なのはなぜですか?
- 8. C#IS文が機能しないのはなぜですか?
- 9. Antlr4のMySQL文法にDATEおよび/またはTIMEエントリがないのはなぜですか?
- 10. Cファイルでsizeof(double)を使用しないでください。
- 11. なぜテーブルスプールを使用していないのが遅いのですか?
- 12. Antlr4の数字範囲は? Antlr4ではレクサールールが明白であるべきですか?
- 13. シングルトンパターンを使用していないのはなぜですか?
- 14. antlr4 2つのレクサールールが同じ文字列に一致します
- 15. doubleを使用してからfloatにキャストするのはなぜですか?
- 16. Antlrのあいまいなレクサールール
- 17. なぜこの文法はあいまいですか?
- 18. ANTLR4文法がブールリテラルを認識しない
- 19. なぜ、junit4はdouble []に対してAssert.assertArrayEquals()を持たないのですか?
- 20. MySqlがテーブルのインデックスを使用していないのはなぜですか?
- 21. なぜNSLockを使用していないのですか?
- 22. doubleが1.0なぜintに等しいのですか?
- 23. .flatMapを使ったSwift関数は `Double`を返すが、` tuple 'は返さないのはなぜですか?
- 24. if文はC言語でdouble値を使用しますか?
- 25. antlr4を使用して簡単な文法を解析できません
- 26. CMFCMenuBarがアクセラレータテーブルを使用しないのはなぜですか?
- 27. オプティマイザがインデックスを使用しないのはなぜですか?
- 28. MVCがError.aspxを使用していないのはなぜですか?
- 29. ASPバリデーターがJavaScriptを使用していないのはなぜですか?
- 30. ANTLR4文法が期待どおりに動作しない
説明をありがとう! – Michael