从语法中删除epsilon-production

时间:2015-02-03 22:19:26

标签: compiler-construction context-free-grammar formal-languages

我想知道如何消除语法中的epsilon-productions:

 S → S0 
 S → 1
 S → AB
 B → AC
 A → ε
 C → ε

我知道因为C → εA → ε我们必须重写: B → AC as:

 B → A | C | AC

S → AB

S → A | B | AB

但是生产A → εC → ε似乎消除了状态A,B和C,只留下了作品:

 S → S0 | 0
 S → 1

我说错了吗?

1 个答案:

答案 0 :(得分:0)

是。你是对的。

这就是我得到的:

S → S0 
S → 1
S → AB
B → AC
A → ε
C → ε

删除A,B,C后,因为它们全部转到epi。

S → S0 
S → 1
S → ε

去除S→ε意味着重写S→S0以包括所有可能的结果,即S0 |离开:

S → S0 | 0
S → 1