[也张贴在Instaparse 邮件列表上,但也张贴在这里,因为我猜这是一个相当普遍的问题]
考虑语法
D = (B|S)*
S = 'S' B*
B = 'B'
(这是Instaparse的 BNF 版本...)
B 可以单独出现,也可以在 S 之后出现;如果是后者,则应将其视为 er, S 表达式的一部分(不是双关语)。
例子:
(-> "D = (B|S)*
S = 'S' B*
B = 'B'"
parser
(parses "BSBB"))
;;=>
([:D [:B "B"] [:S "S"] [:B "B"] [:B "B"]]
[:D [:B "B"] [:S "S" [:B "B"] [:B "B"]]] ;; <------
[:D [:B "B"] [:S "S" [:B "B"]] [:B "B"]])
我只希望匹配第二个结果 - 以便在可能的情况下将 B 包含在 S 中,并删除其他选项。需要对我的解析器做什么才能进行此更改?
此要点中显示的更多示例表达式。