В общем, я выпустил первую бета-версию своего компилятора - ZX Like Pascal 0.9beta. Смотреть тут
В общем, я выпустил первую бета-версию своего компилятора - ZX Like Pascal 0.9beta. Смотреть тут
Я тоже решил "пошутить" и выложить что есть
В исходниках на данный момент 134 TODO, плюс список задач в текстовом файле, то есть ещё работать и работать. В целом - стараюсь сделать "настоящий" Паскаль, совместимый с TurboPascal/FreePascal. Пока это всё выдаёт огромный медленный код, нужна оптимизация. Но сейчас важнее отладить фичи, чтобы устаканилась внутренняя структура компилятора, на которую опирается кодогенератор.
О возможностях компилятора.
Поддерживаются типы данных: 6 целочисленных (byte, word, longword, shortint, smallint, longint), boolean, pointer, string.
Допускаются array, record и pointer в любых комбинациях: массив указателей на структуры, внутри которых указатели на массивы байтов, и т.д., на сколько хватит оперативки.
Массивы пока только одномерные, но можно описать массив массивов.
Переменные могут быть любого типа (см. выше), глобальные/локальные, допускается absolute для явного указания адреса, по которому будет храниться эта переменная.
Выражения и операторы в выражениях: + - * / > < >= <= = <> div mod and or xor shl shr @ ^ :=
В выражениях учитываются приоритеты арифметических операций, скобки, допускается явное преобразование типов. Сложность выражений, в принципе, ничем не ограничена.
Ветвления, циклы: if, while, repeat, for. Цикл for работает с предпроверкой диапазона
Подпрограммы (процедуры, функции): до 10 параметров любого типа, параметры передаются по значению и по ссылке (var, const).
Допускаются полиморфные подпрограммы (подпрограммы с одинаковым именем, но разным набором параметров).
Препроцессор понимает директивы условной компиляции $define, $undef, $ifdef, $else, $endif.
Директива $i - вставка текста из другого файла (include).
Компилятор (транслятор?) выдаёт файл на языке ассемблера, который можно собрать кросс-ассемблером.
Можно делать вставки на ассемблере asm...end, всё что между - копируется в выходной файл как есть. Парсер ассемблера и обработка в нём идентификаторов - отдельное большое TODO.
Теперь о недоделках.
Тип char вроде есть, но не проверял, скорее всего будет некорректно работать.
Иногда может путаться знаковая/беззнаковая арифметика.
Константы, перечислимые типы, многомерные массивы начаты, но нормально не работают, надо довести до ума.
Глобальные переменные на самом деле локальные, в стеке.
Не работает передача параметров по значению, если параметр нестандартного типа (массивы, записи...), передавайте по ссылке.
Проблемы с обработкой символов ' " / \ в строковых константах, потому что код обработки был написан лет 5 назад по принципу "лишь бы запустилось". Переделывать его надо полностью.
Отсутствует очень много семантических проверок. Если компилятор что-то "проглотил", это не значит что написано правильно
Также давайте разделять сам компилятор с языком Паскаль, и библиотеки. Спрайты, скроллы, шрифты - это всё библиотеки, которые пишутся и прикручиваются отдельно. Вот этих библиотек у меня сейчас нет вообще. Если кто-то решит написать какую-нибудь демку или игру - спрашивайте, расскажу отдельно о прикручивании ассемблерных процедур.
В общем, пробуйте, если что-то не работает - пишите, буду думать.
bmpascal_v0.0.zip
Последний раз редактировалось Bolt; 01.04.2018 в 09:52.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Да, неправильно. Такого "неправильного" там порядка 160 пунктов, причём "добавить поддержку модулей" и "переписать кодогенератор" в списке тоже есть. Если реализовывать даже по одному пункту в день исключая выходные, то как раз работы до конца года. Но оно уже хоть как-то работает. Вот ещё текстового редактора не хватает, это да...
Так, арифметику со знаком доработать.
Текстового редактора (IDE) нет и не планируется.
Есть что ешё сказать конкретно по этой версии? Или "не смотрел, но осуждаю"? Тогда давай прекратим этот диалог.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)