The*_*One 3 compiler-construction grammar parsing lexical-analysis context-free-grammar
如何消除以下语法的左递归?
E := EE+|EE-|id
Run Code Online (Sandbox Code Playgroud)
使用常用程序:
A := Aa|b
Run Code Online (Sandbox Code Playgroud)
翻译为:
A := b|A'
A' := ?| Aa
Run Code Online (Sandbox Code Playgroud)
将其应用于原始语法我们得到:
A = E, a = (E+|E-) and b = id
Run Code Online (Sandbox Code Playgroud)
因此:
E := id|E'
E' := ?|E(E+|E-)
Run Code Online (Sandbox Code Playgroud)
但这个语法似乎不正确,因为
?E+ -> ? id +
Run Code Online (Sandbox Code Playgroud)
将是有效的,但这是一个不正确的后缀表达式.
Kon*_*lph 10
你的"共同程序"被引错了.从龙书中取出:
A := A? | ?
Run Code Online (Sandbox Code Playgroud)
变
A := ?A?
A? := ?A? | ?
Run Code Online (Sandbox Code Playgroud)
...产生:
E := id E?
E? := (E + | E -) E? | ?
Run Code Online (Sandbox Code Playgroud)