A rule is a name, an equals sign and a definition, ending with a semicolon. terminal is a literal, nonterminal is another rule.
railroad-beta
rule = sequence(terminal("a"), nonterminal("other")) ;
other = terminal("b") ;choice takes the alternatives in brackets. The rule cannot be called choice itself — that name is taken.
railroad-beta
alt = choice(terminal("a"), terminal("b")) ;optional wraps a part that may be left out.
railroad-beta
rule = sequence(optional(nonterminal("tail")), terminal("head")) ;
tail = terminal("t") ;oneOrMore needs at least one, zeroOrMore needs none. Both wrap the part they repeat.
railroad-beta
digits = oneOrMore(terminal("0")) ;
words = zeroOrMore(terminal("x")) ;