gpt4 book ai didi

python - 使用二元和一元运算符、保留字且不带括号解析表达式

转载 作者:行者123 更新时间:2023-12-03 16:20:38 27 4
gpt4 key购买 nike

我正在尝试解析由二元运算符 + 组成的表达式,一元运算符 not和标识符可以是任何不是 not 的字母字符串

from pyparsing import (
CaselessKeyword,
Combine,
Word,
alphas,
opAssoc,
infixNotation,
)

identifier = Combine(~CaselessKeyword('not') + Word(alphas))
expression = infixNotation(identifier, [
('+', 2, opAssoc.LEFT),
(CaselessKeyword('not'), 1, opAssoc.RIGHT),
]
运行
expression.parseString('a + (not b)')
给出了我的期望
[['a', '+', ['not', 'b']]]
但是,没有括号
expression.parseString('a + not b')
我只得到第一个 token :
['a']
我如何定义语言以在没有括号的情况下按照我的意愿工作?
(在实际情况中,有更多的运算符和保留字:这是解析 S3 Select 语言的一步)

最佳答案

在 S3 NOT更高 那个AND :

Operator PrecedenceThe following table shows the operators' precedence in decreasing order.


(来自 S3 amazon site)。
在那个表中 NOT以上 AND .
所以你的代码应该是:
identifier = Combine(~CaselessKeyword('not') + Word(alphas))
expression = infixNotation(identifier, [
(CaselessKeyword('not'), 1, opAssoc.RIGHT),
('+', 2, opAssoc.LEFT),
])
顺便说一句 - 如果“ NOT 被列为低于二进制 + ”,则低于 a + not b不是有效的表达。 +需要两个运算符:一个是 a ,但是 not b不是有效的操作数。
BTW2(来自评论):
请不要混用 +这是一个算术运算符和 NOT这是同一表达式中的逻辑运算符。 1 + not 2不是有效的表达式。
每种语言都决定如何解析这种奇怪的表达式。

关于python - 使用二元和一元运算符、保留字且不带括号解析表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63551692/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com