English 中文(简体)
Pascal风格的铁路图表
原标题:
  • 时间:2008-11-21 19:04:41
  •  标签:

Where can I find pascal-style railroad diagrams to describe C++ syntax? (As an alternative to EBNF)

问题回答

据我所知,目前没有任何一种方法能够以适当的EBNF表示C++语法 - 它是上下文敏感的语法,任何试图解析它的东西都必须能够处理C++代码,至少能处理到模板实例化和重载解析(更不用说宏了)。

没有一个 - C++语法不仅不是上下文无关的,而且是无法判定的。请参见http://yosefk.com/c++fqa/defective.html#defect-2和相关链接进行更深入的讨论。

我不知道C++图表是否有铁路图表(我并不太重视这些图像),但将EBNF转换为这些图表是纯机械化的工作。

关于C++的语法:如果你看一下C++标准附录中的语法,那是一个无上下文限制语法。这个语法的问题在于它是一个有歧义的语法。另一个问题是,这个语法接受一些不合法的C++程序的字符串,但这也适用于每一种带有变量声明的类型语言。如果这个语法是不可判定的,就意味着你无法确定一个字符串是按照语法生成的还是不是。顺便说一下,给定一个C++文件是否能编译,这实际上是一个不可判定的问题,因为模板是图灵完备的。

这种模棱两可的语法之所以不被看好,是因为它使解析器变得更加复杂,更慢或需要更多的内存。





相关问题
热门标签