問題タブ [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.

0 投票する
1 に答える
22326 参照

coldfusion - 文法が完成したら、ANTLR v4ツリーを歩くための最良の方法は何ですか?

ゴール

私はColdfusionCFscript用のVarscoperを作成するプロジェクトに取り組んでいます。var基本的に、これは、開発者が変数を適切に作成したことを確認するためにソースコードファイルをチェックすることを意味します。

ANTLR V4を数日間使用した後、GUIビューで非常に優れた解析ツリーを生成する文法ができました。ここで、そのツリーを使用して、プログラムでノードを上下にクロールして変数宣言を探し、それらが関数内にある場合は適切なスコープを持っていることを確認する方法が必要です。可能であれば、言語の定義をこの特定のタスクと混合する必要があるため、文法ファイルでこれを行わない方がよいでしょう。

私が試したこと

私の最近の試みは、を使用して、を介しParserRuleContextてそれを通過しようとしたことでした。私のクラスをチェックした後、オブジェクトまたはオブジェクトのいずれかがあります。残念ながら、それを使用すると、特定のノードの実際のルールタイプを取得する方法を見つけることができず、テキストが含まれているだけでした。各ノードのルールタイプは、そのテキストノードが無視される右辺式であるか、変数の割り当てであるか、関数宣言であるかが重要であるため、必要です。childrengetPayload()getPayLoad()ParserRuleContextToken

質問

  1. 私はANTLRに非常に慣れていませんが、これは正しいアプローチですか、それともツリーをトラバースするためのより良い方法がありますか?

これが私のサンプルJavaコードです:

Cfscript.java

Cfscript.g4

Test.cfc(テストコードファイル)

0 投票する
2 に答える
1655 参照

conditional - 条件を解決するために 1 対 1 の文法規則を連鎖させる ANTLR

ObjectiveC antlr v3 文法 ( http://www.antlr3.org/grammar/1212699960054/ObjectiveC2ansi.g ) を見ると、他の一般的な文法の多くは、条件を解決するためにこれと同様の構造を行っています。

あなたがそれを読むと、彼らがこの非常に長い 1 対 1 の条件付きチェーン from conditional_expressionto logical_or_expressionto logical_and_expressionto to をinclusive_or_expression行っていることに気付くでしょうexclusive_or_expression

さて、私はANTLRに関してはかなり素朴ですが、これは条件を解析する奇妙な方法だと思います。logical_or_expression の定義が他のすべての条件式タイプをひねるのは非常に複雑に思えます。結局のところ、論理の定義はビットごとの左シフトとどのような関係があるのORでしょうか?

おそらくより良い方法がありますか、またはこの方法が必要な特定の理由がありますか?

0 投票する
1 に答える
468 参照

antlr - ParseTreeWalker でツリー トラバーサルを中止する

私の仕事は、Calc ソース ファイルを TAM アセンブリに変換するTriangle Abstract Machine用の 'Calc'-Compiler を作成することです。

Calc 言語は、変数宣言 (サポートされる整数のみ)、

課題

そして印刷機能。

現在、リスナーを使用して Calc を TAM アセンブリ (およびその動作) に変換することで、ANTLR4 のツリー ウォーキング機能を使用しています。ここで、コンテキスト エラーが発生した場合 (未定義の変数の使用など)、ツリー トラバーサルを中止したいと考えています。

どうやってやるの?

0 投票する
1 に答える
2680 参照

error-handling - Antlr4 は救済する代わりに残りのトークンを破棄します

私は Antlr4 を使用しています。これが私が書いた簡略化された文法です。

以下のように BailErrorStategy と BailLexer を使用しました。

1 つのケースを除いて、すべて正常に動作します。次の表現を試しました。

「or」トークンは大文字ではなく小文字にする必要があるため、この式は拒否され、IllegalArgumentException がスローされると予想されます。しかし、Antlr4 はこの式を拒否せず、式は "KW_TRUE IDENTIFIER KW_FALSE" にトークン化されていることが判明しました (これは予想されます。大文字の 'OR' は IDENTIFIER と見なされます)。このトークン ストリームを処理し、「true」のみを含むツリーに解析し、残りの「IDENTIFIER KW_FALSE」トークンを破棄しました。さまざまな予測モードを試しましたが、すべて上記のように機能しました。なぜこのように動作し、デバッグを行ったのかわかりませんが、最終的に Antlr の次のコードにつながりました。

コード「int alt = getAltThatFinishedDecisionEntryRule(previousD.configs);」booleanTerm で 2 番目の選択肢を返しました (「true」は 2 番目の選択肢「booleanLiteral」と一致するため) が、ATN.INVALID_ALT_NUMBER と等しくないため、noViableAlt はすぐにはスローされません。そこにある Java のコメントによると、「どうしてもエラーが発生するので、決定後まで遅らせてください」とありますが、最終的にエラーはスローされなかったようです。

この場合、Antlrがエラーを報告する方法が本当にわかりません。これについて誰かが私に光を当てることができますか? どんな助けでも大歓迎です、ありがとう。

0 投票する
1 に答える
47 参照

antlr4 - 特定の文字クラスを認識できるように、ルール定義でメソッドを指定します

ANTLRのレクサー文法を作成するときに、読み取り文字をルールで受け入れるかどうかを決定するメソッドを指定することはできますか?

たとえば、次のようなものです。

0 投票する
1 に答える
2311 参照

antlr4 - ANTLR4 で任意の文字を一致させるにはどうすればよいですか?

\u0000 から \uFFFF の範囲の任意の文字に一致させたいのですが、次のコードでは不十分です。

編集:

XMLのような構造にバイナリデータを挿入したいので、私は尋ねています:

[\u0000-\u00FF] の範囲に自分自身を制限することは確かに可能であり、入力ストリームは処理されたデータのバイト値のみを出力しますが、実際のテキストデータを使用するには追加のロジックを実装する必要があります。

私にとって最善の解決策は、ANTLR がバイナリ部分を何らかの形でスキップすることです。これにより、テキスト データを処理できます (バイナリ部分を処理するには、これらの部分の開始位置と終了位置のみが必要です)。

0 投票する
2 に答える
1494 参照

ant - antを使用してソースからANTLRv4をビルドする際の問題:[java] error(7):ファイルが見つからないか開くことができません:*。g

公式サイトからダウンロードしたANTLRバージョン4をソースからビルドしようとしましたが、antではできません。build.xmlが言うように、antlr-3.5-complete-no-st3.jarを/ libフォルダーにダウンロードしましたが、antを実行すると次のように返されます。

[mkdir]作成されたディレクトリ:/../antlr/antlr4-master/build/generated-sources/antlr3/org/antlr/v4/parse [java] error(7):ファイルが見つからないか開くことができません:*。g

ビルドに失敗しました/../antlr/antlr4-master/build.xml:108:この行の実行中に次のエラーが発生しました:/../antlr/antlr4-master/build.xml:84:Javaが返されました:1

OSX 10.8.2を実行しているMacBookを使用しています。antを使用してコンパイルを成功させるために他に何かしなければならないことはありますか?

よろしくお願いします、ディモス

0 投票する
1 に答える
2764 参照

antlr4 - antlr4:ParseTreeを作成するときに余分なトークンを無視します

ANTLR4を使用したリアルタイム言語PEARL用のコンパイラを開発しています。

ANTLR4を使用すると、私のParseTreeには、文法単位を終了するためのセミコロンなどの不要なトークンが入力されます。

これらの種類のトークンを無視するようにANTLRに指示する方法はありますか?

0 投票する
1 に答える
91 参照

antlr4 - XMLParserRuleContext からではなく、Own クラスから継承する

「訪問者」パターンを使用して、解析されたコードから XML を生成しています。典型的なコンテキスト クラスでは次のようになります。

そして、RuleContext の「getText」メンバー関数を使用して、訪問者コールバック関数の要素にアクセスします。「ParserRuleContext」から継承するクラスを作成し、「getText」をオーバーロードして、「<」や「>」などの文字を XML エスケープ シーケンスに置き換えたいと考えています。次のように、コードを生成し、コンテキスト クラスをクラスから継承させる方法はありますか。

ご協力ありがとうございました!よろしく、オオカミ