問題タブ [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.
java - ANTLR /文法の問題:電卓言語
個人的なプロジェクトのためにブール式の言語/文法を作成しようとしています。ユーザーは、後で変数が初期化されたときに評価される変数を提供して、Javaのような構文で文字列を書くことができます。雨たとえば、ユーザーが文字列を入力する場合があります
その後、変数FOOが初期化されて6に等しく、BARが1に等しい場合、式は13> 24と評価され、falseを返します。
私はANTLRworksを使用して文法を生成していますが、見た目は問題ありませんが、負の符号を正しく解釈していません。ANTLRworksの入力が(何らかの理由で)変更されました。「(8-3)> 6」は「(8> 6」として読み取られます(閉じ括弧がないため実行に失敗します)。実装していません。変数はまだ検索されていますが、これまでのところ整数のみの文法は次のとおりです。
'-'記号以外はすべて正しく機能しています。誰かがこれを修正する方法を知っていますか?
また(私はANTLRに非常に慣れていません):私は正しく評価を行っていますか?または、文法で構造を定義し、別の方法を使用してステートメントが真か偽かを判断する必要がありますか?
antlr - *、-、/ などの演算子では文法が機能するのに、+ では機能しないのはなぜですか?
私は今文法を作成していますが、左再帰を取り除く必要がありました.加算演算子を除くすべてで機能するようです.
これが私の文法の関連部分です:
次に、次のようなことをしようとすると
それは完全に動作します。しかし、次のようなことをしようとすると
次のようなエラーが表示されます。
MismatchedTokenException: 不一致の入力 '+' は '\u001C' を予期しています
私はしばらくこれに取り組んできましたが、*、-、および / では機能するのに + では機能しない理由がわかりません。私はそれらすべてに対してまったく同じコードを持っています。
編集:並べ替えて SUBTRACT を PLUS の上に置くと、+ 記号は機能しますが、- 記号は機能しません。なぜ antlr はそのようなものの順序を気にするのでしょうか?
java - Java 用の ANTLR 文法ファイルがコンパイルされないのはなぜですか?
静的 Java コンパイラーとして知られる Java コンパイラーのサブセット用の ANTLR 文法が与えられました。文法を拡張して、Java の機能をさらに含めようとしています。たとえば、 For Loopsの文法を追加しました。
Eclipse と ANTLR プラグインを使用して、「ANTLR 文法のコンパイル」を行いました。コンパイルする代わりに、コードの最初のビットで 2 つのエラーが発生しました。
最初のエラーは 1 行目にあります: 'Unexpected Token: grammar' 2 番目のエラーは 5 行目にあります: 'Unexpected char: @'
この基本的な ANTLR 構文を認識しないのはなぜですか? 私の最初の考えは、クラスパスに何かが欠けているということでしたが、プロジェクトのプロパティに移動し、次の JAR がLibrariesに含まれていることを確認しました。
- antlr-2.7.7.jar
- stringtemplate-3.2.1.jar
- antlr.jar
- antlr-runtime-3.0.1.jar
アイデアや提案はありますか?
antlr - Antlr の質問: ANTLRWorks から単純なファイルをコンパイルするための Antlr ツールを取得できません
文法ファイルは次のとおりです。
ツールを起動するためのバッチ ファイルは次のとおりです。
結果は次のとおりです。
以前の投稿では「org.antlr.Tool」を参照していますが、3.3 jar には上記の場所にあります。アイデアは、ツリー パーサーのデバッグ バージョンを作成することでした。ドキュメントによると、コマンド ライン ツールを使用する必要があります。
誰もこれを見たことがありますか?私は気が狂っていますか?それは 2 行の長さで、ファイルの最初の単語で死んでいます。
もちろん、これは antlrworks でコンパイルされます。
助けていただければ幸いです。薬をこれ以上調整する余裕はありません。
ファローアップ:
ANTLRWORKS で Run --> Debug メニュー オプションを使用すると、ツリー パーサーのデバッグ バージョンが生成されることがわかりましたが、私の手元にあるコマンド ライン ツールでは生成されません。生成されたデバッグ ソースは、生成用の出力フォルダーに存在します。ANTLRWORKS で非デバッグ バージョンを取得するには、Generate メニュー オプションを使用します。Eclipse でツリー パーサーのデバッグ バージョンを使用して、テスト ハーネスを起動して待機し、treegrammar パーサー ファイルで Run Remote Debug を介して ANTRWORKS に接続します。ツリーのパーサーを調べたところ、不一致のツリー ノード エラーが発生しました (パーサー エラーではなく、ツリー パーサーをデバッグしているので問題ありません)。だから今、私は自分がした他のばかげたことを見つける必要があります。HTH 私以外の誰か。
antlr - Javaファイルを解析するためのANTLR文法を書く
私は ANTLRWorks を初めて使用し、最終年度のプロジェクトを行っています。Javaでクラスを認識し、「出力として任意のファイルに出力する」ためだけにANTLR文法を書く方法を教えてください。同じ行で、プロジェクトの文法を書くことができます。
antlr - ANTLRの部分式を使用した式の解析
私はANTLRで次のような再帰式を解析しようとしています:
また
私はこの想定される解決策を読みました: 式のためのANTLR文法
ただし、次のようなルールを作成しようとすると、次のようになります。
ANTLRは、「RuleParenthesisExpressionは左再帰的です」と文句を言います。
同じ形式の部分式を自分自身の中に持つことができる式をどのように解析できますか?
antlr - ANTLRWorks標準ツリー
ANTLRWorksで文法をデバッグする場合、ANTLRWorksは、「^」、「!」を含まない素敵なツリーを構築します。ルール内の演算子。「^」、「!」を追加せずにこのツリーにアクセスすることは可能ですか?文法ソースへの演算子?
antlr - ANTLR3 を使用したステートメント終了マーカーとしての改行、EOF の解析
私の質問は、ANTLRWorks で次の文法を実行することに関するものです。
選択した改行NL(CR/LF/CRLF)または整数に関係なく、次の入力(開始ルールとしてプログラムを使用)で次の結果が得られます。
"; NL " または "32; NL " はエラーなしで解析されます。";" または「45;」(改行なし) EarlyExecution が発生します。" NL " 自体はエラーなしで解析します。セミコロンなしの"456 NL " は、MismatchedTokenException になります。
私が望むのは、ステートメントが改行、セミコロン、またはセミコロンとそれに続く改行で終了することであり、パーサーが終了時にできるだけ多くの連続した改行を食べるようにしたいので、 "; NL NL NL NL " はちょうど4つまたは5つではなく、1つの終端。また、ファイルの終わりの場合も有効な終了にしたいのですが、その方法はまだわかりません。
では、これの何が問題なのですか? どうすればこれを EOF でうまく終了させることができますか? 私は解析、ANTLR、および EBNF のすべてに完全に慣れていないため、簡単な電卓の例とリファレンスの間のどこかのレベルで読む資料はあまり見つかりませんでした (The Definitive ANTLR Reference を持っていますが、 ANTLRWorks の外ではまだ実行していないクイック スタートを前面に出しており、実際にはリファレンスです)、読書の提案 (Wirth の 1977 年の ACM 論文以外) も役に立ちます。ありがとう!
antlr - ANTLR-AST階層の設定に問題があります
ANTLRのツリー構築演算子(^と!)に頭を悩ませようとしています。
私はフレックスバイト配列の文法を持っています(配列内のバイト数とそれに続くその数のバイトを記述するUINT16)。最初の2バイトで示されるのと同じ数のバイトが配列にあることを検証するすべてのセマンティック述語とそれに関連するコードをコメントアウトしました...その部分は私が問題を抱えているものではありません。
私の問題は、いくつかの入力を解析した後に生成されるツリーにあります。発生するのは、各キャラクターが兄弟ノードであるということだけです。生成されたASTは、ANTLRWorks1.4のインタープリターウィンドウに表示されるツリーに似ていると予想していました。^文字を使用してツリーを作成する方法を変更しようとすると、次の形式の例外が発生します。
文法は次のとおりです(現在C#を対象としています)。
ASTは次のようになると私は思っていました。
これが、ASTの視覚的(実際にはテキストですが、GraphVizを介して画像を取得する)表現を取得するために使用していたC#のプログラムです。
そのプログラムの出力がGraphVizに入れられるのは次のようになります。
Javaの同じプログラム(試してみてC#を使用しない場合):
antlr - antlr3-解析ツリーの生成
いくつかのjavascriptコードで解析ツリーを生成して使用できるように、antlr3APIを理解するのに問題があります。antlrWorks(IDE)を使用して文法ファイルを開くと、インタープリターは解析ツリーを表示でき、それも正しいです。
antlr3ランタイムを使用して、コードでこの解析ツリーを取得する方法に関するリソースを追跡するのに多くの問題があります。私はランタイムファイルとパーサーファイルのさまざまな関数をいじり回してきましたが、役に立ちませんでした。
antlrWorksは自分自身のツリー文法なしで解析ツリーを表示でき、antlrが文法ファイルから解析ツリーを自動的に生成することを読んだので、私はこの基本的な解析ツリーにアクセスできると思います。おそらく気づいていません。私はこの考えで正しいですか?