大多数解析只能通过查看下一个符号(词法分析的字符,正确解析的标记)来完成,大多数剩余的情况可以通过在此之后只查看一个符号来处理。
是否有任何实际案例 - 对于实际使用中的编程语言或数据格式 - 需要几个或无限多的前瞻符号(或等效回溯)?
答案 0 :(得分:2)
Knuth证明任何LR(k)语法都可以机械地转换为LR(1)语法。此外,AFAIK,任何LR(k)语法都可以及时解析,与解析后的字符串的长度成比例。因为它包括LR(1),我没有看到用k实现LR(k)解析会有什么用途。 1。
我从未研究过LR(k) - > LR(1)转换,因此有可能在某些情况下不实用。
答案 1 :(得分:2)
我记得,Fortran是一种需要大量前瞻缓冲区的语言。解析Fortran需要(理论上)无限前瞻,尽管大多数实现限制了语句行的长度,这限制了先行缓冲区的大小。
另请参阅Why can't C++ be parsed with a LR(1) parser?的所选答案。特别是,引用:
“C ++语法含糊不清,依赖于上下文,可能需要无限的前瞻来解决一些含糊之处”。