gta sa compiler

Статус
В этой теме нельзя размещать новые ответы.

monobogdan

Новичок
Автор темы
64
3
Написал компилятор небольшого подмножества BASIC.
Собственно это язык уровнем немного выше CLEO, синтаксис в основном унаследован от MS BASIC.
Как работает компилятор:
Анализирует каждую строку переданного на ввод файла, и транслирует их в опкоды на языке SCM, на выводе получается строка вида Player.Money($PLAYER_CHAR) += amount
Интересным является то, что компилятор не строит AST а является своего рода интерпретатором.
Синтаксис языка невероятно прост:
Программа это последовательность вызовов функций.
Каждая функция - ключевое слово языка(как например if)
Каждая функция может принмать до 255 аргументов
Формат вызова функции:
Код:
DEFVAR $myvar
SETVAR $myvar 100
SETHP $myvar
Данный код объявляет переменную myvar, задает ей значение 100 и задает игроку здоровье 100
Компилятор быстрый за счет простоты
Транслирование кода:
Трансляция кода происходит на лету, во время интерпретации скрипта, в основном все функции компилируются в опкоды.
Самый простой скомпилированный скрипт выглядит вот так:
Код:
// 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
entry_point - точка входа в скрипт, именно туда записываются транслированные опкоды.
Завтра выйдет первая версия, и она будет под лицензией GNU GPL 3.
Сырки на гитхабе.
 

monobogdan

Новичок
Автор темы
64
3
Луа слабо заюзать?
Причем тут луа то?
Это вообще новый ЯП предназначенный для GTA SA :)
Если имелась ввиду трансляция в луа для moonloader - то нах мне нужны зависимости, когда cleo у каждого второго игрока стоит а moonloader в основном у игроков в самп
 

Dark_Knight

Me, me and me.
Друг
4,085
2,114
Мунлоадер не зависит от клео, а как понял твой бейсик, который на сколько мне известно "мертвый" язык и смысла от него нет. Хотя работа твоя интересна.
 

monobogdan

Новичок
Автор темы
64
3
Мунлоадер не зависит от клео, а как понял твой бейсик, который на сколько мне известно "мертвый" язык и смысла от него нет. Хотя работа твоя интересна.
Та бейсик тут не причем.
Это просто изи язык для облегчения кодинга модов для gta sa
И да - мунлодер имплементит же какие то опкоды клео вроде?
очко бы тебе порвать за использование глобальных переменных
А тебе, петушку, я смотрю уже порвали?
 

4el0ve4ik

Известный
Всефорумный модератор
1,550
1,343
Та бейсик тут не причем.
Это просто изи язык для облегчения кодинга модов для gta sa
И да - мунлодер имплементит же какие то опкоды клео вроде?

А тебе, петушку, я смотрю уже порвали?
Мунлоадер не будет зависить от клео, Фип работает над этим, что бы переписать тоже время нужно знаете ли.
 

Dark_Knight

Me, me and me.
Друг
4,085
2,114
А тебе, петушку, я смотрю уже порвали?
Ты на тима не гони. Он прав, что насчет того, что ты юзаешь глобальные переменные. Их вообще нельзя юзать, кроме двух $player_actor & $player_char. Так что твой интерпретатор гавно в работе при больше 32 локальных переменных и плюс еще 2 переменные таймеры.
 

monobogdan

Новичок
Автор темы
64
3
Я вот думаю что стоит делать не транслятор в сырки клео а прямой компилятор в .scm.
В CLEO очень много костылей которые мешают сделать высокоуровщину
 

monobogdan

Новичок
Автор темы
64
3
Ты на тима не гони. Он прав, что насчет того, что ты юзаешь глобальные переменные. Их вообще нельзя юзать, кроме двух $player_actor & $player_char. Так что твой интерпретатор гавно в работе при больше 32 локальных переменных и плюс еще 2 переменные таймеры.
*компилятор.
Интерпретирует он только переменные во время компиляции для проверки на ошибки типов несмотря на то что система типов - динамическая
Насчет глобалов подумаю.
 

monobogdan

Новичок
Автор темы
64
3
Скажи мне одно. Зачем ты занимаешься некрофилией?
Та бейсик тут не причем.
Да и к тому же, что мне мешает заниматься "некрофилией", тем более бэйсик крайне простой и понятный язык, я думаю что многие кто неосилил клео осилят бэйсик в силу его простоты.
Кто то не согласится?
 

monobogdan

Новичок
Автор темы
64
3
Я мог бы написать и компилятор tinyc -> scm, только зачем?
Все равно тут никто tinyc не знает :D
 

Dark_Knight

Me, me and me.
Друг
4,085
2,114
Я не соглашусь. Луа получше бейсика будет. Если уже его брать, как первый ЯП, он куда лучше. Так же имеет ООП.
 

monobogdan

Новичок
Автор темы
64
3
Я не соглашусь. Луа получше бейсика будет. Если уже его брать, как первый ЯП, он куда лучше. Так же имеет ООП.
У луа порог входа выше.
К тому же для луа придется ставить мунлоадер.
Как первый яп надо брать нативные языки а не скриптовые(C# в данном случае например тоже нативный).
VB6, VB.net тоже имеет ООП, при этом куда более крутое чем в lua, только зачем в скриптах ООП? :D
В интерпретируемых языках ООП не нужно в силу медлительности(именно поэтому пыху не эмбедят в игры)
И да - в lua ООП через костыли со структурами.
Такое "ООП" заканчивается на аналогах static классов в .net
 
Статус
В этой теме нельзя размещать новые ответы.