問題タブ [antlrworks]
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.
debugging - ANTLRWorks デバッグ エラー
ANTLRWorks 3.4 で文法をデバッグすると、次のエラーが表示されます。
上記のエラーが発生した文法を以下に示します。
テストファイルは、
このエラーを解決する方法はありますか。これが通常どのように起こるか
ありがとうございました。
antlr - 文法を処理するときに Antlr が無限ループに入るのはなぜですか
数式を解析するための ANTLR 文法と、それらを評価するための 2 つ目の文法を作成しました。AST を構築し、それを実際に評価するために再解析することは、一種の 1 つの操作でありすぎると考えたので、文法をリファクタリングして、その特定を実行するためのロジックを含む式を表す「用語」オブジェクトの階層を生成したいと考えました。手術。次に、ルート Term オブジェクトを単純に評価して、具体的な結果を得ることができます。
かなりの数の文法を書き直さなければならず、最終的に最後のエラー メッセージを取り除くことができました。残念ながら、ANTLR は無限ループに陥っているようです。
ここで誰かが問題を解決するのを手伝ってくれませんか? 文法は一部の人にとってはかなり興味深いはずだと思うので、投稿しています。(これは、私が Google で見つけた Garmmar に基づいていますが、認めざるを得ませんが、私のニーズに合うようにかなり変更しました)。
助けていただければ幸いです。
クリス
antlr - 可能性のある ANTLR 文法のあいまいさの解決 (および一般的な改善のヒント)
Python 3 の AST ダンプ形式を解析して、より簡単に操作できる AST 形式に変換できる文法を構築する際に問題が発生しています。そのためにANTLR文法を書くことにしましたが、キーワードブロックの処理に問題があります(ただし、何らかの理由でキーワードブロックのみです)。次のように、キーワードの文法を分離しました。
これは、キーワード ルールに示されている形式で、キーワードのリスト (カンマ区切りで 0 以上) を受け入れるように設計されています。
上記の文法に次の (有効な) 入力を与えると、
キーワード=[キーワード(引数='名前', 値=Str(s='UGA')), キーワード(引数='ランク', 値=Str(s='2'))]
文法はこれを認識します。
ただし、私が書いた「完全な」python 3 AST 形式の文法を使用すると (スペース節約のためにhttp://pastebin.com/ETrSVXvfにあり、上記の 2 つのルールはそれぞれ 106 行目と 109 行目にあります)、これは実質的にまったく同じ文法規則を使用しますが、上記のサンプルの最初のキーワード一致を解析した後、トークン ストリームは数文字ずれているように見えます。キーワード ルールに対して解析すると、次の出力が生成されます。
これが発生する可能性は 1 つだけ考えられます。複数のキーワード ステートメントを検出するために使用したパターンは、他のタイプのステートメントでも機能するため、文法のあいまいさが原因で、何かが正しくトークン化されていません。しかし、そのあいまいさが実際に文法のどこにあるのか、私は完全に立ち往生しています。
また、一般的に文法を改善する方法に関する一般的な改善のヒントをいただければ幸いです。
antlr - ANTLRレクサールールは一致していなくても文字を消費しますか?
antlr lexerルールの奇妙な副作用があり、それを示すために(ほぼ)最小限の作業例を作成しました。この例では、たとえば文字列と一致させたいと思い[0..1]
ます。しかし、文法をデバッグすると、パーサーに到達するトークンストリームには。のみが含まれます[..1]
。最初の整数は、含まれている桁数に関係なく常に消費され、それがどのように発生するかについての手がかりはありません。ルールを削除するとFLOAT
すべてがうまくいくので、間違いはそのルールのどこかにあると思います。しかし、それはまったく一致するべきではないので、[0..1]
私はかなり困惑しています。
私が間違っていたかもしれないどんなポインタでも喜んでいるでしょう。これは私の例です:
antlr - アンダースコア文字を無視
次の文法のインタープリターで「___sad」を実行しようとすると
インタープリター出力:
デバッガー出力:
インタープリターにはアンダースコア文字が含まれており、デバッガーはそれを無視しているようです! この場合、ある種の例外が発生することが予想されます (文法では「A」から「z」の文字のみが定義されているため)。私の文法の何が問題なのですか?
java - Antlr AST の構築
ANTLRを使用して以下の文法のASTを構築しようとしています
上記の場合、入力に応じて NOT IN または IN でルートツリーを構築するにはどうすればよいですか? または何か良い方法はありますか?
また、辞書のようなPythonの場合、ルートとしてMAPを持ち、各キーの子MAP_PAIRを持つastツリーを構築するにはどうすればよいですか:値は素晴らしいはずです
ラベルとツリーの書き換えでいくつかの代替案を試しましたが、antrlworks は常に文句を言います
どんな助けでもいただければ幸いです
java - ANTLRは再帰的にトークンを置き換えます
私は次の文法を持っています:
およびJavaのコード:
入力:array1[array2[array3[index]]]
、各識別子を変更したい。出力が表示されることを期待していましたarray1_[array_2[array3_[index_]]]
が、出力は入力と同じでした。
だから問題は、なぜこのsetText()
方法がここで機能しないのかということです。
編集:
私はバートの答えを次のように修正しました:
ルールに一致する各トークンを変更したいqualifiedName
。上記のコードを試してみましたが、入力array1[array2[array3[index]]]
については出力が表示されることを期待していましたarray1[array2[array3[index_]_]_]_
が、代わりに最後のトークンのみが変更されました:array1[array2[array3[index]]]_
。
どうすればこれを解決できますか?
parsing - ANTLRに>と空白を含む識別子は可能ですか?
ANTLRで次のような文法を作ろうとしています。
次のような識別子を解析できます。
ここで、foo> barは識別子です。これは、>の後に文字が続く場合は識別子に含まれ、それ以外の場合は大なり演算子であるためです。
そして、私はそれが次のようなものを解析する必要があります
()が必要な場合。
私はこのトピックとANTLRに本当に慣れていないので、誰かが助けてくれることを願っています。
私は現在この文法を持っています
しかし、IDの>と演算子としての>を切り替える方法がわかりません。
java - 次の予期されるトークンを検索中 エラーが発生した場合 ANTLR 3
私は ANTLR 3 を使用しています。入力でエラーが発生した場合、次の予想されるトークンをどのように見つけることができるかという質問があります。パーサーの getErrorMessage(RecognitionException e, String[] tokenNames) をオーバーライドしようとしましたが、エラーを取得できますが、 What is next expected token を取得できません。誰かが助けることができれば。前もって感謝します。
parsing - ブール式でオプションの引用符をサポートする
バックグラウンド
私は数日間ANTLRWorks(V 1.4.3)を使用していて、単純なブールパーサーを作成しようとしています。以下のレクサー/パーサーの組み合わせ文法は、ブール式のオペランドとして引用符で囲まれた空白のテキストのサポートを含む、ほとんどの要件に適しています。
問題
文法が引用符を必要とせずに空白のオペランドで機能するようにしたいと思います。
例
たとえば、式-
「左右」AND中央
引用符を削除した後でも、同じ解析ツリーを持つ必要があります-
左右中央。
私はバックトラック、述語などについて学んでいますが、解決策を見つけることができないようです。
コード
以下は私がこれまでに得た文法です。愚かな間違いについてのフィードバックは大歓迎です:)。
レクサー/パーサー文法