我正在为脚本语言构建解释器。各个组件按预期工作,但是当我在函数参数的分隔列表中使用它们时,解析器会将一种参数解析为错误的类型。
定义是:
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")
它不会解释条件。如果我尝试通过arg
或args
解析它,则会将其解释为variable
而不是conditional
。我已尝试使用^
分隔arg
中的值,但我得到的结果相同。
答案 0 :(得分:0)
正如保罗指出的,我的代码中有错误。我错误地分配了$(document).ready(function() {
$("form").submit(function() {
ajax();
return false;
});
});
变量。