我对维基百科的以下引用感到困惑:
换句话说,如果一种语言足够合理以允许高效的一次性解析器,那么它可以用 LR(k) 文法来描述。并且该语法总是可以机械地转换为等效(但更大)的 LR(1) 语法。因此,理论上,LR(1) 解析方法足够强大,可以处理任何合理的语言。在实践中,许多编程语言的自然语法接近于 LR(1)。[需要引用]
这意味着解析器生成器,如bison
,非常强大(因为它可以处理LR(k)
语法),如果能够将LR(k)
语法转换为LR(1)
语法。是否存在一些这样的例子,或者如何做到这一点的秘诀?我想知道这一点,因为我的语法中有移位/减少冲突,但我认为这是因为它是一种LR(2)
语法并且想将其转换为LR(1)
语法。附带问题:是C++
一种不合理的语言,因为我读过,生成的bison
解析器无法解析它。