使用 pyparsing 的递归表达式

2023-11-26

我试图弄清楚如何执行左关联表达式,其中递归(不包含在任何内容中)表达式是可能的。例如,我想做:

expr + OP + expr

解析 2 个操作,例如1 x 2 x 3 into (expr OP expr) OP expr result.

如果我试图阻止expr从无限递归解析,我可以这样做:

expr -> Group(simple_expr + OP + expr)
      | simple_expr

但然后我会得到expr OP (expr OR expr) result.

如何强制左侧装订?

编辑:我知道operatorPrecedence但当操作员是"IS" + Optional("NOT")或类似的,它似乎不正确匹配。


下面是一个示例解析操作,它将采用令牌的平面列表并将它们嵌套起来,就像左递归解析一样:

from pyparsing import *

# parse action -maker
def makeLRlike(numterms):
    if numterms is None:
        # None operator can only by binary op
        initlen = 2
        incr = 1
    else:
        initlen = {0:1,1:2,2:3,3:5}[numterms]
        incr = {0:1,1:1,2:2,3:4}[numterms]

    # define parse action for this number of terms,
    # to convert flat list of tokens into nested list
    def pa(s,l,t):
        t = t[0]
        if len(t) > initlen:
            ret = ParseResults(t[:initlen])
            i = initlen
            while i < len(t):
                ret = ParseResults([ret] + t[i:i+incr])
                i += incr
            return ParseResults([ret])
    return pa


# setup a simple grammar for 4-function arithmetic
varname = oneOf(list(alphas))
integer = Word(nums)
operand = integer | varname

# ordinary opPrec definition
arith1 = operatorPrecedence(operand,
    [
    (None, 2, opAssoc.LEFT),
    (oneOf("* /"), 2, opAssoc.LEFT),
    (oneOf("+ -"), 2, opAssoc.LEFT),
    ])

# opPrec definition with parseAction makeLRlike
arith2 = operatorPrecedence(operand,
    [
    (None, 2, opAssoc.LEFT, makeLRlike(None)),
    (oneOf("* /"), 2, opAssoc.LEFT, makeLRlike(2)),
    (oneOf("+ -"), 2, opAssoc.LEFT, makeLRlike(2)),
    ])

# parse a few test strings, using both parsers
for arith in (arith1, arith2):
    print arith.parseString("A+B+C+D+E")[0]
    print arith.parseString("A+B+C*D+E")[0]
    print arith.parseString("12AX+34BY+C*5DZ+E")[0]

Prints:

(normal)

['A', '+', 'B', '+', 'C', '+', 'D', '+', 'E']
['A', '+', 'B', '+', ['C', '*', 'D'], '+', 'E']
[['12', 'A', 'X'], '+', ['34', 'B', 'Y'], '+', ['C', '*', ['5', 'D', 'Z']], '+', 'E']

(类似LR)

[[[['A', '+', 'B'], '+', 'C'], '+', 'D'], '+', 'E']
[[['A', '+', 'B'], '+', ['C', '*', 'D']], '+', 'E']
[[[[['12', 'A'], 'X'], '+', [['34', 'B'], 'Y']], '+', ['C', '*', [['5', 'D'], 'Z']]], '+', 'E']
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 pyparsing 的递归表达式 的相关文章

  • 如何覆盖 Django 的默认管理模板和布局

    我正在尝试覆盖 Django 的默认模板 现在只有base site html 我正在尝试更改 django 管理文本 我做了以下事情 我在我的应用程序目录中创建了一个文件夹 opt mydjangoapp templates admin
  • 有没有一种方法可以将python对象直接存储在mongoDB中而不需要序列化它们

    我在某处读到过 您可以使用 BSON 将 python 对象 更具体地说是字典 作为二进制文件存储在 MongoDB 中 但是现在我找不到任何与此相关的文档 有人知道具体如何做到这一点吗 没有办法在不序列化的情况下将对象存储在文件 数据库
  • 从 SHAP 值中获取特征重要性

    我想要获得重要功能的数据框 通过下面的代码 我得到了 shap values 但我不确定这些值的含义是什么 在我的 df 中有 142 个特征和 67 个实验 但得到了一个带有 ca 的数组 2500 个值 explainer shap T
  • 检测到通过 ChromeDriver 启动的 Chrome 浏览器

    我正在尝试在 python 中使用 selenium chromedriver 来访问 www mouser co uk 网站 然而 从第一次拍摄开始 它就被检测为机器人 有人对此有解释吗 此后我使用的代码 options Options
  • 字符串中的注释和注释中的字符串

    我正在尝试使用 Python 和 Regex 计算 C 代码中包含的注释中的字符数 但没有成功 我可以先删除字符串以删除字符串中的注释 但这也会删除注释中的字符串 结果会很糟糕 是否有机会通过使用正则表达式来询问不匹配注释中的字符串 反之亦
  • “一旦获取切片就无法更新查询”。最佳实践?

    由于我的项目的性质 我发现自己不断地从查询集中取出切片 如下所示 Thread objects filter board requested board id order by updatedate 10 但这给我带来了实际对我选择的元素进
  • Python tkinter.filedialog Askfolder 干扰 clr

    我主要在 Spyder 中工作 构建需要弹出文件夹或文件浏览窗口的脚本 下面的代码在spyder中完美运行 在 Pycharm 中 askopenfilename工作良好 同时askdirectory什么都不做 卡住了 但是 如果在调试模式
  • 根据 Pandas 中的列表对多列进行排序

    感谢有关如何根据 pandas 中的倍数列表对给定多列进行排序的任何提示 如下所示 import pandas as pd sort a a d e sort b s1 s3 s6 sort c t1 t2 t3 df pd DataFra
  • ValueError:不支持连续[重复]

    这个问题在这里已经有答案了 我正在使用 GridSearchCV 进行线性回归的交叉验证 不是分类器也不是逻辑回归 我还使用 StandardScaler 对 X 进行标准化 我的数据框有 17 个特征 X 和 5 个目标 y 观察 约11
  • 设置 verify_certs=False 但 elasticsearch.Elasticsearch 因证书验证失败而引发 SSL 错误

    self host KibanaProxy 自我端口 443 self user 测试 self password 测试 我需要禁止证书验证 使用选项时它与curl一起使用 k在命令行上 但是 在使用 Elasticsearch pytho
  • 对使用 importlib.util 导入的对象进行酸洗

    我在使用Python的pickle时遇到了一个问题 我需要通过将文件路径提供给 importlib util 来加载一些 Python 模块 如下所示 import importlib util spec importlib util sp
  • 如何使用 Bokeh 动态隐藏字形和图例项

    我正在尝试在散景中实现复选框 其中每个复选框应显示 隐藏与其关联的行 我知道可以通过图例来实现这一点 但我希望这种效果同时在两个图中发生 此外 图例也应该更新 在下面的示例中 出现了复选框 但不执行任何操作 我显然不明白如何更新用作源的数据
  • 迭代列表的奇怪速度差异

    我创建了两个重复两个不同值的长列表 在第一个列表中 值交替出现 在第二个列表中 一个值出现在另一个值之前 a1 object object 10 6 a2 a1 2 a1 1 2 然后我迭代它们 不对它们执行任何操作 for in a1 p
  • Pandas 堆积条形图中元素的排序

    我正在尝试绘制有关某个地区 5 个地区的家庭在特定行业赚取的收入比例的信息 我使用 groupby 按地区对数据框中的信息进行排序 df df orig groupby District Portion of income value co
  • Python:我不明白 sum() 的完整用法

    当然 我明白你使用 sum 与几个数字 然后它总结所有 但我正在查看它的文档 我发现了这一点 sum iterable start 第二个参数 start 的作用是什么 这太尴尬了 但我似乎无法通过谷歌找到任何示例 并且对于尝试学习该语言的
  • 使用 Conda 更新特定模块会删除大量软件包

    我最近开始使用 Anaconda Python 发行版 因为它提供了许多开箱即用的数据分析库 使用 conda 创建环境和安装软件包也轻而易举 但是当我想更新 Python 本身或任何其他模块时 我遇到了一些严重的问题 我事先被告知我的很多
  • Werkzeug 中的线程和本地代理。用法

    首先 我想确保我正确理解了功能的分配 分配本地代理功能以通过线程内的模块 包 共享变量 对象 我对吗 其次 用法对我来说仍然不清楚 也许是因为我误解了作业 我用烧瓶 如果我有两个 或更多 模块 A B 我想将对象C从模块A导入到模块B 但我
  • falcon,AttributeError:“API”对象没有属性“create”

    我正在尝试测试我的猎鹰路线 但测试总是失败 而且看起来我把所有事情都做对了 my app py import falcon from resources static import StaticResource api falcon API
  • PIL - 需要抖动,但限制调色板会导致问题

    我是 Python 新手 正在尝试使用 PIL 来执行 Arduino 项目所需的解析任务 这个问题涉及到Image convert 方法以及调色板 抖动等选项 我有一些硬件能够一次仅显示 16 种颜色的图像 但它们可以指定为 RGB 三元
  • 使用 Python 将对象列表转为 JSON

    我在转换时遇到问题Object实例到 JSON ob Object list name scaping myObj base url u number page for ob in list name json string json du

随机推荐

  • 如何使用中文版 mPDF

    我正在使用 mPDF 将表单输入数据保存到 PDF 对于英语来说 它工作得很好 任何人都可以使用此代码将 HTML 表单数据保存为 PDF 问题 为了满足我的项目要求 我需要使用中文 我当前的代码不适用于此 表单 html
  • Android GridView 按钮单击处理程序

    我有一个安卓GridView与ImageView TextView和两个Button s 网格看起来很好 但我发现很难处理其中的按钮事件GridView 我是安卓新手 任何帮助 将不胜感激 Thanks 如果您希望按钮 以及其他任何内容 在
  • 如何克隆 Servlet 容器提供的分离的 HttpServletRequest 和 HttpServletResponse?

    我想实现以下逻辑 当我在主servlet的doService方法 在主web容器线程中 收到HttpServletRequeset和HttpServletResponse时 我启动A B C三个线程 由我自己的程序管理的线程 以并行模式处理
  • JQuery 文件上传在单独的 Post 请求中发送每个文件?

    我的问题既简单又复杂 我尝试使用 jQuery fileUpload 库和 spring mvc 控制器作为服务器端上传文件 但我的文件每个都由一个请求上传 我想要的是将它们全部发布在一个请求中 我努力了单文件上传 假选项 但它不起作用 如
  • 使用 Zend Action Helper ContextSwitch 创建自定义 JSON 响应对象

    我通常将编码的 json 对象附加到响应正文 但是现在我遇到了需要使用 ContextSwitch 操作助手的情况 我有一个 Zend Form 需要三个不同的响应上下文 html 将表单渲染为普通 html 在布局内 html 部分 渲染
  • .NET 中最简单的键/值对文件解析

    我的项目需要一个文件 我将在其中存储用户应该能够读取和修改的键 值对数据 我希望程序只期望键在那里 并且我想尽快从文件中解析它们 我可以将它们存储在 XML 中 但是 XML 太复杂了 它需要遍历节点和子节点等等 我想要的只是一些接受文件并
  • 在 ddply 中使用 ifelse 和转换

    我正在尝试使用ddply with transform填充一个新变量 summary Date 在带有变量的数据框中ID and Date 变量的值是根据正在评估的片段的长度来选择的ifelse 如果给定月份内某个 ID 的观测值少于 5
  • ScrollView 正在捕获谷歌地图的触摸事件

    我有一个水平滚动视图 其中包含视图组的层次结构 最后是谷歌地图 我的问题是 HSV 正在捕捉地图上的左右阻力 我试过了 hsv requestDisallowInterceptTouchEvent true 乃至 mapView getPa
  • 如何限制 ngFor 重复 Angular 中的某些项目?

    My Code li class dropdown item li
  • 在没有 UWP 的情况下从 C++/WinRT 使用 FileOpenPicker 时出现“无效窗口句柄”错误

    我正在尝试使用C WinRT写一些有趣的东西 由于我的 Windows 编程经验很少 也没有 C CX 经验 所以我开始尝试示例程序 OCR 示例程序是关于光学字符识别的 我将其修改为面部检测器 基于控制台 效果非常好 我想将获取文件从命令
  • 在没有互联网的情况下从 R 中的 Plotly 导出 PNG 文件

    在这个问题中 从 R 中的 Plotly 导出 PNG 文件我问如何将 Plotly 绘图导出到磁盘 我使用了该功能plotly IMAGE 但后来发现该函数使用了 Plotly 互联网服务器 问题是 现在 Plotly JavaScrip
  • Prolog 中的随机项

    我知道我能做到X is random 10 获取 0 到 10 之间的随机数 但是是否有类似的命令来获取随机匹配项 SWI Prolog v6 有random member 2定义如下 listing random member rando
  • 如何在不平滑任何内容的情况下放大 UIImage?

    我想以这样的方式放大 UIImage 以便用户可以非常清晰地看到 UIImage 中的像素 当我将其放入 UIImageView 并放大变换矩阵时 UIImage 会出现抗锯齿和平滑效果 有没有办法通过简单地重复每一行和每一列来获得更大的像
  • 为什么枚举需要显式转换为 int 类型?

    这样做不会丢失数据 那么为什么必须显式地将枚举转换为整数呢 如果它是隐式的 那么当您有更高级别的方法时 例如 PerformOperation OperationType Silent type where PerformOperation
  • HttpResponse 不包含 Dot Net Core 的 AddHeader 的定义

    将项目移至 Net Core 时 AddHeader抛出错误 错误 CS1061 HttpResponse 不包含定义 AddHeader 且没有扩展方法 AddHeader 接受第一个 可以找到 HttpResponse 类型的参数 您是
  • 哪些操作系统不会在程序退出时释放内存?

    这个问题让我很好奇 像这样的问题总是得到诸如 它通常是安全的 但你不应该假设操作系统会为你做这件事 这样的答案 这对我来说听起来是个好建议 但我想知道 是否有任何积极开发 发布 的不执行此操作的操作系统 这是恐龙时代 80年代 就被修复的东
  • 仅返回 mongo 投影中的数组值

    有没有办法只返回 mongodb 投影中属性的值 例如 我有一个文档 其中有一个属性 其值为数组 我希望查询的返回对象只是数组 而不是property 例子 文档 db test insert name Andrew attributes
  • 如何在Android中播放在线视频?

    我正在 Android 中开发一个示例媒体播放器应用程序来播放在线视频 我已经开发了一些代码来播放视频 它可以很好地播放 SD 卡中的视频 但我在这方面面临两个问题 1 当我打开在线视频应用程序时 它会显示视频 但不会播放视频 一段时间后
  • Android XML DOM 解析中如何解析同名标签?

    我无法在这里解析我的 XML 它仅返回 项目 My AndroidActivity由于太大而无法显示 这就是为什么我只展示了负责解析的部分 我的 XML 看起来像这样
  • 使用 pyparsing 的递归表达式

    我试图弄清楚如何执行左关联表达式 其中递归 不包含在任何内容中 表达式是可能的 例如 我想做 expr OP expr 解析 2 个操作 例如1 x 2 x 3 into expr OP expr OP expr result 如果我试图阻