如何将因子留给无上下文语法?

时间:2012-03-02 20:46:01

标签: compiler-construction grammar ll

据我所知,在下面的例子中,需要留下因子来构建自上而下的解析器。 但很难理解如何做到这一点?有人可以帮我吗?感谢。

s = a | b
b = c d
c = (e | f) g
e = a | h

1 个答案:

答案 0 :(得分:6)

每个非终端只在这里引用一次,所以我们可以将整个语法整合在一个表达式中:

s = a | ((a | h | f) g d)

所以我们有两个基本的变化,终端a可选地后跟g然后d,或者h或f中的一个总是后跟g然后d。

所以我们有

s =  b' | c'
b' = a | a g d
c' = (h | f) g d

或者,将常见的g d序列拉入自己的生产

s =  b' | c'
b' = a | a e'
c' = (h | f) e'
e' = g d

然后,我们可以通过引入E(空)选项将其作为b'中的常用起始符号:

s =  b'' | c'
b'' = a (e' | E)
c' = (h | f) e'
e' = g d

语法现在是明确的。