0

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

 S -> a | aB

如果我对其执行左分解,它会像(e 是 epsilon)

 S -> aC
 C -> B | e 

然后我想删除 epsilon 最终就像

 S -> a | aC
 C -> B

请注意,我似乎再次需要执行左分解,并且无限地执行左分解并来回移除 epsilon。难道我做错了什么 ??

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

4

1 回答 1

0

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

于 2012-12-01T05:22:26.663 回答