問題タブ [antlr2]
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 文法が単純なステートメントで失敗する
ANTLR 2.7 を使用して文法を作成し、次のような単純な式を解析します。
括弧とオプションのパーセント文字を使用できる単純な数値です
私の文法は次のようになります。
たとえば、正常に解析できます
しかし、単一の数値の解析に失敗します:
| LPAREN^ parexpr RPAREN!
どちらかを削除すると、または: (NUMBER PCT) => NUMBER PCT^
1 つの数値を解析できます (ただし、他の式は明らかにできません)。
この文法で単一の数値を解析できない理由がわかりません..?
私はずっと前にこのバージョンで実装されたプロジェクトに取り組んでおり、既存のものを拡張しているだけであることに注意してください。
java - ANTLR2 エラー報告
パーサー/レクサーがエラーに遭遇すると、それをに出力してconsole
回復し、解析が行われるようにします。エンドユーザーにとっては、これは API 呼び出しであり、修正できるように解析エラーについて彼に通知したいと思います。現在、エラーが発生したことしか検出できません。
私の質問: エラー メッセージをエンド ユーザーに伝えるにはどうすればよいですか? これは ANTLR が生成したパーサー/レクサー ファイルで処理されるため、エラー メッセージを取得できません。
Java 用に生成された文法。
編集 1: 文法はいつか書き戻されました。したがって、ANTLR2 でのみソリューションが必要です。
編集 2: を設定するdefaultErrorHandler=false;
と、デフォルトのエラーハンドラーがレクサー/パーサーで生成されず、これらの例外を処理コードで直接キャッチできることがわかりました。
parsing - ANTLR 2 キーワードの問題を解決する
ユーザーからのSTRINGを期待するルールがあります。現在、文法で定義したキーワードをユーザーが指定すると、パーサーはセグメンテーション エラーを返します。
例:
ユーザーが strName として calc/CALC を入力すると、パーサーは Seg Fault をスローします。これを回避する方法がわかりません。
編集:パーサーがセグメンテーション違反を発生させないようにする方法も知りたいです。これにより、望ましくないアプリケーションがクラッシュします。これらの状況では、セグ フォールトではなく正常に終了したいと考えています。
PS: 依存関係があるため、ANTLR 2 のソリューションが必要です。
java - ANTLR を使用して Eclipse (Java) でこのエラーが発生する理由
私はANTLR 2.7.6を使用しており、次のクラスMain.javaを実行すると
次のエラーが発生しました: 行 3:30: LT を予期し、'l' が見つかりました 行 4:82: 予期しないトークン: l 行 6:34: GT を予期し、'=' が見つかりました 行 6:58: LT を予期し、'= が見つかりました' 行 7:76: 予期しないトークン: l
私の Parser.g と私の Lexer.g
antlr - Antlr「CASE」エラーパス
私はantlr 2.7.6を使用しています。plc 61131-3 ST 言語のパーサーをプログラミングしていますが、文法の問題を解決できません。
文法は次のとおりです。
この問題は、「enum_Value」が「case_Selection」の場合に発生し、パーサーはそれを新しい「Case_Selection」ではなく、新しい「stmt」として解釈します。例:
上記の例では、「enum.liteal2」を新しい「case_Selection」として使用する代わりに、「assign_Stmt」と解釈し、「:=」が見つからないためエラーを返します。本当に新しい「stmt」があるかどうかを理解するために、「:」または「:=」が見つかるまで最大文字数を読み取ろうとする方法はありますか?
ありがとうございました!Edit1: より良い構文;