在Pyparsings MatchFirst中有多个碰撞引用

时间:2017-06-01 17:18:38

标签: python python-3.x pyparsing

我正在为脚本语言构建解释器。各个组件按预期工作,但是当我在函数参数的分隔列表中使用它们时,解析器会将一种参数解析为错误的类型。

定义是:

legalChars = alphanums + "-" + "_"
identifier = Word(legalChars)
boolean = CaselessKeyword("TRUE") | CaselessKeyword("FALSE")
number = Word(nums + "." + "-")
lparen = Literal("(").suppress()
rparen = Literal(")").suppress()
constant = number("NUMERIC") | quotedString("STRING") | boolean("BOOL")
operator = (Literal("==") | Literal("!=") | Literal(">") | Literal("<") | Literal(">=") | Literal("<="))("OPERATOR")

condition = Forward()
function = Forward()
attribute = (Word(legalChars) | Combine("[" + Word(legalChars+" ") + "]"))("ATTRIB")
variable = Combine("@" + identifier)("VAR") 
arg = function | condition | constant | attribute | variable
args = delimitedList(arg)
function <<= (identifier("FUNCTOR") + lparen + Optional(args)("ARGS") + rparen)("FUNCTION")
condition = variable + operator + (variable | constant)

如果我尝试在函数中使用条件,则会出现问题,例如:

iff(@somevar=="Foo")

它不会解释条件。如果我尝试通过argargs解析它,则会将其解释为variable而不是conditional。我已尝试使用^分隔arg中的值,但我得到的结果相同。

1 个答案:

答案 0 :(得分:0)

正如保罗指出的,我的代码中有错误。我错误地分配了$(document).ready(function() { $("form").submit(function() { ajax(); return false; }); }); 变量。