gta sa compiler

Тема в разделе "Другое", создана пользователем monobogdan, 4 янв 2017.

Статус темы:
Закрыта.
  1. monobogdan

    monobogdan Известный пользователь

    Регистрация:
    26.12.16
    Сообщения:
    66
    Лайки:
    1
    Репутация:
    1
    Написал компилятор небольшого подмножества 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.
    Сырки на гитхабе.
     
    #1
  2. Dark_Knight

    Dark_Knight РКН Тян на страже твоей анальной девственности.
    Друг

    Регистрация:
    18.03.13
    Сообщения:
    2.387
    Лайки:
    687
    Репутация:
    204
    Луа слабо заюзать?
     
    #2
  3. monobogdan

    monobogdan Известный пользователь

    Регистрация:
    26.12.16
    Сообщения:
    66
    Лайки:
    1
    Репутация:
    1
    Причем тут луа то?
    Это вообще новый ЯП предназначенный для GTA SA :)
    Если имелась ввиду трансляция в луа для moonloader - то нах мне нужны зависимости, когда cleo у каждого второго игрока стоит а moonloader в основном у игроков в самп
     
    #3
  4. Dark_Knight

    Dark_Knight РКН Тян на страже твоей анальной девственности.
    Друг

    Регистрация:
    18.03.13
    Сообщения:
    2.387
    Лайки:
    687
    Репутация:
    204
    Мунлоадер не зависит от клео, а как понял твой бейсик, который на сколько мне известно "мертвый" язык и смысла от него нет. Хотя работа твоя интересна.
     
    #4
  5. SR_team

    SR_team BH Team
    BH Team

    Регистрация:
    26.10.13
    Сообщения:
    2.621
    Лайки:
    1.577
    Репутация:
    421
    очко бы тебе порвать за использование глобальных переменных
     
    #5
  6. monobogdan

    monobogdan Известный пользователь

    Регистрация:
    26.12.16
    Сообщения:
    66
    Лайки:
    1
    Репутация:
    1
    Та бейсик тут не причем.
    Это просто изи язык для облегчения кодинга модов для gta sa
    И да - мунлодер имплементит же какие то опкоды клео вроде?
    А тебе, петушку, я смотрю уже порвали?
     
    #6
  7. 4el0ve4ik

    4el0ve4ik Дилер картошки
    Друг

    Регистрация:
    12.11.15
    Сообщения:
    1.294
    Лайки:
    372
    Репутация:
    97
    Мунлоадер не будет зависить от клео, Фип работает над этим, что бы переписать тоже время нужно знаете ли.
     
    #7
  8. Dark_Knight

    Dark_Knight РКН Тян на страже твоей анальной девственности.
    Друг

    Регистрация:
    18.03.13
    Сообщения:
    2.387
    Лайки:
    687
    Репутация:
    204
    Ты на тима не гони. Он прав, что насчет того, что ты юзаешь глобальные переменные. Их вообще нельзя юзать, кроме двух $player_actor & $player_char. Так что твой интерпретатор гавно в работе при больше 32 локальных переменных и плюс еще 2 переменные таймеры.
     
    #8
  9. monobogdan

    monobogdan Известный пользователь

    Регистрация:
    26.12.16
    Сообщения:
    66
    Лайки:
    1
    Репутация:
    1
    Я вот думаю что стоит делать не транслятор в сырки клео а прямой компилятор в .scm.
    В CLEO очень много костылей которые мешают сделать высокоуровщину
     
    #9
  10. Dark_Knight

    Dark_Knight РКН Тян на страже твоей анальной девственности.
    Друг

    Регистрация:
    18.03.13
    Сообщения:
    2.387
    Лайки:
    687
    Репутация:
    204
    Скажи мне одно. Зачем ты занимаешься некрофилией?
     
    #10
  11. monobogdan

    monobogdan Известный пользователь

    Регистрация:
    26.12.16
    Сообщения:
    66
    Лайки:
    1
    Репутация:
    1
    *компилятор.
    Интерпретирует он только переменные во время компиляции для проверки на ошибки типов несмотря на то что система типов - динамическая
    Насчет глобалов подумаю.
     
    #11
  12. monobogdan

    monobogdan Известный пользователь

    Регистрация:
    26.12.16
    Сообщения:
    66
    Лайки:
    1
    Репутация:
    1
    Да и к тому же, что мне мешает заниматься "некрофилией", тем более бэйсик крайне простой и понятный язык, я думаю что многие кто неосилил клео осилят бэйсик в силу его простоты.
    Кто то не согласится?
     
    #12
  13. monobogdan

    monobogdan Известный пользователь

    Регистрация:
    26.12.16
    Сообщения:
    66
    Лайки:
    1
    Репутация:
    1
    Я мог бы написать и компилятор tinyc -> scm, только зачем?
    Все равно тут никто tinyc не знает :D
     
    #13
  14. Dark_Knight

    Dark_Knight РКН Тян на страже твоей анальной девственности.
    Друг

    Регистрация:
    18.03.13
    Сообщения:
    2.387
    Лайки:
    687
    Репутация:
    204
    Я не соглашусь. Луа получше бейсика будет. Если уже его брать, как первый ЯП, он куда лучше. Так же имеет ООП.
     
    #14
  15. monobogdan

    monobogdan Известный пользователь

    Регистрация:
    26.12.16
    Сообщения:
    66
    Лайки:
    1
    Репутация:
    1
    У луа порог входа выше.
    К тому же для луа придется ставить мунлоадер.
    Как первый яп надо брать нативные языки а не скриптовые(C# в данном случае например тоже нативный).
    VB6, VB.net тоже имеет ООП, при этом куда более крутое чем в lua, только зачем в скриптах ООП? :D
    В интерпретируемых языках ООП не нужно в силу медлительности(именно поэтому пыху не эмбедят в игры)
    И да - в lua ООП через костыли со структурами.
    Такое "ООП" заканчивается на аналогах static классов в .net
     
    #15
  16. monobogdan

    monobogdan Известный пользователь

    Регистрация:
    26.12.16
    Сообщения:
    66
    Лайки:
    1
    Репутация:
    1
    #16
  17. mac

    mac ща как ебну копытом
    Друг

    Регистрация:
    06.09.14
    Сообщения:
    1.312
    Лайки:
    787
    Репутация:
    41
    СЕЙЧАС БЫ НЕ ОСИЛИТЬ КЛЕО KURWA :sad_frog::sad_frog::sad_frog::sad_frog:
     
    #17
  18. NarutoUA

    NarutoUA C++ Hokage developer
    BH Team

    Регистрация:
    26.05.13
    Сообщения:
    584
    Лайки:
    665
    Репутация:
    305
    Бэйсик и паскаль - самые отвратительные языки на которых я видел (и юзал). Уж лучше бы сделал апи для плагинов на С#

    я чот тоже в своё время не осилил клео (и щас нихуая не понимаю) и начал писать на С++
     
    #18
    Последнее редактирование: 4 янв 2017
  19. SR_team

    SR_team BH Team
    BH Team

    Регистрация:
    26.10.13
    Сообщения:
    2.621
    Лайки:
    1.577
    Репутация:
    421
    Я в 7 классе очень плохо осилил бейсик, но в 11 классе очень хорошо осилил клео, а бейсик доосиливал уже в вузе
     
    #19
  20. monobogdan

    monobogdan Известный пользователь

    Регистрация:
    26.12.16
    Сообщения:
    66
    Лайки:
    1
    Репутация:
    1
    нетхук уже пишу параллельно с компилятором.
     
    #20
Статус темы:
Закрыта.