Набросок Паскаля

Моя небольшая пародия на паскаль. Переводит паскальный текст в некое промежуточное представление похожее на лисп. И по нему начинает интерпретацию. В целом интерпретация промежуточных представлений без виртуальных машин задумывалось как временная отладочная мера. Но оказалось что работает очень неплохо.

Что есть

Операции
boolean or and
real +-*/ mod div = < > <= >=
integer +-*/ mod div = < > <= >=
множества+-*
строки + []

Чего нет

Всё в целом вполне кривовато. Аргументы при вызове функции плохо проверяются. И вообще проверки плохо сделаны (ровно насколько чтобы компилятор не падал). Внутренние проверки заложены так же в интерпретатор, но сообщения в них не расставлены и при любой ошибке диагноза и причины не сообщается. Хотя по моим соображениям никаких ошибок в интерпретации или компиляции быть не должно, всё должно улавливаться ещё при генерации промежуточного представления, хотя это и сложнее.

Множества сделаны ввиде массивов 32 битных чисел, а значения являются битами. Значения эти выравниваются, т.е. если элемент множества имеет знаения 100, то он будет 4-тым битом в какой-либо ячейке массива, независимо от границ множества. Сделано это для того чтобы всеоперации множеств можно было делать побайтно (точнее по 4 байта). Не знаю правда нафига я это сделал, о скорости я особо не думал. А проблем это добавляет, потому как до конца не отлаживалось.

Строка writeln(['0'..'9']+'z'); - букву рисовать не будет, потому как сначала создаётся множество с границами цифровых знаков, затем к нему добавляется буква которая в границы не попадает. Но это всего лишь одна из недоделаных мелочей, особых проблем тут не вижу.

Вообщем как Реальный паскаль, за пределами прилагаемых текстов, использовать эту прогу нельзя.

Планы

Ну тут как времени хватит. Возможно надо совместить список переменных и процедур, пока не решил.

Вообще в идеале я очень хотел бы приблизить качество кодогенератора к тому что делает человек. Есть сотни неприкаянных идей.

Download:

Hosted by uCoz