問題タブ [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 エラー
Antlr 定義言語を使用して Java エディターで文字列を入力すると、最初の引用符 (") を入力するとすぐにエラーが発生します。
入力:
エラー:
文法で文字列リテラルをどのように定義したかが原因だと思います。
文法の定義
最初の引用が表示されるとすぐに、文字列を抽出しようとしていると思われます。これは、レクサーを使用して構文を色分けする IDE であるため、リアルタイムで行われます。このエラーを防ぐために文法でできることはありますか?
編集:私が考えていたのは、行末までチェックすることでした。IDE は、netbeans や eclipse のように、ユーザーが引用を完了するまで、引用から始まる行をオレンジ色にします。文法を介してこれを行う方法がわからないので、レクサー/パーサーに反映されます
antlr - この文法で「LL(*)以外の決定」エラーが発生するのはなぜですか?
文法に表現のサポートを追加しようとしています。私はScottStanchfieldのAntlrチュートリアルによって与えられた例に従っています。何らかの理由で、追加ルールがエラーを引き起こしています。これは、「決定は複数の選択肢を使用して「'+' ..'-'IDENT」などの入力と一致する可能性があります」という非LL(*)エラーを引き起こしています。
次のような単純な入力:
エラーが発生します。私はAntlrWorksインタープリターを使用して、文法をテストしています。単項+/-と追加ルールのツリーの構築方法に問題があるようです。解析の可能性が2つある理由がわかりません。
文法は次のとおりです。
余分な目が必要です。私は何が欠けていますか?
c# - antlr でのトークン競合の解決
トークンを持っています OR:'OR'; ブール式 (a==b OR a==c) を評価するために使用する文字リスト AZ、AK、OR、GA にある州の略語を解析するための別のルールがあります... 私が見つけているのは、その antlr です状態リストにエラーがあり、OR はor
トークンではなくトークンであるべきだと考えています
このあいまいさを解決するにはどうすればよいでしょうか。
ここに私が解析しようとしているルールのいくつかがあります
- THEN STATE_LICENSE AL、AK、AS、AZ、AR、CT、DE、DC、FM、FL、GA、GU、HI、ID、IL、IN、IA、KS、KY、LA、ME、MH、MD、MA、 MI,MN,MS,MO,MT,NE,NV,NH,NJ,NM,NY,NC,ND,MP,OH,OK,OR,PW,PA
- IF 1198 == "x" OR 1190 != "x" THEN 800 を無効にする
- IF 801 >= "1000000" THEN DISPLAY_ERROR "それは+高すぎます.+Go+and+get+cheaper+one+!!!"
これが私が使用している文法です
antlr - ワイルドカード演算子を使用したANTLRネストされたセマンティック述語
スキームのような言語通訳者のための文法を作成しました。最初は、評価を制御するif-then-elseステートメントのセマンティック述語が1つありました。つまり、条件がtrueの場合、「then」のみが評価されます。falseの場合、「else」のみが評価されます。タイプチェック機能を追加するために、最初の述語を囲む2番目のセマンティック述語を追加しました。ただし、タイプチェックまたは評価するには、グローバルブール値を手動でtypeCheck
trueまたはfalseに変更する必要があるため、これはハックです。
IFステートメントのASTには2つのブランチがあります。1つ目(IFT)は、IFステートメントの引数の型チェック用です。[これが2つの述語の理由です。タイプチェックするには、すべての引数を評価する必要があります] 2番目のブランチ(IFE)は、短絡したif-then-elseを評価するためのものです。この問題は、最初の述語を囲む2番目のセマンティック述語を追加したときに始まり、悪名高い「入力時に実行可能な代替手段がありません」というエラーが発生しました。ゆっくりとどこにも行かなくなった後、私は必需品だけで新しい文法を作成しました。同じ問題。これがASTを取り除いたものです:
私はこれを経験したことはありませんが、EclipseのANTLRIDEでSOについて報告された問題を見てきました。そこで、ANTLRWorksを起動し、パーサー文法をデバッグしてから、ツリー文法をデバッグしようとしました。バージョン1.4.3と1.4.2はどちらも、このボックスに「警告:リモートパーサーで使用される文法が同じではありません」と表示されます。[OK]をクリックし、デバッガーで[ステップフォワード]を1回クリックすると、java.exe*32プロセスが終了します。最後のテストとして、antlr-3.3およびantlr-3.4の完全なjarを使用して、コマンドラインから手動でコンパイルしました。変更はありません。
パーサー:
ツリーの文法:
ネストされたセマンティック述語に関する特定の問題は見つかりませんでしたが、例も見つかりませんでした。このコードが失敗するのはなぜですか?ANTLRWorksデバッガーの問題に関するアイデアはありますか?
antlr - SQLクエリの挿入/更新/削除を解析するための文法を作成するANTLR
私はANTLR
文法を書くのが初めてです。私の要件は、挿入/更新/削除SQL
クエリを解析して、どのテーブルが更新/挿入/削除されているか、列とその値のリストなどの詳細を取得することです。はい、の優れたドキュメントがありますANTLR
が、誰かが私を助けることができればクエリ解析のための特定の文法なら、それは大きな助けになるでしょう。
escaping - ANTLR lexer 除外文字列
みんなへー
ドメイン固有言語の解析に使用されるレクサーを構築しようとしています。予約済みトークン (フラグメント RESERVED) とエスケープ文字のセットがあります。レクサーは、エスケープされていない予約済みトークンが表示されるたびに分割する必要があります。
簡単な例:
問題:
RESERVED に 1 文字のトークンしか含まれていない限り、これは正常に機能します。否定演算 ~ は、単一の文字に対してのみ機能します。
残念ながら、文字列トークンでも動作する必要があります。したがって、1 文字を超えるトークン (例の AND を参照)。そうする簡単な方法はありますか?これはさまざまな言語にコンパイルする必要があり、別のコピーを維持したくないため、Java または C コードをインライン化せずに問題を解決する必要があります。
誰かが私を助けてくれることを願っています
スクリプト全体からのサンプル入力
作成;false;false;1.key = bla; トリグ;true;false;(1.key1 ~ .*thisIsRegex || 2.oldKey1 €) && (1.bla=2.blub || 1.blub=bla);
レクサーの後、これは次のようになります。トークン区切りの空白は重要ではありません:|create|;|false|;|false|;|1.|key| = |ブラ|;| trig|;|true|;|false|;|(|1.|key1| ~| .*thisIsRegex| || |2.|oldKey1| €|)| && |(|1.|bla|=|2.|ブラブ| || |1.|ブラブ|=|ブラ|)|;|
スクリプト全体はhttp://pastebin.com/Cz520VW4にあります (このリンクは 1 か月で期限切れになることに注意してください)。現在、正規表現の部分はまだ機能しません。
可能だが恐ろしい解決策
考えられる解決策を見つけましたが、それは本当にハックであり、スクリプトがエラーを起こしやすくなります。だから私はもっときれいなものを見つけたいと思っています。
私が現在行っているのは、否定 (~RESERVED) を手で書いていることです。
実際のスクリプトには 5 つ以上の複数文字トークンがあり、後で 2 文字以上になる可能性があるため、この方法で問題を解決すると非常に複雑になります。
java - ANTLR で生成された Java クラスの (絶対) パスを削除します。
ANTLRWorks 1.4.3 を ANTLR 3.4 と共に使用して、文法ファイルから Java ベースのパーサーとレクサーを生成しています。生成されたファイルには次の.java
ような文字列が含まれています
この絶対パスは次のように使用されます。
- 文字列を返します (例:
getGrammarFileName()
lexer および parser のメソッド)。 - 両方のファイル全体で、コメントとして何度も。
次の欠点があります。
- 開発環境で別のパスを持つ他の誰かがこれらのファイルを再生成すると、文法ファイルに変更が加えられていなくても、多くの変更が導入されます。
- 誰も、特にオープン ソース プロジェクトでは、文法ファイルを正確にどこに保存しているかを知る必要はありません。たとえば、どうですか
C:\\Users\\simon\\customerA\\crap_software\\[rest of the path to grammar file]
ANTLRWorks または ANTLR s.th でこれを制御する方法はありますか。少なくとも相対パスのみが使用されますか?
antlr - ANTLRルールはそれ自体で機能しますが、別のルールに含まれていると失敗します
再解析されて再タグ付けされたkconfigファイル(いくつかのあいまいさを解決するために再タグ付けされた)のANTLR文法を書き込もうとしています。文法の簡略版は次のとおりです。
入力あり:
2行目だけを解析するようにantlrworksを設定すると(最初の行をコメントアウト)、次の適切な式で適切なdefConfigStatementトークンが発行されます。ただし、configOptionsルールまたはconfigStatementルール(最初の行はコメントなし)を実行すると、configOptionsの結果が空になり、NoViableAlt例外がスローされます。
この動作の原因は何ですか?defConfigStatementルールが正確で正しく解析できることは知っていますが、別のルールの潜在的なオプションとして追加されるとすぐに失敗します。競合するルールがないことはわかっています。DEF_BOOLルールとDEF_TRISTATEルールをレクサールールのリストの一番上にしたので、他のレクサールールよりも優先されます。
/編集後に追加/問題をさらに複雑にするために、configOptionsルールでdefConfigStatementの選択肢を移動すると、機能しますが、他のルールは失敗します。
編集:完全で単純化された文法を使用します。
要するに、ルールがそれ自体で機能するのに、configOptionsにある場合(特にconfigOptionsが(A | B | C)*形式であるため)失敗するのはなぜですか?
java - ANTLR 書き換えステートメントに関する問題 (簡単ですか?)
記憶が正しければMissingTokenException
、 、を取得し続けます。ANTLRWorks からのログファイル / コンソール出力は、私にとって十分に役に立ちません。NullPointerException
NoViableAlterativeException
私が求めているのは、次のような書き直しです。
以下は、テスト ファイルを作成するために取り出した文法のサンプルです。
私も試しました:
この:
数え切れないほどの他のバージョン (ハック) と同様に。
誰でもこれで私を助けることができますか?
antlrworks - Antlworks を使用した文法のデバッグ
私は最近 AntlrWorks を発見し、文法 (Xtext、Eclipse、および MWE で編集) をデバッグしようとしています。
javac パスとクラスパスを構成しましたが、antlrworks はまだ不平を言っています:
「シンボルが見つかりません: クラス DebugAbstractInternalAntlrParser」
誰かがすでにこの問題に直面していますか?
ありがとう