左分解文法与去除epsilon之间的关系

问题描述 投票:0回答:2

假设我使用以下语法进行编译器

 S -> a | aB

如果我对其进行左因式分解,就会像(e 是 epsilon)

 S -> aC
 C -> B | e 

然后我想删除 epsilon ,结果就像

 S -> a | aC
 C -> B

请注意,看起来我再次需要执行左因式分解,并且这样做无限左因式分解并来回删除 epsilon。难道我做错了什么 ??

编译器语法上是否需要同时删除左因子分解和 epsilon?

grammar context-free-grammar
2个回答
0
投票

大多数时候,您不需要进行任何一种转换。事实上,对于某些语法,左因式分解会为 LALR(1) 解析器生成器产生移位归约冲突。


0
投票

我不认为你必须在左因式分解后写epsilon。

S -> aC
C -> B

在大多数情况下这将被认为是正确的。

© www.soinside.com 2019 - 2024. All rights reserved.