我正在尝试使用peg.js解析此字符串:
filter a > 2 or b < 3 or b > 10 or c = 12
语法的相关摘录如下:
bool "bool"
= left:expr space+ logicOp:logicOp space+ right:bool { return new options.BooleanExpr(left, logicOp, right); }
/ expr:expr { return expr; }
bools "bools"
= left:bool morebools:(space+ logicOp space+ bool)+ { return options.makeBooleanChain(left, morebools); }
/ bool:bool { return bool; }
filter "filter"
= "filter"i space+ _bool:bools { return new options.FilterCmd(_bool); }
问题是布尔链不会被识别超过2个表达式(expr1或expr2),我不知道如何解析更多“或exprN”部分。我引入了“bools”规则,但这也不起作用。知道如何解决这个问题并解析任意长的布尔表达式?
答案 0 :(得分:0)
回到@HBP建议的在线示例,我设法创建了一个工作规则:
bool "bool"
= left:expr space+ logicOp:logicOp space+ right:bool { return new options.BooleanExpr(left, logicOp, right); }
/ expr
仅此一项工作......