ANTLR文法でデフォルトのトークンチャネルと非表示のトークンチャネルを切り替えることはできますが、3番目のチャネルが必要です。どのようにして、新しいトークンチャンネルをその文法で定義できますか?たとえば、「代替」という名前のチャンネルが必要だとします。ANTLR:新しいチャネルを文法で定義する
1
A
答えて
2
あなたは、単にこのようなあなたのレクサーに余分int
紹介することができるように彼らは、Token
class にちょうどfinal int
年代だ:
grammar T;
@lexer::members {
public static final int ALTERNATIVE = HIDDEN + 1;
}
// parser rules ...
FOO
: 'foo' {$type=ALTERNATIVE;}
;
// other lexer rules ...
関連するQ & A:Cの場合How do I get an Antlr Parser rule to read from both default AND hidden channel
1
をあなたが使用できるターゲット
//This must be assigned somewhere
@lexer::context {
ANTLR3_UINT32 defaultChannel;
}
TOKEN : 'blah' {$channel=defaultChannel;};
これは、すべてのルールの後にリセットされるので、チャンネルの割り当てがルール間で持続するようにするには、nextTokenStr()をオーバーライドする必要があります。
関連する問題
- 1. antlr文法の定義
- 2. はAntlrで文法を定義します
- 3. ANTLR隠しチャネルの空白の問題
- 4. antlrで予約されていないキーワードを定義する方法
- 5. 暗黙の定義警告を与えるANTLR文字列トークン
- 6. Goでチャネルを持つインタフェースを定義
- 7. Profile Antlr文法
- 8. ANTLR文法エラー
- 9. ANTLR文法リンクエラー
- 10. ANTLR木文法
- 11. Emacsで新しい構文を定義する
- 12. Antlr4文法でANTLRツール
- 13. ANTLR文法でかっこを含む論理演算子を定義する方法
- 14. ANTLRを使用してDSL用の方言を定義する
- 15. ANTLR文法とAST
- 16. 新しい言語文法ルールを定義していますか?
- 17. AngularJSコンポーネントで新しい変数を定義する方法
- 18. smlで新しい署名を定義する方法
- 19. ストアドプロシージャクエリで新しい列を定義する方法
- 20. ANTLR文法のあいまいさ
- 21. 古いプロセスを新しいプロセス定義で更新する-Activiti
- 22. ANTLR文法:CP1252ユーロ文字を理解してください
- 23. ANTLR文法の曖昧
- 24. ANTLR v4のC文法
- 25. Antlr MissingTokenException(単純文法)
- 26. 文法パーサの提案(ANTLR)
- 27. ANTLR文法の問題
- 28. `SEA_WS`はantlr文法の何を表していますか?
- 29. 通知チャネル名を更新する正しい方法は何ですか?
- 30. アスタリスクダイヤルプランで新しいチャネルを作成する
もちろん、どこかで 'ALTERNATIVE'の型を定義しなければなりません... –