0

この文字列を 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" 部分を解析する方法がわからないことです。「ブール」ルールを導入しましたが、これも機能しません。これを解決し、任意の長いブール式を解析する方法について何か考えはありますか?

4

1 に答える 1

0

@HBP によって提案されたオンラインの例に戻ると、作業ルールを作成することができました。

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

これだけで仕事が...

于 2014-10-25T04:04:29.213 に答える