Задача C. Простые выражения

Входной файл:Стандартный вход   Ограничение времени:1 сек
Выходной файл:Стандартный выход   Ограничение памяти:512 Мб
Максимальный балл:10  

Условие

Требуется написать программу, проводящую синтаксический анализ простейших выражений. Выражения должны удовлетворять грамматике:

expression ::= term { '+' term | '-' term }
term ::= factor { '*' factor | '/' factor }
factor ::= number | identifier | '(' expression ')'

Анализатор должен представлять доработку утилиты командной строки из предыдущего задания, принимающую в качестве параметра имя файла с исходным кодом и ключ для отличения от прочих режимов работы.

Анализатор должен определить абстрактное синтаксическое дерево.

Репозиторий с анализатором должен содержать автоматические тесты, каждый тест должен включать входной и выходной файл.

Формат входных данных

Отправьте ссылку на конкретный коммит в репозитории на Github, например

https://github.com/klenin/cats-main/commit/dce22c8348808959881ed7d6852c520a41e47c9a

В качестве среды разработки укажите Answer text.

Формат выходных данных

Выходные данные должны содержать абстрактное синтаксическое дерево, изображённое с помощью отступов и, опционально, ASCII графики.

В случае обнаружения ошибки вместо дерева должна выводиться строка, номер символа и текст сообщения об ошибке. После этого анализатор может завершать работу.

Примеры тестов

Стандартный вход Стандартный выход
1
3*(5 + a)
*
├─── 3
└─── +
     ├─── 5
     └─── a

0.116s 0.018s 19