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

铁路图(铁路图)是一种用于描述形式文法的可视化工具,由一系列图形组成,包括圆框表示字面量和方块表示规则或描述。本文介绍了铁路图的基本规则和语法图的概念,以算术表达式为例展示了如何将BNF语法转化为铁路图,并讨论了铁路图相较于文字式表示法的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

铁路图(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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值