Я пытаюсь реализовать парсер комбинаторы в образовательных целях. Парсер просто определяется как std::function<T(input&)>
, Я пришел к выводу, что смогу определить простую грамматику выражений, используя что-то вроде этого кода:
auto expression; // the type does not matter for the context
auto factor = number
| (token('(') >= expression >= token(')'))
;
auto term = factor >= *( (token('*') | token('/')) >= factor );
expression = term >= *( (token('+') | token('-')) >= term );
Как видно, проблема в циклических зависимостях. Я не могу найти способ разрешить круговую зависимость, которую вызывает сгруппированный фактор. Операторы, создающие анализатор факторов, нуждаются в синтаксическом анализаторе выражений, но он создается только в самом конце. Как я мог решить это?
Задача ещё не решена.
Других решений пока нет …