规则是名字、等号和定义,以分号结尾。terminal 是字面量,nonterminal 则是另一条规则。
railroad-beta
rule = sequence(terminal("a"), nonterminal("other")) ;
other = terminal("b") ;choice 把候选放在方括号里。规则本身不能叫 choice——这个名字被占用了。
railroad-beta
alt = choice(terminal("a"), terminal("b")) ;optional 把一段可以省掉的内容包起来。
railroad-beta
rule = sequence(optional(nonterminal("tail")), terminal("head")) ;
tail = terminal("t") ;oneOrMore 至少要有一个,zeroOrMore 一个也可以没有。两者都把要重复的那部分包起来。
railroad-beta
digits = oneOrMore(terminal("0")) ;
words = zeroOrMore(terminal("x")) ;