如何解决捕获后琶音不能回去
这是一个易于理解的代码:
def line(): return _(r".+")
def start(): return [line,(line,line)],EOF
parser = ParserPython(start,debug=True)
input_expr = """
A
B
"""
parse_tree = parser.parse(input_expr)
在这里,在规则start
中,它应首先尝试捕获一行,如果它不起作用,则尝试捕获两行。但是看起来琶音没有这种能力。然后我得到arpeggio.NoMatch: Expected EOF at position (3,1) => ' A *B '.
解决方法
琶音基于PEG形式主义,并且从不回退成功的有序选择匹配。
引自维基百科PEG文章:
上下文无关文法与解析表达文法之间的根本区别在于PEG的选择运算符是有序的。如果第一个选择成功,则第二个选择将被忽略。
因此,在按顺序选择中订购RHS规则参考时,必须要小心。经验法则是将更具体的匹配放在前面。对于您而言,line line
更具体,应首先尝试。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。