语言的LR(1)自动机比对应的LR(0)自动机大多少?
在LR(0)解析器中,每个状态都包含LR(0)项的集合,这些项是用位置注释的生成。在LR(1)解析器中,每个状态都由LR(1)项的集合组成,这些项是用位置和超前字符注释的生成。 已知给定LR(1)自动机中的状态,通过从每个LR(1)项中删除前瞻标记形成的配置集会产生与LR(0)自动机中某个状态相对应的配置集。从这个意义上讲,LR(1)自动机和LR(0)自动机之间的主要区别在于LR(1)自动机在LR(0)自动机中具有更多状态副本,每个状态副本都带有前瞻性注释。信息。因此,给定CFG的LR(1)自动机通常大于该CFG的对应LR(0)解析器。 我的问题是LR(1)自动机可以有多大。如果语法字母中有不同的终端符号,则原则上我们可能需要对这不同的终端符号的每个子集至少复制一次LR(0)自动状态中的每个状态,从而可能导致LR(1 )自动机,比原始LR(0)自动机大倍。假设LR(0)自动机中的每个单独项目都由一组不同的LR(0)项目组成,我们可能会得到更大的爆炸。n 2 nnnnnnn2n2n2^n 就是说,我似乎找不到一种方法来构造其LR(1)自动机明显大于相应的LR(0)自动机的语法家族。我尝试过的所有操作都导致大小的适度增加(通常为2-4倍左右),但我似乎找不到能够导致大爆炸的模式。 是否存在已知的上下文无关语法族,它们的LR(1)自动机比对应的LR(0)自动机大几倍?还是众所周知,在最坏的情况下,您实际上无法得到指数级的爆炸? 谢谢!