Как мне оставить фактор и устранить левую рекурсию? - PullRequest
0 голосов
/ 14 января 2019

Мои правила производства следующие:

S → id = Exp
S → id (Arglist)
Arglist → Arglist , Exp
Arglist → Exp
Exp → id (Arglist)
Exp → id

Это моя первая попытка:

S -> id S'
S' -> ϵ | = EXP | (Arglist)
Arglist -> Arglist'
Arglist' -> ϵ | ,Exp Arglist'
Exp -> id Exp'
Exp' -> ϵ | (Arglist)

Моя проблема с правилом производства Arglist, я ошибаюсь.

1 Ответ

0 голосов
/ 14 января 2019

Вам просто нужно изменить Arglist на праворекурсивный, который распознает тот же язык (с немного другим деревом разбора):

Arglist → Exp , Arglist
Arglist → Exp

Тогда левый множитель:

Arglist → Exp Arglist'
Arglist' → ε | , Exp Arglist'
...