Анализ цепочки логических выражений с помощью 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", но это тоже не работает. Любая идея о том, как я могу решить это и разобрать произвольно длинные логические выражения?
1 ответ
Решение
Возвращаясь к онлайн-примеру, предложенному @HBP, мне удалось создать рабочее правило:
bool "bool"
= left:expr space+ logicOp:logicOp space+ right:bool { return new options.BooleanExpr(left, logicOp, right); }
/ expr
Это одно делает работу...