有一个在线生成工具: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:
referenced by:factor
term:
term ::=
factor ( '*'
factor )*
referenced by:exp
addop:
addop ::= '+' | '-'
referenced by:exp
factor:
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])+
更多示例