0

我正在阅读本书中有关 LR(0) 解析器的内容:Java 中的现代编译器实现。下面是基于这本书的解析表的样子。 http://postimg.org/image/hyowddu1h/

开始符号:S --> E$

制作:

(1) E --> T + E

(2) E --> T

(3) T --> x

我尝试根据给出的产品制作解析表,但我没有得到与书中相同的解析表。我想我正确地移动了符号。只是我的解析表与书中的解析表不同。(注意:我从状态 0 开始,而不是书中的状态 1)

那么解析表是唯一的,还是有什么经验法则可以决定首先将哪个符号转移到堆栈或如何正确标记解析状态?我总是先移动终端符号,然后移动非终端符号,如下所示: http: //postimg.org/image/76vbu2vu3/

提前致谢!

4

1 回答 1

0

州号并不那么重要。事实上,它们根本不重要。重要的是国家身份;您如何标记州以表明身份取决于您。您可以使用名称,例如飓风和龙卷风。

如果您可以在两个状态集之间构建一对一的映射,那么两台机器是相同的,这样所有标记的转换都保留了该映射。我很确定您可以在教科书中的状态机和您构建的机器之间构建这种映射。

于 2015-04-14T01:48:20.407 回答