Я попробую описать что есть и что будет в компиляторе, а вы допишите на что ещё обратить внимание, может что важное забыл.
Типы данных: 7 целых (byte, word, int64...), boolean, pointer, char, string.
Допускаются array, record и pointer в любых комбинациях: массив указателей на структуры, внутри которых указатели на массивы байтов, и т.п. Массивы пока только одномерные, но можно описать массив массивов.
Переменные: любого типа (см. выше), глобальные/локальные, допускается absolute.
Константы тоже будут, но с ними пока затруднения.
Подпрограммы (процедуры, функции): до 10 параметров любого типа, параметры передаются по значению и по ссылке (var). Почти работают полиморфные подпрограммы и override.
Выражения и операторы в них: + - * / > < >= <= = <> div mod and or xor shl shr @ ^ :=
А также скобки, приоритеты операций, явное преобразование типов. Сложность выражений ограничена объёмом памяти при компиляции и при работе.
Ветвления, циклы: if, while, repeat. Цикл for пока только в одну сторону (инкремент).
Cейчас работаю над кодогенератором. Выдаёт более-менее осмысленный, но абсолютно неработоспособный код.
Планы на будущее:
- директивы условной компиляции $define, $ifdef и прочие (ничего сложного, надо заняться реализацией);
- переопределение арифметических операторов;
- числа с плавающей точкой;
- файловые типы данных;
- множества, оператор in;
- оператор case (пока вообще нет идей как это реализовать);
- модули (unit, uses, interface, implementation...);
- динамическое распределение памяти (new, getmem...);
- умная линковка;
- inline-подпрограммы;
- запуск компилятора на платформе с 16-битной адресацией (Z80, собственный процессор...) и диском (FDD, HDD, flash...).