Skip to content

Ict00/litProj

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LitICON


The Lit 'Degradation' Language

Lit (Лит) - Это язык программирования, компилируемый в JSON.

Правила операторов

  1. Должен быть один, и только один оператор на каждой строке.
  2. Некоторые операторы (типа writestr и writenum) могут писаться раздельно (т.е. write ... str, write ... num).
  3. Операторы могут находиться в любом месте строке.

Память

Память в Lit'е своеобразна. Есть три зарезервированных 'стека' памяти: main, outstr и outnum. main нужен для непосредственно самой программы, outstr для вывода строк и outnum для вывода чисел. Два последних 'стека' очищаются после выполнения каждой строки

Есть также и временная память. С ней и взаимодействует большинство операторов. Временная память НЕ зависит от текущего, выбранного стека памяти.

Типы

В Lit'е есть лишь три типа данных: Number, String (преобразуется в Number), Identifier (Идентификатор)

Операторы

Операторов в Lit'е довольно много и их достаточно для большинства задач:

Название Необходимые аргументы Типы аргументов Предназначение
declare Название нового стека памяти Identifier Объявляет новый стек памяти
sleep Количество секунд Number Ждёт указанное количество секунд
tpop ALL/Адреса Identifier/Number.. Выталкивает значения из текущего стека памяти во временную память по адресам/все, если указан ALL
pull ALL/Адреса Identifier/Number.. Берёт значения из текущего стека памяти во временную память по адресам/все, если указан ALL
add Адрес 1/Адрес 2 Number, Number Берёт значения из временной памяти по адресам и складывает их, добавляя результат во временную память вместо аргументов
sub Адрес 1/Адрес 2 Number, Number Берёт значения из временной памяти по адресам и вычитает одно из другого, добавляя результат во временную память вместо аргументов
mul Адрес 1/Адрес 2 Number, Number Берёт значения из временной памяти по адресам и перемножает их, добавляя результат во временную память вместо аргументов
div Адрес 1/Адрес 2 Number, Number Берёт значения из временной памяти по адресам и делит одно на другое, добавляя результат во временную память вместо аргументов
mod Адрес 1/Адрес 2 Number, Number Берёт значения из временной памяти по адресам и добавляет остаток от деления во временную память вместо аргументов
inp Сообщение при вводе/Ничего String/None Ждёт ввод пользователя, после чего записывает его во временную память. Пытается преобразовать в int'ы, если не получается - пишет ввод посимвольно, кодируя каждый символ в UTF-8
mergewith Стек1/THIS, Стек2/THIS Identifier, Identifier Добавляет в стек2 значения из стека 1. Кл. слово THIS обозначает текущий стек
rawmergewith Стек1/THIS, Стек2/THIS Identifier, Identifier Перетаскивает в стек2 значения из стека 1. Кл. слово THIS обозначает текущий стек
mforward Стек, Адреса/ALL Identifier, Number../Identifier Добавляет значения из текущего стека в указанный, по адресам/все, если указан ALL
forward Стек, Адреса/ALL Identifier, Number../Identifier Добавляет значения из временной памяти в указанный стек, по адресам/все, если указан ALL
push (Стек, Адреса/ALL)/(SOFT, Адреса) (Identifier, Number..)/(Identifier, Number..) Перетаскивает значения из временной памяти в текущий стек (убирая их из временной памяти) по адресам/все, если указан ALL; с SOFT просто добавляет значения из временной памяти в стек по адресам, ALL не поддерживается
cloneto Стек1, Стек2 Identifier, Identifier Копирует память первого стека во второй, с полной заменой
tdel Адреса/ALL Number.., Identifier Удаляет значения из временной памяти по адресам/все, если указан ALL
mdel Адреса/ALL Number.., Identifier Удаляет значения из текущего стека по адресам/все, если указан ALL
ddel Стек Identifier Удаляет стек памяти
writestr Строка String Пишет строку во временную память, кодируя каждый символ в UTF-8
writenum Числа Number Пишет число во временную память
mark Что угодно - Делает ничего
pair Адреса+Значения Number.. Добавляет во временную память значения по адресам попарно (т.е. 0 1 2 pair 33 34 35 запишет во временную память 33 по адресу 0, 34 по адресу 1, 35 по адресу 2)
run Подпрограмма Identifier Запускает подпрограмму по названию (Подробнее ниже)
pycall Любая Python операция String Выполняет указанную операцию, если возвращаемый тип dict, list, int, str или None
equit - - Выход из программы
lif Адрес на число, которое 0/1 Number Если значение по адресу равно 1, то выполнение программы продолжится, если равно нулю, то следующий оператор будет пропущен
use Стек Identifier Переключает текущий стек на указанный
goto Строка Number Переходит на указанную строку кода

Логические Операторы

В Lit'е есть так же и логические операторы, некоторые из них интуитивно понятны. Все из них принимают два адреса, участвующие в сравнении (Исключение: '!'. Он принимает лишь 1 адрес, функционирует так же, как и во многих других языках)

Название
>=
<=
==
!=
>
<

Для сравнения строк же есть отдельные операторы: ='= и !'=, равен и не равен соответственно

='= Принимает начальный адрес текущего стека памяти и строку, и сравнивает их !'= Работает как ='= + !

Сборка / Запуск / Линкование

Собрать код, написанный на Lit'е можно несколькими способами:

  1. python lit.py -d файл.lit Для непосредственного запуска
  2. python lit.py -c файл.lit Запустить программу и создаст .json файл, который можно также запустить: python lit.py -r файл.json
  3. python lit.py -b файл.lit Для сборки кода на Lit в .json файл

Для того, чтобы можно было использовать оператор run, нужно собрать несколько файлов с кодом Lit, после чего их слинковать:

python lit.py -l файл1.json файл2.json..

Все файлы, кроме файл1.json - удалятся для того, чтобы не засорять место. Теперь можно использовать оператор run, в котором первый аргумент - это название файла без расширения.

About

No description or website provided.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Contributors 2

  •  
  •  

Languages