![]() |
1
2
通常您会使用例如a recursive descent parser 对于此任务,但可以使用regex获取所有部分(标记):
操作员通常有不同的
precedence
.先计算括号,然后
|
![]() |
2
1
假设没有嵌套,将其简化到可以使用regex的级别。匹配的regex(假设和/或仅此,可以轻松扩展):
现在您将括号部分作为3个字符串(操作数运算符操作数)的元组,其余字符串作为每个标记(操作数或操作数)的字符串。 您可以遍历列表,计算每个带括号的表达式,并将其替换为结果。完成后,您可以再次遍历它并从左到右或根据您设置的某些优先规则进行评估(例如,仅在用完和之后才继续评估和,然后开始评估或)。 |
![]() |
3
1
这个 Examples page 在pyparsing wiki上包含一个示例simplebool.py,用于分析和计算表达式,如:
(嗯,没有嵌套parens的例子,但是这些 是 也支持。 实际的解析器是使用以下代码整体定义的:
示例的其余部分给出了boolnot、boolor和booland的实现。operatorPrecedence构造定义了操作序列、它们的arity和关联性,还可以选择用解析的元素构造一个类。然后,operatorPrecedence负责定义语法,包括在嵌套括号内递归定义boolexpr。生成的结构类似于使用给定boolxxx类的嵌套AST。这些类依次定义
pyparsing本身是一个有点长的模块,但它是一个单一的源文件,因此它的安装占用空间非常小。麻省理工学院许可证允许非商业和商业使用。 |
![]() |
July · 如何定义数字间隔,然后四舍五入 1 年前 |
![]() |
user026 · 如何根据特定窗口的平均值(行数)创建新列? 1 年前 |
|
Ashok Shrestha · 需要追踪特定的颜色线并获取坐标 1 年前 |
![]() |
Nicote Ool · 在FastApi和Vue3中获得422 1 年前 |
|
Abdulaziz · 如何对集合内的列表进行排序[重复] 1 年前 |
![]() |
asmgx · 为什么合并数据帧不能按照python中的预期方式工作 1 年前 |