2013-05-22 7 views
3

我想使用PyParsing在Python中解析一個類CLIPS語法。在Python中聲明一個簡單的PyParsing遞歸語法的奇怪的警告

的一塊我有問題的代碼是:

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 

我省略了語法的某些部分的定義,因爲他們太長時間。

的問題是解釋給我這個奇怪的錯誤:

SyntaxWarning:不能與ParserElement CONNECTED_CONSTRAINT < < SINGLE_CONSTRAINT結合類型的元素| SINGLE_CONSTRAINT + pp.Literal( '&')+ 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()聲明的標記中。

請問您能幫我嗎?

謝謝。

+0

問題解決!這是在這裏解釋:http://pythonhosted.org/pyparsing/pyparsing.pyparsing.Forward-class.html – JohnQ

回答