1

次の文法の LALR(1) パーサーを作成しようとしていて、シフト/リデュースの競合を見つけようとしています。

S := expr
expr := lval | ID '[' expr ']' OF expr
lval := ID | lval '[' expr ']'

紛争

そのため、パーサーは文字列 "ID[ID]" を正しく解析できません。私の質問は、

  1. そのような非 LALR(1) 文法を LALR(1) 文法に変換する一般的な方法はありますか?
  2. 2 つの文法がまったく同じ言語を生成し、一方が LALR(1) ではないことがわかっている場合、もう一方が LALR(1) であるかどうかを知ることができますか?

上記の文法は一例に過ぎません。私が本当に知りたいのは、これらの文法の問題を解決する一般的な方法です。提案や読書の推奨事項は大歓迎です。

前もって感謝します。

4

1 に答える 1