您拥有的BNF语法是这样的:
expr ::= A | BA ::= "a" B | "a"B ::= "b" A | "b"
我认为可以使用您的语法将此翻译为:
"expr": Or(Ref("A"), Ref("B")),"A": And( a, Optional(Ref("B"))),"B": And( b, Optional(Ref("A")))请注意,在非端子()之前检查端子(
"a",
"b")很重要
Ref(x),否则会出现无限循环。它将始终尝试查看它是否可以匹配另一个字符串
A或
B该字符串的末尾,然后匹配另一个字符串,从而导致永无止境的递归。



