Task 1 , task 2 до 15 декабря, task 3, 4 до 19 декабря
Task 1:
• добавить структуру для работы с переменными;
• добавить переменную проверку (проверка существования);
• добавить операции «+» и «-» (с переменным числом значений);
• добавить функцию информации об ошибках (необходимо передать числовую строку кода с ошибкой, тип ошибки);
• переписать работу с таблицей лексем (получить лексемы непосредственно из таблицы);
• реализовать все советы «TODO» (начните с TODO: здесь вы должны ...);
Task 2:
• добавить операции со значением '*' / div / () / - (т.е. a: = -3);
• добавить проверку приоритета операторов;
• добавить стратегию восстановления после ошибок;
• переписать древовидную структуру (стиль ООП);
• (необязательно, +2) реализовать дерево с помощью умных указателей;
• (необязательно, +1) помещает создание узлов в отдельные методы дерева сущностей;
• реализовать все советы «TODO» (начните с TODO: ...);
Task 3:
• добавить операторы if / while / for;
• добавить логические / побитовые операторы или / и / xor / nand;
• добавить новые типы: Boolean;
• добавить массивы;
• реализовать все советы «TODO» (начните с TODO: ...);
• (необязательно, +1) реализовать сериализацию дерева;
Task 4:
• добавить генерацию кода (по сгенерированному синтаксическому дереву);
• добавить решения всех предыдущих задач;
• вынести вывод ошибок как отдельную сущность (класс);
• реализовать все подсказки 'TODO' (начинаются с TODO: ...);
• (необязательно, +3) добавить инициализацию переменных посредством выражений;
• (необязательно, +2) добавить оптимизацию;
• (необязательно, +1) добавить скрипт для компиляции кода ассемблера;
• (необязательно, +1) реализовать работу с константами (для дерева и GAS).