синтаксический анализ цепочки логических выражений с помощью pegjs

Я пытаюсь разобрать эту строку с помощью 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); }

Проблема в том, что логическая цепочка не распознается для более чем двух выражений (expr1 или expr2), и я не знаю, как разобрать больше частей "или exprN". Я ввел правило "bools", но оно тоже не работает. Любая идея, как я могу решить эту проблему и проанализировать произвольно длинные логические выражения?


person orange    schedule 25.10.2014    source источник
comment
Посмотрите онлайн-пример pegJS, он анализирует арифметические выражения.   -  person HBP    schedule 25.10.2014
comment
+1 Спасибо, пробовал раньше, но была еще одна ошибка, из-за которой правило не срабатывало. На самом деле это действительно просто ...   -  person orange    schedule 25.10.2014


Ответы (1)


Возвращаясь к онлайн-примеру, предложенному @HBP, мне удалось создать рабочее правило:

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

Одно это делает работу ...

person orange    schedule 25.10.2014