语法图
语法图(Syntax diagrams )又叫铁路图(railroad diagrams)是描述形式文法的一种方式。它是巴科斯范式或扩展巴科斯范式的图形化表示。最早使用语法图的书包括Niklaus Wirth写的“Pascal User Manual”(语法图开始于47页)和the Burroughs CANDE manual。在编译领域,像BNF和它的变体这样的文字式表示法都是首选的。BNF能很好的被编译器作者和编译器理解,但是不能很好的被这些语言的大部分用户理解。铁路图能更容易被大多数人理解。数据交换格式JSON之所以流行的部分原因就是它用铁路图来表示。
准则
一个语法的表示法是由一套语法图组成。每个图定义了一个非终结符。有一个主图通过下面方式定义了这门语言:属于这门语言的每句话都必须在主图上描绘一个路径。
每个图都有一个起始点和一个终点。这个图通过穿过其他的非终结符和终结符描绘了这些两点之间的可能路径。终结符用圆形区域表示,同时非终结符用方形区域表示。
例子
我们用一个算术表达式作为一个例子。首先我们提供一段简单的BNF语法:
<expression>::= <term> | <term> "+" <expression>
<term>::= <factor> | <factor> "*" <term>
<factor>::= <constant> | <variable> | "(" <expression> ")"
<variable>::= "x" | "y" | "z"
<constant>::= <digit> | <digit> <constant>
<digit>::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
这段语法也能在EBNF中被表示:
expression = term , {"+" term};
term = factor , {"*" factor};
factor = constant | variable | "(" , expression , ")";
variable = "x" | "y" | "z";
constant = digit , {digit};
digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9";
关于这段语法的一组可能的语法图:
扩展链接
- 巴科斯范式和扩展巴科斯范式
- JSON website including syntax diagrams
- Automatic generator of syntax diagrams
- Syntax diagrams of BNF
- Generator from EBNF
- From EBNF to a postscript file wit the diagrams

RailRoad展示线性的语法不错,不过我还是觉得有点限制,就是在展示树形结构信息的时候,如XML这类标记语言。不过如果真要一次性展示XML语法,那真得很大一张树。语法要比编程语言复杂很多。
秦歌,以前在工作室的,现在有几个人是从事前端开发方面的工作的啊。
关于前端方面的以后还要向你多多请教。呵呵
我是 l-u-o k-a-i w-u
我所知道的,以前端为主的可能就是我了,另外柠檬,6z,九条他们是前后端都搞吧。
我下周可能去上海的篱笆网做专职的前端。以前的后端dotnet开始不搞了。
到时多多向你请教一些问题 :)
呵呵,我现在就在杭州出差一段时间了呢,没事多交流啊。