【问题标题】:Strange warning declaring a simple PyParsing recursive grammar in Python在 Python 中声明一个简单的 PyParsing 递归语法的奇怪警告
【发布时间】:2013-05-22 14:21:16
【问题描述】:

我正在尝试使用 PyParsing 在 Python 中解析类似 CLIPS 的语法。

我遇到问题的代码是:

import pyparsing as pp

...some pyparsing tokens definitions...

INTEGER_EXPRESSION = EXPRESSION

RULE_NAME = SYMBOL

RULE_PROPERTY = OB + pp.Literal('salience') + INTEGER_EXPRESSION + CB

DECLARATION = OB + pp.Literal('declare') + pp.OneOrMore(RULE_PROPERTY) + CB

ACTION = EXPRESSION

CONNECTED_CONSTRAINT = pp.Forward()

TERM = CONSTANT | SINGLEFIELD_VARIABLE | MULTIFIELD_VARIABLE | pp.Literal(':') + FUNCTION_CALL | pp.Literal('=') + FUNCTION_CALL

SINGLE_CONSTRAINT = TERM | pp.Literal('~') + TERM

CONNECTED_CONSTRAINT << SINGLE_CONSTRAINT | SINGLE_CONSTRAINT + pp.Literal('&') + CONNECTED_CONSTRAINT

CONSTRAINT = pp.Literal('?') | pp.Literal('$?') | CONNECTED_CONSTRAINT

ORDERED_PATTERN_CE = OB + SYMBOL + pp.ZeroOrMore(CONSTRAINT) + CB

PATTERN_CE = ORDERED_PATTERN_CE

CONDITIONAL_ELEMENT = PATTERN_CE

DEFRULE_CONSTRUCT = OB + pp.Literal('defrule') + RULE_NAME + pp.Optional(COMMENT) + pp.Optional(DECLARATION) + pp.ZeroOrMore(CONDITIONAL_ELEMENT) + pp.Literal('=>') + pp.ZeroOrMore(ACTION) + CB

语法的某些部分的定义因为太长而省略了。

问题是解释器给了我这个奇怪的错误:

语法警告:无法将类型元素与 ParserElement 组合 CONNECTED_CONSTRAINT

我注意到,如果我写:

CONNECTED_CONSTRAINT << SINGLE_CONSTRAINT

代替:

CONNECTED_CONSTRAINT << SINGLE_CONSTRAINT | SINGLE_CONSTRAINT + pp.Literal('&') + CONNECTED_CONSTRAINT

它可以正常工作。

但是,即使我这样写:

CONNECTED_CONSTRAINT << SINGLE_CONSTRAINT | pp.Literal('test')

它不起作用。

所以我认为问题在于有一个由“|”给出的 OR符号,在用 pp.Forward() 声明的标记中。

你能帮帮我吗?

谢谢。

【问题讨论】:

标签: python recursion grammar pyparsing


【解决方案1】:

问题解决了。

这里解释了这种问题:

http://pythonhosted.org/pyparsing/pyparsing.pyparsing.Forward-class.html

我必须写出这样的表达式:

x << a | b

这样:

x << (a | b)

因为运算符“|”优先级低于运算符“

还是谢谢你!

【讨论】:

  • 嘿,真的有人读过文档!欢迎使用 pyparsing!
  • 谢谢!顺便说一句,很棒的图书馆;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-03
相关资源
最近更新 更多