用pegjs解析布尔表达式链

parsing boolean expression chain with pegjs

本文关键字:布尔表达式 pegjs      更新时间:2023-09-26

我正在尝试用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"规则,但这也不起作用。你知道我如何解决这个问题并解析任意长的布尔表达式吗?

回到@HBP建议的在线示例,我设法创建了一个工作规则:

bool "bool"
  = left:expr space+ logicOp:logicOp space+ right:bool { return new options.BooleanExpr(left, logicOp, right); }
  / expr

仅此一项即可完成任务。。。