問題タブ [ambiguous-grammar]

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 に答える
356 参照

parsing - Sablecc を使用して競合をシフト/削減する

Sablecc を使用して、MiniPython 用の .grammar ファイルを作成することになっています。これらのシフト/削減の競合が発生しています:

トークンの一部は次のとおりです。

私の .grammar ファイルの一部は次のとおりです。

これは、左再帰を排除しようとした後の文法です。assertプロダクションからルールを削除するsomethingと、競合が発生しないことに気付きました。また、およびルール{empty}からルールを削除しても競合は発生しませんが、これはこれを解決する正しい方法ではないと思います。exprsntpwrmltp

ヒントをいただければ幸いです。

更新: 要求に応じて、左再帰を削除する前の文法全体を次に示します。

shift/reduce 競合は次のようになります。

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

scala - キーワードと識別子の競合書き込みレクサー? (スカラライブラリ)

fastparse、parboiled2、scala-combinators を試しました。LEXERを定義するとき、それらはすべてこの問題を抱えています:

入力に対してそれらを実行すると"leto"、生成され[LET_KEYWORD,IDENTIFIER(o)]ます。

これらのライブラリのいくつかは、次のような動作をすることを期待しています:

入力が の場合"let"、最初に定義されたルールがより関連性が高いため、それを選択することであいまいさを解決します。入力が"leto"存在する場合、あいまいさはなく、 のみが生成されIDENTIFIER(leto)ます。それはここで説明されている動作です、ANTLR

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

automata - s-grammar (単純な文法) を見つける

次の言語の簡単な文法 (別名 S 文法) を見つけてください。

L={(ab) 2m b :m>=0}

【やったけどダメだった】

S-> aASBB|b

A->

B->b