利用EBNF生成Syntax/Railroad Diagram

来源:互联网 发布:blending 算法 编辑:程序博客网 时间:2024/05/18 02:14
有一个在线生成工具: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-stmtif-stmt        ::= 'if' exp 'then' stmt-seq ('else' stmt-seq)? 'end'repeat-stmt    ::= 'repeat' stmt-seq 'util' expassign-stmt    ::= id ':=' expread-stmt      ::= 'read'idwrite-stmt     ::= 'write' expexp           ::= simple-exp (('<'|'=') simple-exp)?simple-exp     ::= term (('+'|'-') term)*term          ::= factor(('*'|'/')factor)*factor         ::= '('exp')' | num | idnum          ::=([1-9])+([0-9])*id            ::=([a-zA-Z])+



更多示例
http://download.csdn.net/detail/taotaoyouarebaby/5222326 描述C-
http://download.csdn.net/detail/taotaoyouarebaby/5222098 描述 TINY