LINUX.ORG.RU

История изменений

Исправление 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 ")"