問題タブ [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.
antlr - Antlr3 でこの解析のあいまいさを解決する方法
うまくいけば、これがこの問題を解決するのに役立つ適切な量の情報です。
次のANTLR3構文が与えられた場合
パーサーで問題を引き起こしている行は次のとおりです。
ANTLRWorks は、10001 の後の最後のエラーを次のエラーの問題として赤で強調表示します。 .
これを投げないようにするにはどうすればよいorg.antlr.runtime.EarlyExitException
ですか?
これは、パーサー ルールと をEOL 区切り文字としてnumber
使用しようとするあいまいさが原因であると確信しています。.
antlr - ANTLR3文法で次の複数の選択肢の警告を取り除く方法は?
関数を他の関数の中にネストできるようにしたい。
これが不平を言っている行です
これが代替案を検討しているものです
.
ステートメントの終了ルールとして使用しています
ANTLRWorksでのsynatx図は次のようになります
(出典:vertigrated.com)
私は警告なしにコンパイル/動作するものが本当に好きです。この警告状態を解決するにはどうすればよいですか?
antlr - 決定は、複数の選択肢を使用して「ID」などの入力と一致させることができます:1、2
単純な関数型言語の文法を定義しようとしています。定義はほぼ完了していますが、次のあいまいさを乗り越えることができません。
これが、ATOMとIDの図面がほぼ同じである関連ルールだと私が思うものです。
これがANTLRWorksの構文木です
idの代替http://www.vertigrated.com/images/id_alternatives.png
これは、私が構文解析をサポートしようとしているものの大まかなストローマンです。
statements
だから私は内部の入れ子をサポートできる必要がありますfunctions
私の代入演算子はどこ->
ですか、これは単一の代入言語です
.
私のステートメント終了マーカーはどこにありますか
これはANTLR3で解析することさえ可能ですか?
antlr - 小文字を ANTLR と一致させる
簡単な文法には ANTLRWorks を使用します。
しかし、通訳によるとlowercase_string
一致しません( . アイデア?foobar
MismatchedSetException(10!={})
antlr - ANTLRWorks1.4.3は拡張ASCII文字を正しく読み取れません
私は、パーサージェネレーターとしてANTLRを選択したかなり標準的なコンパイラプロジェクトに取り組んでいます。既存の文法をv2からv3に更新しているときに、ANTLRの公式IDEであるANTLRWorksがファイル内の拡張ASCII文字を正しく表示していないことに気付きました。Notepad ++を使用してファイルをASCIIからUTF8に変換した後でも、それらの文字は正方形として表示されました。Notepad ++では、正常に表示されます。
このグリッチは、保存時にANTLRWorksがファイルを破損することを意味するため、エディターとして使用できなくなり、かなり面倒です。ここにいる他の誰かがこの問題に遭遇し、おそらくそれを解決しましたか?とても感謝しております。
[編集]:特定の問題は、最新バージョンのANTLRWorks(昨日ダウンロード)およびhttp://www.antlr.org/grammar/1086696923011/vhdlams/index.htmlから取得したvams.g文法ファイルで発生します。
ascii - ANTLRWorks 1.4.3 は表示できず、ASCII 文字を切断します
以前の質問 ( ANTLRWorks 1.4.3 は拡張 ASCII 文字を適切に読み取ることができません) に対する新たな展開として、16 進エディターを使用して単純なテキスト ファイルを作成しました。
または16進数で:
結果のファイルは、Notepad++ で問題なく読み取れます。ANTLRWorks 1.4.3 で開くと、(拡張) ASCII 文字が四角いボックスとして表示されます。行末にスペースを追加および削除してファイルを保存すると、16 進数のファイル ビューは次のようになります。
何らかの理由で、アポストロフィ間の最初のスペース (20) がクエスチョン マーク (3F) に切り捨てられ、セディラ文字 (E7) を含む特殊な c とそれに続くアポストロフィの両方がクエスチョン マークに置き換えられました。
拡張 ASCII 文字が存在すると、何らかの形で事態がひどく悪化するようです。この問題を再現したり、考えられる理由と解決策を提供したりできる人はいますか?
前もって感謝します。
java - ANTLR-文法とツリー文法の間のトークン列挙の不一致
バックグラウンド
私は、AntlrWorksを使用して、指定された要素の存在(または存在しない)の値のセットをテストするブール方程式の簡単な文法を書き込もうとしています。目的のASTを生成するレクサー/パーサーの組み合わせ文法を作成しました。また、動作しているように見える(AntlrWorksのデバッグ関数をパスする)対応するツリー文法も作成しました。
問題
ただし、テストプログラム(つまり、同じプログラムでlex、parse、tree parse)で2つを相互に接続しようとすると、次のようなエラーが発生します...
node from line 1:5 required (...)+ loop did not match anything at input 'and'
と
node from after line 1:8 mismatched tree node: UP expecting <DOWN>
toStringTree()
健全性テストとして、生成されたASTと結果のからの結果をテストプログラムに出力させtoTokenTypeString()
ましたTreeNodeStream
。
私が見つけたのは、の列挙されたTreeNodeStream
トークンタイプの値が、自動生成されたツリー文法コードの列挙されたトークンタイプの値と一致しないことでした。
例
サンプル入力:
"true and false"
パーサーが提供するツリーからのtoStringTree()の出力:
(and true false)
toTokenTypeString()
上記のASTを含むTreeNodeStreamからの出力:19 2 22 20 3 8
そのトークンストリームは次のようになりますがAND <DOWN> 'true' 'false' <UP> NEWLINE
、TreeParserはそれをCLOSEPAREN <DOWN> OR 'false' <UP> OPENPAREN
(ノードトークンタイプの出力を確認し、ツリー文法で定義された列挙に対してチェックすることに基づいて)と見なし、エラーをスローします。
1:5 required (...)+ loop did not match anything at input 'and'
結論
ASTを正しく識別するようにツリーパーサーが設定されていないのはなぜですか?
以下は私の情報源です。私が犯したはずの愚かな間違いについてのフィードバックに感謝します:)
レクサー/パーサー文法
ツリー文法
テストプログラム
math - ANTLRWorks - コード生成がスタックして生成されない
次の構文を使用して、算術式の文法を定義しています。より複雑な全体のサブセットですが、論理演算を含めるように文法を拡張したときにのみ問題が発生しました。
antlrworks を使用して gen をコーディングしようとすると、生成を開始するのに非常に長い時間がかかります。expr の先頭へのループが含まれているため、問題は paren のルールにあると思います。これを修正するための助けは素晴らしいでしょう
前もって感謝します
使用されるオプション:
Grammar のコードは次のとおりです。
`
antlr - ANTLRが無効な入力でエラーメッセージを出力しない
将来、ドメイン固有言語(DSL)を実装するために、ANTLRの学習を始めました。私はTheDefinitiveANTLR Referenceを購入し、プログラムと言語/コンパイラー設計の概念に慣れるために、それを読み始めました。私は自分の環境(Visual Studio 2010およびC#)内ですべてが正常に機能するようになり、本全体で説明されているように、いくつかの基本的な文法を正常に作成できました。Javaのソースコードはここにあります:http://pragprog.com/titles/tpantlr/source_code
しかし、第3章を読んでいるときに、本に示されているように、クラスがコンソールにエラーを出力しないという問題に遭遇しました。この本で使用されているのと同じ文法を使用しているので、C#ランタイムと関係があると思います。現在、ANTLRWorksを使用してレクサー/パーサーを生成しており、CSharp3用の3.4 ANTLR配布ランタイム(Antlr3.Runtime.dllおよびAntlr4.StringTemplate.dll)を使用しています。
これは既知の問題ですか?そうでない場合は、古いバージョンのランタイムまたはANTLRWorksを使用してみてください。
私が使用している文法:
誰かが見る必要がある場合はC#クラスを投稿しますが、非常に長いので、誰かが要求するまで延期します。ありがとうございました。
java - ANTLRが無効な入力でエラーをスローしない
作成しているJavaツールで論理式を解析するためにANTLRを使用していますが、生成されたANTLRレクサーとパーサーに無効な入力文字列を渡しても例外が発生しないため、問題が発生しています。予想どおり、RecognitionExceptionをスローする代わりに、生成されたファイルはエラーメッセージをコンソールに出力し、エラーが発生しなかったかのように返します。これにより、後で空のデータが発生したときにプログラムがクラッシュします。
ANTLRWorksバージョン1.4.3を使用してファイルを生成しました。コンソールに出力するのではなく、実際にエラーをスローするための何らかのオプションがあるはずですが、何も見つかりませんでした。ANTLRに実際にエラーメッセージをスローさせる方法を知っている人はいますか?C#でのこの同じ問題は、古いバージョンのANTLRを使用することで解決されたことがわかりましたが、それは私がする必要があることですか?
編集:バートが私が探していた方向に私を向けた後、私はこのページを見つけました
https://theantlrguy.atlassian.net/wiki/display/ANTLR3/Migrating+from+ANTLR+2+to+ANTLR+3
その「エラー処理」セクションには、私が望むことをより正確に実行するコードが含まれていました。ANTLRが例外をキャッチする方法を変更するには、文法ファイルで次のように言うことができます。
これにより、ANTLRは例外を処理して回復するのではなく、例外をスローします。そのセクションには、すべての可能な例外がスローされることを確認するために、不一致および回復関数をオーバーライドすることについてのいくつかのこともあります。