在哪里可以找到pascal风格的铁路图来描述C ++语法? (作为EBNF的替代方案)
答案 0 :(得分:1)
据我所知,根本没有。 C ++语法甚至不能用正确的EBNF表示 - 它是一个上下文敏感的语法,任何试图解析它的东西都必须能够处理C ++代码,至少就模板实例化和重载决策而言(更不用说宏了) )。
答案 1 :(得分:1)
我不知道C ++图是否有一些铁路图(我不太重视这些图像)但是将EBNF转换为这些图是一种纯粹的机械工作。
关于C ++的语法:如果你看一下C ++标准附录中的语法,那就是无上下文语法。这个语法的问题在于它是一个含糊不清的语法。另一件事是,语法接受的字符串不是有效的C ++程序 - 但对于每个带有变量声明的类型语言都是如此。如果gramar是不可判定的,那么就意味着如果它是根据语法生成的话,你就无法告诉它一些字符串。顺便说一下,给定C ++文件编译确实是不可判定的问题,因为模板是Turing-complete。
这种模棱两可的语法之所以令人不悦,是因为它使解析器更复杂,更慢和/或需要更多内存。
答案 2 :(得分:0)
没有一个--C ++语法不仅不无上下文,它是不可判定的。有关更深入的讨论,请参阅 http://yosefk.com/c++fqa/defective.html#defect-2及相关链接。