私は文法がLL(1)だとは思わない以外に、それを構文解析するために必要なパーザのタイプを知らないという文法を持っています。私は、ある種のバックトラックやLL(*)を持つパーサーが必要だと思っています。私は(いくつかの書き換えを必要とする場合もある)を思い付いている文法は次のとおりです。左が含まれているこの文法にはどのようなパーサーが必要ですか?
abc = def g hi jk lm
xy = aaa bbb ccc ddd eee fff jjj kkk
foo = bar ha ha
ゼロ以上のルール:
S: Rules
Rules: Rule | Rule Rules
Rule: id '=' Ids
Ids: id | Ids id
私は生成しようとしている言語は次のようになります識別子の後ろに等号とそれに続く1つ以上の識別子が続きます。パーサーを書くのに問題があると思う部分は、文法ではルール内のidの量は任意で、新しいルールがいつ始まるかを知る唯一の方法は、id =が見つかったときにバックトラッキングが必要なことです。
誰もこの文法とパースの最良の方法の分類を知っていますか手はパーサーで書かれていますか?
最後のルールでは、RHSの 'Ids'の前後に余分な 'id'を含める必要はありませんか? –