入力または終了方法を使用してANTLR4でリスナーを使用しているときに、特定のブロックの解析をスキップする方法はありますか。 私はlink hereを読みましたが、動作させることはできません。 ありがとうございました!リスナーANTLR4のサブツリーをスキップする
0
A
答えて
0
リスナーパターンを独自のListenerクラスで使用するときは、の入力はすでに正しくレキシングされており、解析されているのはです。したがって、あなたの質問に対する答えは「いいえ」です。リスナーを使用しているときは、通常、ポスト・パース後のツリーを歩いているだけです。
これはすべてが失われていることを意味しますか?もちろん違います。 は、「無視」したいコンストラクトに対して、Enter
イベントまたはExit
イベントをコーディングしないだけです。それは簡単です。彼らは途中、私はそれらを実装するに
がif
文をプログラムする方法については、私はあなたにのぞき見をあげる:場合-else文、私はいつもこのようなビジターパターンを使用してそれらを実装してきたように
:
public override MuValue VisitIfstmt(LISBASICParser.IfstmtContext context)
{
LISBASICParser.Condition_blockContext[] conditions = context.condition_block();
bool evaluatedBlock = false;
foreach (LISBASICParser.Condition_blockContext condition in conditions)
{
MuValue evaluated = Visit(condition.expr());
if (evaluated.AsBoolean())
{
evaluatedBlock = true;
Visit(condition.stmt_block());
break;
}
}
if (!evaluatedBlock && context.stmt_block() != null)
{
Visit(context.stmt_block());
}
return MuValue.Void;
}
許可されていますが、これはおそらく文脈からは分かりませんが、安心して動作します。これを完全な文脈で見るには、文法と実装の優れた例についてはBart Kiersをご覧ください。
関連する問題
- 1. PHPのXMLReaderがサブツリーをスキップします
- 2. ANTLR4:アイランド文法、トークンマッチング/スキップ
- 3. ANTLR4ツリー・リスナーでメイン・コンテキストのアクセスサブコンテキスト
- 4. ANTLR4
- 5. antlr4レクサー述語のドキュメントがantlr4上
- 6. ANTLR4トークンを変更する
- 7. サブツリー内のデータを要約するクエリ?
- 8. 既存のフォルダをgitサブツリーにする
- 9. 可能なサブツリーの数をカウントする
- 10. 元のツリーのサブツリー
- 11. サブツリーのxpath検索
- 12. Gitのサブツリー:別のディレクトリに移動サブツリーと
- 13. 変異オブザーバ---サブツリー
- 14. Readd Gitサブツリー
- 15. のPython + ANTLR4:
- 16. ANTLR4 - ルール
- 17. ANTLR4レクサーリスナー
- 18. antlr4 - トークン
- 19. Antlr4パーサ
- 20. antlr4 - デフォルトコンテキストオブジェクト
- 21. Antlr4ハンドリング
- 22. ANTLR4ランタイムジャー
- 23. 最小のサブツリーを見つける
- 24. Reduxの - Reduxの店のサブツリーをリセットする適切な方法は何ですかサブツリー
- 25. antlr4 Pythonの対象
- 26. ANTLR4パフォーマンスの問題
- 27. Antlr4 - 句の順序
- 28. ANTLR4がEOF
- 29. ANTLR4 parsing subrules
- 30. Antlr4 CommonTokenStreamコンストラクタ
JUSTリスナーを使用してif-elseステートメントを実装できますか? –
@BreatheHacker if-elseに関する私の更新の回答をご覧ください。いったんこのパターンを学ぶと、リスナーだけを使ってそれができるかどうかを見直すことはありません。 – TomServo
助けてくれてありがとう。 –