Проект находится в разработке
Утилиты препроцессоров позволяют преобразовать файлы исходных текстов Бейсика и Фокала в формат, пригодный для загрузки в эмулятор или сам компьютер. С помощью препроцессоров можно писать код в более читаемом виде (пробелы, полные имена ключевых слов, метки вместо номеров строк), а после обработки - получать максимально компактный исходный код для выполнения на компьютере или эмуляторе.
Утилиты реализованы на ObjectPascal, поддерживается сборка как в виде проекта для Delphi, так и файла для FreePascalCompiler.
- Удаление пустых строк и строк-комментариев (начинающихся с одиночной кавычки)
- Обрезка пустых пробелов в начале и конце строки
- Корректная обработка исходных файлов в UTF8, WIN1251, OEM866 и KOI-8R
- Возможность автоматической нумерации строк при указании параметра, с заданного начального значения и шага
- Сокращение ключевых слов Бейсика при указании параметра
- Удаление пробелов из программы Бейсика (за исключением пробелов внутри текстовых констант) при указании параметра
- Возможность использования символьных меток при автоматической нумерации строк с заменой их на номера строк в операторах RESTORE,GOTO,GOSUB. Метки являются регистронезависимыми, могут включать буквы, цифры и символ нижнего подчеркивания.
- Поддержка директив условной трансляции IFDEF/ELSE/ENDIF, с передачей имен директив через аргументы командной строки /define. В данной версии, многоуровневые директивы условной трансляции не поддерживаются.
- Поддержка включаемых файлов через директиву INCLUDE. Вложенные файлы также могут содержать директивы включения.
- Поддержка прагм трансляции через директиву PRAGMA для главного файла программы. Можно указать для файла кодировку (UTF8, WIN1251, OEM866, KOI8R), а также автонумерацию строк (AUTONUMLINES). Значения, заданные прагмами, имеют меньший приоритет, чем значения, заданные аргументами командной строки. При отстутствии аргумента командной строки, используется значение, заданное в прагме.
Примеры исходных и обработанных исходных кодов Бейсика находятся в файле BASIC_Examples.md
Также примеры работы препроцессора можно найти в каталоге tests\cases_basic,
где файлы .bas - это входные файлы, а файлы .out - выходные.
- Удаление пустых строк и строк-комментариев (начинающихся с символов # или //)
- Обрезка пустых пробелов в начале и конце строки
- Сокращение ключевых слов до одного символа
- Проверка номеров строк на дубликаты
- Преобразование из UTF8, WIN1251 и OEM866 в KOI-8R
- Поддержка директив условной трансляции IFDEF/ELSE/ENDIF, с передачей имен директив через аргументы командной строки /define. В данной версии, многоуровневые директивы условной трансляции не поддерживаются.
- Поддержка включаемых файлов через директиву INCLUDE. Вложенные файлы также могут содержать директивы включения.
- Поддержка прагм трансляции через директиву PRAGMA для главного файла программы. Можно указать для файла кодировку (UTF8, WIN1251, OEM866, KOI8R) Значения, заданные прагмами, имеют меньший приоритет, чем значения, заданные аргументами командной строки. При отстутствии аргумента командной строки, используется значение, заданное в прагме.
Автонумерация строк, в отличии от препроцессора Бейсика, является более сложной задачей, так как в Фокале используются не только номера строк, но и группы строк, в том числе как вызываемые функции. В данном варианте, автонумерация строк не предусмотрена.
Примеры исходных и обработанных исходных кодов Фокала находятся в файле FOCAL_Examples.md
Первый параметр программы - исходный файл с программой на Бейсике. Второй параметр - выходной обработанный файл. Далее идут в произвольном порядке аргументы для работы препроцессора:
- /codepage=кодовая страница - позволяет задать кодовую страницу для исходного файла, возможные значения: utf8,win1251,koi8r,oem866. По умолчанию, используется utf8
- /autonumlines=true|false - позволяет включить режим автонумерации строк исходного текста программы. По умолчанию отключена. Использование символьных меток возможно только в этом режиме.
- /define=name - установка имени для директивы IFDEF. Может использоваться несколько раз, задавая много имен.
- /startline=num - установка начального значения для режима автонумерации строк (по умолчанию 10)
- /stepline=num - установка шага для автонумерации строк (по умолчанию 10)
- /packnames=true|false - сокращать имена операторов Бейсика. По умолчанию отключено
- /stripspaces=true|false - удалять все пробелы из программы Бейсика, за исключением пробелов внутри текстовых констант. По умолчанию отключено.
- /origcodepage=true|false - сохранять выходные файлы в кодировке входного файла (по умолчанию, сохраняет в кодировке KOI8R)
Первый параметр программы - исходный файл с программой на Фокале. Второй параметр - выходной обработанный файл. Далее идут в произвольном порядке аргументы для работы препроцессора:
- /codepage=кодовая страница - позволяет задать кодовую страницу для исходного файла, возможные значения: utf8,win1251,koi8r,oem866. По умолчанию, используется utf8
- /define=name - установка имени для директивы IFDEF. Может использоваться несколько раз, задавая много имен.
- /packnames=true|false - сокращать имена операторов Фокала. По умолчанию отключено
- /origcodepage=true|false - сохранять выходные файлы в кодировке входного файла (по умолчанию, сохраняет в кодировке KOI8R)
Версия для Delphi компилируется через открытие проектов BkBasicPreprocessor\BkBasicPreprocessor.dproj и
BkFocalPreprocessor\BkFocalPreprocessor.dproj.
Для сборки версии FreePascal, нужно запустить пакетный файл из каталога build.
Для компиляции проекта нужно добавить в каталог classes файл версии Version.pas.
При работе из репозитория git данный файл создаётся вызовом скрипта
scripts\update_version.bat, в противном случае его нужно создать самому по примеру:
unit Version ;
interface
type TGitVersion = class
const COMMIT = 'd6aac25e';
const BRANCH = 'main';
const TAG = 'v1.0.0';
end ;
implementation
end.