История изменений
Исправление mersinvald, (текущая версия) :
Это же типичная задачка на применение рекурсивного нисходящего парсера.
Грамматика такого вида, напрямую перегоняется в парсер:
expression -> logical
logical -> relation { ( "and" | "or" | "xor" ) relation }
relation -> term [ ("<"|"<="|">"|">="|"="|"/=") term ]
term -> factor { ("+"|"-") factor }
factor -> primary { ("*"|"/") primary }
primary -> ([-|+] number) | "(" expression ")"
Исходная версия mersinvald, :
Это же типичная задачка на применение рекурсивного нисходящего парсера.
Грамматика такого вида, напрямую перегоняется в парсер:
expression -> logical
logical -> relation { ( "and" | "or" | "xor" ) relation }
relation -> term [ ("<"|"<="|">"|">="|"="|"/=") term ]
term -> factor { ("+"|"-") factor }
factor -> primary { ("*"|"/") primary }
primary -> ([-|+] number) | "(" expression ")"