天天看点

语法图(Syntax diagram)、铁路图(railroad diagrams)

铁路图(railroad diagram)规则:

[list]

[*]1.从左边界开始沿着轨道去到右边界。

[*]2.沿途,你将在圆框中遇到的是字面量,在方块中遇到的是规则或者描述。

[*]3.任何沿着轨道能走通的序列都是合法的。

[*]4.任何不能沿着轨道走通的序列都是非法的。

[*]5.每个末端只有一个竖条的铁路图允许在任何一对标记中间插入空白。而在末端有两个竖条的铁路图是不允许的。

[/list]

语法图(Syntax diagrams )又叫铁路图(railroad diagrams)是描述形式文法的一种方式。它是巴科斯范式或扩展巴科斯范式的图形化表示。最早使用语法图的书包括Niklaus Wirth写的“Pascal User Manual”(语法图开始于47页)和the Burroughs CANDE manual。在编译领域,像BNF和它的变体这样的文字式表示法都是首选的。BNF能很好的被编译器作者和编译器理解,但是不能很好的被这些语言的大部分用户理解。铁路图能更容易被大多数人理解。数据交换格式JSON之所以流行的部分原因就是它用铁路图来表示。

[b]准则[/b]

一个语法的表示法是由一套语法图组成。每个图定义了一个非终结符。有一个主图通过下面方式定义了这门语言:属于这门语言的每句话都必须在主图上描绘一个路径。

每个图都有一个起始点和一个终点。这个图通过穿过其他的非终结符和终结符描绘了这些两点之间的可能路径。终结符用圆形区域表示,同时非终结符用方形区域表示。

[b]例子[/b]

我们用一个算术表达式作为一个例子。首先我们提供一段简单的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";
           

关于这段语法的一组可能的语法图:[img]http://dl.iteye.com/upload/attachment/570104/1395365f-86d8-3a35-92e2-0b20d5d8d9f0.png[/img]