Where can I find pascal-style railroad diagrams to describe C++ syntax? (As an alternative to EBNF)
Pascal风格的铁路图表
原标题:
问题回答
据我所知,目前没有任何一种方法能够以适当的EBNF表示C++语法 - 它是上下文敏感的语法,任何试图解析它的东西都必须能够处理C++代码,至少能处理到模板实例化和重载解析(更不用说宏了)。
没有一个 - C++语法不仅不是上下文无关的,而且是无法判定的。请参见http://yosefk.com/c++fqa/defective.html#defect-2和相关链接进行更深入的讨论。
我不知道C++图表是否有铁路图表(我并不太重视这些图像),但将EBNF转换为这些图表是纯机械化的工作。
关于C++的语法:如果你看一下C++标准附录中的语法,那是一个无上下文限制语法。这个语法的问题在于它是一个有歧义的语法。另一个问题是,这个语法接受一些不合法的C++程序的字符串,但这也适用于每一种带有变量声明的类型语言。如果这个语法是不可判定的,就意味着你无法确定一个字符串是按照语法生成的还是不是。顺便说一下,给定一个C++文件是否能编译,这实际上是一个不可判定的问题,因为模板是图灵完备的。
这种模棱两可的语法之所以不被看好,是因为它使解析器变得更加复杂,更慢或需要更多的内存。
相关问题
热门标签
- winforms
- combobox
- fogbugz
- java
- date
- internationalization
- asp.net
- iis
- url-rewriting
- urlrewriter
- c#
- enums
- ocaml
- haxe
- algorithm
- string
- viewstate
- .net
- c++
- c
- symbol-table
- mysql
- database
- postgresql
- licensing
- migration
- vb.net
- vb6
- declaration
- vb6-migration
- python
- psycopg2
- backup
- vmware
- virtualization
- gnu-screen
- authentication
- desktop
- excel
- xll
- cultureinfo
- regioninfo
- oracle
- client
- session
- download
- html
- virtual
- constructor
- scenarios
- perl
- full-text-search
- javascript
- ajax
- testing
- oop
- inheritance
- vim
- encapsulation
- information-hiding