如果我的术语不正确,请原谅我;也许只要用“正确”的词语来描述我想要的东西就足以让我自己找到答案。
我正在开发 ODL(对象描述语言)的解析器,据我所知,这是一种神秘的语言,现在仅由 NASA PDS(行星数据系统;这是 NASA 向公众提供数据的方式)使用。幸运的是,PDS 最终转向了 XML,但我仍然需要为截止日期之前的任务编写软件。
ODL 按如下方式定义对象:
OBJECT = TABLE
ROWS = 128
ROW_BYTES = 512
END_OBJECT = TABLE
我正在尝试编写一个解析器pyparsing
,直到我进行上述构造之前我都做得很好。
我必须创建一些规则来确保 OBJECT 行的右侧值与 END_OBJECT 的 RHV 相同。但我似乎无法将其放入pyparsing
规则。我可以确保两者都是语法上有效的值,但我无法采取额外的步骤并确保这些值相同。
- 我的直觉是否正确,这是上下文相关的语法?我应该用这个词来描述这个问题吗?
- 无论这在理论意义上是什么类型的语法,
pyparsing
能够处理这种施工吗?
- 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(使用前将#替换为@)