首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阿佩乔接球后不能再回去

阿佩乔接球后不能再回去
EN

Stack Overflow用户
提问于 2020-10-10 18:26:03
回答 1查看 36关注 0票数 1

这里有一个简单的代码需要理解:

代码语言:javascript
复制
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没有这种能力。我得到了arpeggio.NoMatch: Expected EOF at position (3, 1) => ' A *B '.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-11 09:34:35

Arpeggio是建立在钉住形式主义的基础上的,它从不回溯成功的有序选择匹配。

维基百科PEG文章的引文如下:

上下文无关文法和解析表达式语法之间的根本区别在于,PEG的选择操作符是有序的。如果第一种选择成功,则第二种选择将被忽略。

因此,在有序选择RHS规则引用时,您必须小心。大拇指的规则是在前面放更多的特定的火柴。在您的例子中,line line更具体,应该先尝试。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64296835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档