Pyparsing 支持上下文相关语法吗?

2023-12-29

如果我的术语不正确,请原谅我;也许只要用“正确”的词语来描述我想要的东西就足以让我自己找到答案。

我正在开发 ODL(对象描述语言)的解析器,据我所知,这是一种神秘的语言,现在仅由 NASA PDS(行星数据系统;这是 NASA 向公众提供数据的方式)使用。幸运的是,PDS 最终转向了 XML,但我仍然需要为截止日期之前的任务编写软件。

ODL 按如下方式定义对象:

OBJECT              = TABLE
  ROWS              = 128
  ROW_BYTES         = 512 
END_OBJECT          = TABLE

我正在尝试编写一个解析器pyparsing,直到我进行上述构造之前我都做得很好。

我必须创建一些规则来确保 OBJECT 行的右侧值与 END_OBJECT 的 RHV 相同。但我似乎无法将其放入pyparsing规则。我可以确保两者都是语法上有效的值,但我无法采取额外的步骤并确保这些值相同。

  1. 我的直觉是否正确,这是上下文相关的语法?我应该用这个词来描述这个问题吗?
  2. 无论这在理论意义上是什么类型的语法,pyparsing能够处理这种施工吗?
  3. If pyparsing无法处理它,是否有其他Python工具能够做到这一点?怎么样ply(Python 实现lex/yacc)?

它实际上是上下文相关语言的语法,经典地抽象为wcw其中 w 位于 (a|b)* 中(请注意wcw', 在哪里'表示反转,与上下文无关)。

解析表达式语法能够通过使用语义谓词来解析 wcw 类型的语言。 PyParsing 提供了matchPreviousExpr() and matchPreviousLiteral()为此目的的辅助方法,例如

w = Word("ab")
s = w + "c" + matchPreviousExpr(w)

所以在你的情况下你可能会做类似的事情

table_name = Word(alphas, alphanums)
object = Literal("OBJECT") + "=" + table_name + ... +
  Literal("END_OBJECT") + "=" +matchPreviousExpr(table_name)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pyparsing 支持上下文相关语法吗? 的相关文章

随机推荐

  • JavaScript:输出符号和特殊字符

    我正在尝试使用 JavaScript 将一些符号包含到 div 中 它应该看起来像这样 x reals 但我得到的是 x 8712 reals var div document getElementById text var textnod
  • 如何用 BEM 指定状态?

    使用 BEM CSS 类语法 假设我有一个具有以下类的元素 div class purchase module2 heading tooltip div 现在假设有一个事件或某些东西使这个 工具提示 变得活跃或可见 用 BEM 表达这一点的
  • 在 C++ 中使用 auto 声明变量有缺点吗?

    看起来auto是 C 11 中添加的一个相当重要的功能 它似乎遵循许多较新的语言 与 Python 这样的语言一样 我没有看到任何显式的变量声明 我不确定是否可以使用 Python 标准 使用有什么缺点吗auto声明变量而不是显式声明它们
  • 如何从 Java 中的 BigInteger 获取无符号字节数组?

    我需要转换一个大整数 https docs oracle com javase 7 docs api java math BigInteger html以大端格式编码的无符号整数 但我遇到了问题BigInteger toByteArray
  • Python 2:ValueError:以 10 为基数的 int() 的文字无效:'20.0'

    我在 python 数学中遇到了一个小问题 所以我有一些变量 x y and answer gt gt gt x 20 gt gt gt y 21 gt gt gt answer x y 100 gt gt gt answer 0 所以它打
  • PostgreSQL 更新时区偏移

    有什么快速简便的方法来校正时区TIMESTAMP WITH TIME ZONE字段不小心输入了错误的时区 就我而言 以下记录被错误地输入为 UTC 而不是美国 太平洋地区 t0 t1 what 2011 06 01 13 00 00 00
  • 无法使用 install.packages 安装 R-forge 软件包

    This http thread gmane org gmane comp lang r finance 10265 question http thread gmane org gmane comp lang r finance 1002
  • 用户在线离线状态-离线状态问题

    首先这是相关问题PHP 在线离线状态 https stackoverflow com questions 13201579 php online offline status 13201617 comment17974371 1320161
  • 模拟移动设备上的点击事件

    我在窗口加载时有一个点击事件 如下所示 function myFunction document getElementById myEl click works on desktop not on mobile window onload
  • 解析失败:Lcom/google/android/gms/common/api/Api$zzf;

    当我们运行应用程序的 apk 文件时 我收到此错误 在build gradle我们设置multidex并编译multidex存在于Gradle文件中 我们将 Firebase 版本更改为上方和下方 但这对我们不起作用 这是我们在运行控制台的
  • 提取每第 n 个字母(数字)

    我有一个包含行 名称 空格和零和一字符串的文件 我需要提取零和一字符串的每第 5 个字符 对结果求和 如果总和不为 0 保存名称到另一个文件中 1rt2 0001000000100000000000001010000100000000010
  • 框架“可扩展性良好”是什么意思?

    当阅读有关框架 net ruby on Rails django spring 等 时 我不断地看到某些框架的扩展性很好或不好 当有人说框架 可扩展性良好 时 这是什么意思 而说框架 可扩展性不好 又是什么意思 谢谢 当您根据并发用户绘制一
  • 简单的 Javascript 数学函数 - 加法/不起作用?

    这是我的功能 var ans X X Y Z 当我进入10 20 and 10 分别 加法位的结果为2010并不是30 我怎样才能解决这个问题 确保首先将字符串转换为数字 var X 10 var Y 20 var Z 10 X X una
  • 如何在 SQL*Plus 中打开存储过程并对其进行编辑

    我需要对一个过时的机器上的旧 Oracle 存储过程进行一些更改 该机器保留下来运行旧的遗留进程 我唯一可以连接到数据库的工具是 SQL加 如何将存储过程加载到内存中以在 SQL 中进行编辑Plus 我在网上找到的教程没有解释这是如何完成的
  • git push 说一切都是最新的,而实际上它绝对不是

    我有一个公共存储库 没有其他人对其进行分叉 拉取或其他任何操作 我对一个文件做了一些小的更改 成功提交它们 并尝试推送 它说 一切都是最新的 没有分支机构 我对 git 非常非常陌生 我不明白到底发生了什么 git remote show
  • 如何在SQL Server中为自动增量列指定特定值?

    我在 sql server 中有一个自动增量标识列 但我想为其中一行指定特定值 因此 编号方案如下 1 2 999 for the reserved entry 3 n 我怎样才能做到这一点 你需要使用IDENTITY INSERT SET
  • 适用于 iOS 的 Elasticsearch 客户端

    有人知道适用于 iOS 的 elasticsearch 客户端库吗 如果它也用 swift 编写 那就太好了 弹性搜索 客户端 部分显示了多个平台的多个库 但没有显示 iOS 的任何内容 我觉得一定有人这样做了 Cheers 我怀疑没有人这
  • Rust:使用结构向量的极坐标中的数据帧

    Problem 我想读入数据polars数据帧来自mysql数据库 我在用sqlx sqlx生成结构向量 例如 Vec
  • 安装oracle 11g后sql plus打不开

    我安装了 oracle 11g 我试图从命令提示符打开 sqlplus 但它在不到一秒的时间内打开和关闭 我也尝试从安装位置打开 sqlplus 它仍然显示出相同的行为 谁能帮我解决一下 由于其他一些错误 我已经卸载并安装了两次 oracl
  • Pyparsing 支持上下文相关语法吗?

    如果我的术语不正确 请原谅我 也许只要用 正确 的词语来描述我想要的东西就足以让我自己找到答案 我正在开发 ODL 对象描述语言 的解析器 据我所知 这是一种神秘的语言 现在仅由 NASA PDS 行星数据系统 这是 NASA 向公众提供数