现在的位置: 首页 > 综合 > 正文

利用EBNF生成Syntax/Railroad Diagram

2014年01月02日 ⁄ 综合 ⁄ 共 978字 ⁄ 字号 评论关闭

有一个在线生成工具:http://railroad.my28msec.com/rr/ui

示例1:

来自Stack Overflow

object ::= '{' ((string ':' value ) ( ',' string ':' value )*)? '}'

示例2:

包含+, -, *,括号的算术表达式描述(EBNF)

exp     ::= term (addop term)*
term    ::= factor ('*' factor)*
addop   ::= '+'
         |'-'
factor  ::= '(' exp ')'
          |  [0-9]+

得到的Syntax/Railroad Diagram

exp:

exp ::=
term
( addopterm )*

referenced by:factor

term:

term ::=
factor
( '*'
factor
)*

referenced by:exp

addop:

addop ::= '+' | '-'
referenced by:exp
factor:
factor ::= '('exp ')' | [0-9]+
referenced by:term

示例3

stmt-seq      ::= stmt (';'stmt)*
stmt          ::= if-stmt 
  		| repeat-stmt
  		| assign-stmt
  		| read-stmt
  		| write-stmt

if-stmt        ::= 'if' exp 'then' stmt-seq ('else' stmt-seq)? 'end'
repeat-stmt    ::= 'repeat' stmt-seq 'util' exp
assign-stmt    ::= id ':=' exp
read-stmt      ::= 'read'id
write-stmt     ::= 'write' exp

exp           ::= simple-exp (('<'|'=') simple-exp)?
simple-exp     ::= term (('+'|'-') term)*
term          ::= factor(('*'|'/')factor)*
factor         ::= '('exp')' | num | id

num          ::=([1-9])+([0-9])*
id            ::=([a-zA-Z])+
更多示例
【上篇】
【下篇】

抱歉!评论已关闭.