使用 pyparsing 的递归表达式
我试图弄清楚如何执行左关联表达式,其中递归(不包含在任何内容中)表达式是可能的。例如,我想做:
expr + OP + expr
将 1 x 2 x 3
等 2 个操作解析为 (expr OP expr) OP expr
结果。
如果我尝试阻止无限递归解析expr,我可以执行以下操作:
expr -> Group(simple_expr + OP + expr)
| simple_expr
但随后我会得到expr OP(expr OR expr)结果。
如何强制左侧装订?
编辑:我知道 operatorPrecedence
但当运算符为 "IS" +Optional("NOT")
或类似操作符时,它似乎无法正确匹配。
I'm trying to figure out how to do a left-associative expression where recursive (not-enclosed in anything) expressions are possible. For example, I'd like to do:
expr + OP + expr
that parses 2 operations like 1 x 2 x 3
into (expr OP expr) OP expr
result.
If I try to prevent expr
parsing from infinite recursion, i can do something like:
expr -> Group(simple_expr + OP + expr)
| simple_expr
but then I'd get the expr OP (expr OR expr)
result.
How do I force left-side binding?
Edit: I know about the operatorPrecedence
but when the operator is "IS" + Optional("NOT")
or similar, it doesn't seem to match properly.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
下面是一个示例解析操作,它将采用令牌的平面列表并将它们嵌套起来,就像左递归解析一样:
打印:(
正常)
(类似 LR)
Here is an example parse action that will take the flat lists of tokens and nest them as if parsed left-recursively:
Prints:
(normal)
(LR-like)
Pyparsing 生成左解析树。添加语义操作以在解析
expr
后立即编辑解析树。Pyparsing produces left parse trees. Add a semantic action to edit the parse tree right after
expr
has been parsed.