-2

私は Bison で、とりわけ次の構造を持つ言語用のパーサーを作成しています。

  • 自己発送: [ identifier arguments]
  • 発送:【送料無料expressionidentifier arguments]
  • 文字列のスライス: expression[ expression, expression] - Python に似ています。

argumentsカンマで区切られた式のリストで、空にすることもできます。上記のすべては、それ自体でも式です。私の問題は、両方を解析する方法がわからないこと[method [other_method]][someString[idx1, idx2].toInt]、LALR(1) パーサーでこれを行うことができるかどうかです。

より正確には、次の例を見てみましょう: ( methodの結果で method を[a[b]]呼び出します)。状態になると。(先読みは 2 番目の です)、次のようなものが続く可能性があるため(これは既に に縮小されています) に縮小するか (それ自体が に縮小され、上から 2 番目の構造を継続する可能性があります)、それを保持するかはわかりません。(そしてそれをシフトします)のリストが続くからです(この場合のように)。ab[a[b]][aidentifierexpressiona[b,c]expressionidentifierarguments[b]

このシフト/リデュースの競合は、私がこの文法を表現した方法によるものですか、それとも LALR(1) パーサーでこれらの構造のすべてを解析することはできませんか?

そして、より一般的な質問として、言語が特定のタイプのパーサーによって解析可能である/不可能であることをどのように証明できますか?

4

1 に答える 1