解析需要大量前瞻的案例

时间:2011-09-17 17:08:41

标签: parsing grammar lookahead

大多数解析只能通过查看下一个符号(词法分析的字符,正确解析的标记)来完成,大多数剩余的情况可以通过在此之后只查看一个符号来处理。

是否有任何实际案例 - 对于实际使用中的编程语言或数据格式 - 需要几个或无限多的前瞻符号(或等效回溯)?

2 个答案:

答案 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 ++语法含糊不清,依赖于上下文,可能需要无限的前瞻来解决一些含糊之处”。