【问题标题】:parsing boolean expression chain with pegjs用 pegjs 解析布尔表达式链
【发布时间】:2014-10-25 03:33:05
【问题描述】:

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

【问题讨论】:

  • 看pegJS的网上例子,它解析算术表达式。
  • +1 谢谢,我之前尝试过,但有另一个错误导致规则无法捕获。其实很简单...

标签: javascript parsing parser-generator pegjs


【解决方案1】:

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

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

仅此一项就可以完成工作......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    相关资源
    最近更新 更多