Har*_*wEm 5 python parsing ply pyparsing
如果我的术语不正确,请原谅我; 或许只是用"正确"的词来形容我想要的东西足以让我自己找到答案.
我正在研究ODL(对象描述语言)的解析器,这是一种神秘的语言,据我所知现在只能由NASA PDS(行星数据系统使用;它是NASA如何向公众提供数据).幸运的是,PDS最终转向XML,但我仍然需要编写一个软件,用于在截止日期之前完成的任务.
ODL以如下方式定义对象:
OBJECT = TABLE
ROWS = 128
ROW_BYTES = 512
END_OBJECT = TABLE
Run Code Online (Sandbox Code Playgroud)
我正在尝试编写一个解析器pyparsing,我一直很好,直到我进入上面的构造.
我必须创建一些能够确保OBJECT行的右手值与END_OBJECT的RHV相同的规则.但我似乎无法将其纳入pyparsing规则.我可以确保两者都是语法上有效的值,但我不能采取额外的步骤并确保值相同.
pyparsing能够处理这种结构吗?pyparsing无法处理它,是否有另一个Python工具能够这样做?怎么样ply(lex/ 的Python实现yacc)?它实际上是一种语境敏感语言的语法,经典地抽象为wcww在(a | b)*中的位置(注意wcw',其中'表示反转,是无上下文的).
解析表达式语法能够通过使用语义谓词来解析wcw类型的语言.PyParsing提供matchPreviousExpr()和matchPreviousLiteral()为这个目的,如辅助方法
w = Word("ab")
s = w + "c" + matchPreviousExpr(w)
Run Code Online (Sandbox Code Playgroud)
所以在你的情况下你可能会做类似的事情
table_name = Word(alphas, alphanums)
object = Literal("OBJECT") + "=" + table_name + ... +
Literal("END_OBJECT") + "=" +matchPreviousExpr(table_name)
Run Code Online (Sandbox Code Playgroud)