問題タブ [antlr4]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
antlr4 - antlr4 操り人形スタイルの宣言文法の問題
私は人形スタイルの宣言型言語の文法を書こうとしています。基本的な文法と、それをロードするためのリスナー アプローチを実装しようとする JUnit テストがあります。JUnit テストは最初のリソースをキャプチャしますが、2 番目のリソースはキャプチャしません。これは、resources
ルールが評価されないのとほとんど同じです。ローダにロギング ステートメントを追加しましたが、リソースに出入りすることはありません。
私の BaseListener 実装:
私のJUnitテスト
私のテスト出力:
java - ANTLR4およびASTの訪問者
私はANTLR4でASTを使用しようとしています。次のファイルを使用します。
Builder.java
ExprTestListener:
Expr.g:
私はこの出力を持っています:
ANTLR4の訪問者を理解するのは難しいと思います。
私には木の目標があります:
- MEASURESとACTIONSのINTを収集します(2つの異なるセットで)
- 一部のOPを置き換えます(たとえば、!= by <>)
- OPが置き換えられたcondexpr(一番上のアイテム)文字列を取得します(私の前のポイントを参照)
antlr - antlr4レクサーで、残りのすべての「単語」を不明なトークンとしてキャッチするルールを作成するにはどうすればよいですか。
私はantlr4レクサー文法を持っています。単語には多くのルールがありますが、他のルールでは一致しない単語に対して不明なトークンを作成することも必要です。私はこのようなものを持っています:
生成されたマッチャーは「〜」を不明としてキャッチしますが、単一の「~~~」トークンではなく、入力「~~~」に対して3つの「〜」不明なトークンを作成します。不明な連続文字の単語トークンを生成するようにレクサーに指示するにはどうすればよいですか。「不明:。;」も試してみました および「不明:。+;」結果はありません。
編集:現在のantlrバージョンでは。+?残りの単語をキャッチするようになったため、この問題は解決されたようです。
performance - ANTLR4: getInterpreter().adaptivePredict を呼び出すとパフォーマンスが低下する
パーと親愛なるコミュニティへ
最初に、素晴らしい Antlr4 (および antlr 全体 :-) ) に感謝したいと思います。私は過去 6 か月間 Antlr 3 を使用してきました (すでに非常に満足しています) が、antlr4 にはさらに満足しています。Java をターゲット言語として使用することで、文法の単純さと生成時間の大幅な改善に気付きました。残念ながら、antlr3 にはなかったランタイム パフォーマンスについて懸念があります。
ここに私の文法の抜粋があります:
生成されたコード (トレース用に System.out.println を追加しました):
ここにトレース:
_alt = getInterpreter().adaptivePredict(_input,68,_ctx); を呼び出すと、60 インチが失われます。2 回目ですが、_alt = getInterpreter().adaptivePredict(_input,68,_ctx); を呼び出すときは 1' 未満です。初めて。変更されたのは、もちろんパラメーター _input と _ctx です。
問題はおそらく私の文法にありますが、私は頭がおかしいです;-)。1. 解決策を探す場所を教えていただけないでしょうか。2.とにかくadaptivePredictで何が起こっているのか;-)
ご協力ありがとうございました!
敬具、ヴォルフガング・ハマー
antlr4 - LL_EXACT_AMBIG_DETECTION - 解釈
PredictionMode::LL_EXACT_AMBIG_DETECTION を使用すると、次のエラー メッセージが表示されます。
d 属性をどのように解釈すればよいですか。それは私の文法の規則を参照していますか?どのようにすればそれを見つけることができますか?
コードによると:
属性 d は DFA の決定です。しかし、文法の規則に戻って情報をどのように使用するかはわかりませんでした。お手伝いありがとうございます。敬具、ヴォルフガング・ハマー
java - ANTLR 4 $channel = 非表示およびオプション
v3 から v4 に切り替えることを決定した後、ANTLR 4 の文法について助けが必要です。私はANTLRの経験があまりないので、私の質問がばかげていたら本当に申し訳ありません;)
v3 では、次のコードを使用して Java スタイルのコメントを検出しました。
v4 には、ルール固有のオプションはありません。アクション (隠しチャンネルに移動) も無効です。
誰かがANTLR v4でそれを行う方法を教えてください。
antlr4 - TestRig-TDA4Rの実行例第1章
何年にもわたって、私はANTLR3で多くの時間を過ごし、ANTLR4が機能するようになることをとても望んでいました。私はTDA4R本の第1章の例から始めました。TestRigを実行しようとするところまで来て、...
私はWindows7を実行しています-64ビットですが、jarファイルは32ビットであると思います。これが問題でしょうか?それとも、私が正しいバージョンのJavaを使用していないということですか?java version = "1.6.0_24"?
私は何をしますか?システム全体をコンパイルしたくありません。
ありがとう。
antlr - ANTLR - 文字列テンプレート - キャメルケース
ツリー変換でantlrトークンをキャメルケースのStringTemplate属性に変換するための最良のパターン(言語に依存しない、再ターゲット可能な生成コード用)は何ですか? 例: 私の DSL には MY_FIELD 定義があり、StringTemplate の出力には myField が必要です。
antlr4 - 代替ルールのセット - reportAttemptingFullContext と reportContextSensitivity を回避する方法
「reportAttemptingFullContext」と「reportContextSensitivity」を理解するのに問題があり、文法で論文を回避するのに問題があります。ここに例があります:
ここに私の文法の抜粋があります:
そしてエラーメッセージ:
文法は全体的にかなり大きいです。これは簡単な例です。基本的に、代替手段があるたびに問題が発生します(上記の「expr_not」のように)。これらを回避するにはどうすればよいですか?セマンティック述語を使用してみましたが、これは (私の知る限り) コード生成時にルール内のトークンの位置が固定されている場合にのみ可能です。次のコードでコメントする場合 (より複雑な例):
解析時間を 20 倍します。これはかなり痛いです。この場合も、「reportAttemptingFullContext」を取得します。
私の質問: 代替手段で「reportAttemptingFullContext」を回避するにはどうすればよいですか。
ご協力ありがとうございました。敬具、ヴォルフガング・ハマー
antlr4 - ANTLR4によるアイランドソリューション
ANTLR4 で実装する必要があったアイランド ソリューションを共有したいと思います。
- 言語の構造。私が文法を書かなければならなかった言語は、いくつかの追加構造を持つ PL/SQL から派生したものです。これは本題から外れるので、ここでは詳しく説明しません。
言語は
PUT
、次の構造を持つ特別なコマンドを定義します。PUT [<SPECIALISED LANGUAGE>]
.
私の解決策は次のとおりです。
Lexer の
/li>nextToken
メソッドをオーバーライドします。Lexer にいくつかのコードを追加します。
/li>
さらに、ANTLR 4 で消滅したクラスANTLRStringStream
を定義する必要がありました。
どんなフィードバックでも大歓迎です!敬具、ヴォルフガング・ハマー