- 64
- 3
Написал компилятор небольшого подмножества BASIC.
Собственно это язык уровнем немного выше CLEO, синтаксис в основном унаследован от MS BASIC.
Как работает компилятор:
Анализирует каждую строку переданного на ввод файла, и транслирует их в опкоды на языке SCM, на выводе получается строка вида Player.Money($PLAYER_CHAR) += amount
Интересным является то, что компилятор не строит AST а является своего рода интерпретатором.
Синтаксис языка невероятно прост:
Программа это последовательность вызовов функций.
Каждая функция - ключевое слово языка(как например if)
Каждая функция может принмать до 255 аргументов
Формат вызова функции:
Данный код объявляет переменную myvar, задает ей значение 100 и задает игроку здоровье 100
Компилятор быстрый за счет простоты
Транслирование кода:
Трансляция кода происходит на лету, во время интерпретации скрипта, в основном все функции компилируются в опкоды.
Самый простой скомпилированный скрипт выглядит вот так:
entry_point - точка входа в скрипт, именно туда записываются транслированные опкоды.
Завтра выйдет первая версия, и она будет под лицензией GNU GPL 3.
Сырки на гитхабе.
Собственно это язык уровнем немного выше CLEO, синтаксис в основном унаследован от MS BASIC.
Как работает компилятор:
Анализирует каждую строку переданного на ввод файла, и транслирует их в опкоды на языке SCM, на выводе получается строка вида Player.Money($PLAYER_CHAR) += amount
Интересным является то, что компилятор не строит AST а является своего рода интерпретатором.
Синтаксис языка невероятно прост:
Программа это последовательность вызовов функций.
Каждая функция - ключевое слово языка(как например if)
Каждая функция может принмать до 255 аргументов
Формат вызова функции:
Код:
DEFVAR $myvar
SETVAR $myvar 100
SETHP $myvar
Компилятор быстрый за счет простоты
Транслирование кода:
Трансляция кода происходит на лету, во время интерпретации скрипта, в основном все функции компилируются в опкоды.
Самый простой скомпилированный скрипт выглядит вот так:
Код:
// This script is compiled by gta sa compiler
// ©2017 gta sa compiler by Bogdan Nikolaev
{$CLEO .cs}
0000: NOP
0002: jump @entry_point
// Defines script entry point
:entry_point
0225: $s = player $PLAYER_CHAR health
if $s = 100
then
0000: NOP
Player.Money($PLAYER_CHAR) += 150000
END
end_thread
Завтра выйдет первая версия, и она будет под лицензией GNU GPL 3.
Сырки на гитхабе.