Исключение левой рекурсии для E: = EE + | EE- | id - PullRequest
3 голосов
/ 25 октября 2009

Как исключить левую рекурсию для следующей грамматики?

E := EE+|EE-|id

Используя общую процедуру:

A := Aa|b

переводится как:

A := b|A'
A' := ϵ| Aa 

Применяя это к исходной грамматике, мы получаем:

A = E, a = (E+|E-) and b = id

Таким образом:

E := id|E'
E' := ϵ|E(E+|E-)

Но эта грамматика кажется неправильной, потому что

ϵE+ -> ϵ id +

будет действительным но это неверное постфиксное выражение.

1 Ответ

10 голосов
/ 25 октября 2009

Ваша «общая процедура» цитируется неправильно. Взяв его из Книги Дракона:

A := Aα | β

становится

A  := βA′
A′ := αA′ | ϵ

… что дает:

E  := id E′
E′ := (E + | E -) E′ | ϵ
...