![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#1
|
|
![]() Яблочный произвол! Сообщений: 11 080 Спасибо сказали: 3988 раз ![]() |
Это простой стековый интерпретируемый язык. Изначально задумывался как скриптовый язык для Мегамейза.
Краткое описание: В системе есть три элемента: очередь команд, стек параметров и список переменных. Код представляется в виде слов(команд), разделенных пробелами, табуляцией или переводом строки. Интерпретатор обрабатывает команды из очереди. Большинство команд действуют на стек. Переменные добавлены для удобства. Переменные не имеют типа и не требуют объявления. Переменная начинает существовать с момента первого присвоения. Иногда значение должно быть числовым. Для этого оно должно быть следующего вида: целаячасть.дробнаячасть Дробная часть может отсутствовать. Точка может присутствовать даже без дробной части. Перед числом может быть минус, но никак не плюс. Команды: Код [ ] - содержимое записывается в стек. Внутри допустимы любые символы. Предполагается что это будущий набор команд - квадратные скобки внутри проходят проверку на правильность. Имена переменных для операции присваивания нужно записывать в таких скобках (но можно и в кавычках). Строка " " - содержимое записывается в стек. Внутри допустимы любые символы кроме кавычек. Предполагается, что это просто строка. Никаких проверок нет. Арифметические операции +,-,*,/ - принимают два числа из стека в качестве параметров. В стек помещают результат. Очистка ; - очищает стек. Вызов call - транслирует содержимое вершины стека в последовательность команд и помещает в начало очереди команд (таким образом следующая команда будет именно из этой новой последовательности). Выбор if - забирает из стека три параметра. В порядке вынимания из стека: блок "иначе", блок "если", значение. Если значение не равно 0, то выполняет блок "если", иначе - блок "иначе". Цикл while - берет с вершины стека тело цикла. Перед каждой итерацей берет значение с вершины стека и проверяет. Если это не 0, то выполняет тело цикла. Иначе выходит из цикла. Операции сравнения =,!=,>=,<=,>,< - сравнивают два значения с вершины стека. Если хотя бы одно из них не число, то производится сравнение строк. Если значения равны, в стек кладется 1, иначе - 0. Операция присвоения := - берет из стека значение и имя переменной. Присваивает переменной с этим именем значение. Конкатенация . - присоединяет значение в вершине стека к предыдущему. Вывод msg - забирает значение из вершины стека и выводит его на экран. После этого переводит строку. Копирование dup - помещает в стек значение в его вершине, сохраняя старое. Обмен swap - меняет местами два верхних значения в стеке. Разделение \ - забирает с вершины стека число и строку. От конца строки отделяет количество символов, равное этому числу, и помещает полученные части строки в стек. Повторение repeat - забирает с вершины стека количество повторений и тело цикла и исполняет тело цикла количество раз, равное количеству повторений. Циклические сдвиги rol, ror - забирают с вершины стека число и циклически сдвигают верхние элементы стека, количество которых равно взятому числу. При этом ror сдвигает элементы по направлению к вершине стека. Циклические сдвиги rola, rora - аналогичны rol и ror, но не принимают параметров и сдвигают весь стек. Получить код символа ? - берет с вершины стека символ и помещает в стек код ASCII этого символа. Получить символ # - берет с вершины стека число и помещает в стек символ с кодом ASCII, равным этому числу по модулю 256. Длина len - помещает в стек количество символов в строке на вершине стека. Получить количество count - помещает в стек количество элементов стека. Удаление drop - удаляет элемент на вершине стека. Отличные от этих слова сначала проверяются на принадлежность к числам, потом - к переменным. В обоих случаях значение числа или переменной помещается в стек. (Внимание! Следующая запись (без кавычек) не имеет смысла: "var_name 1 :=". Правильно: "[var_name] 1 :=" (без кавычек)) Все остальные слова выдадут ошибку. Классические конструкции: Присваивание: Код [var_name] value := Отрицание: Код 0 swap - Получение указателя: Код [pointer] [var_name] := Обращение по указателю (получение значения в var_name): Код pointer call Объявление функции: Код [foo] ["Hello, world!" msg] := Вызов функции: Код foo call Примеры: Привет, мир! Код "Hello, world!" msg Факториал с помощью рекурсии Код [fact] [dup 1 - dup 1 = [] [fact call *] if] := 5 fact call msg Факториал с помощью цикла Код [i] 5 := i 1 [[i] i 1 - := i * i 1 !=] while msg Число Фиббоначи Код [fib] [dup 1 > [1 - dup 1 - fib call swap fib call +] [] if] := 9 fib call msg Куайн Код [s] ["[ s ] [" s "] := s call msg" . .] := s call msg Программа запускается из командной строки с одним параметром: именем файла исходного кода. Можно перетащить файл с исходным кодом на значок программы. Скачать Release Candidate 2 История версий:
|
|
|
![]()
Сообщение
#2
|
|
![]() 😸🧡✊✌️ Сообщений: 16 366 Спасибо сказали: 3187 раз ![]() |
Наверняка мощный ЯП, жаль, интерпретатор нагло требует какую-то "MSVCR90.DLL".
-------------------- Я слежу за тобой!
![]() ![]() Цитата Всегда приятно осознавать, что кто-то делает что-то хуже, чем делал бы ты, если бы умел. Борис "Бонус" Репетур, "От винта!", выпуск 38. |
|
|
![]()
Сообщение
#3
|
|
![]() Яблочный произвол! Сообщений: 11 080 Спасибо сказали: 3988 раз ![]() |
тебе показалось
|
|
|
![]()
Сообщение
#4
|
|
![]() 🐓🐓🐓🐓🐓🐓🐓 Сообщений: 1 845 Спасибо сказали: 1570 раз ![]() |
запустил "факториал", только выводится какая-то точка после цифры (
-------------------- using namespace fbx;
|
|
|
![]()
Сообщение
#5
|
|
![]() Яблочный произвол! Сообщений: 11 080 Спасибо сказали: 3988 раз ![]() |
это часть числа.
Добавлено ([mergetime]1275540048[/mergetime]): в интерпретаторе они конвертятся в double и назад |
|
|
![]()
Сообщение
#6
|
|
![]() 🐓🐓🐓🐓🐓🐓🐓 Сообщений: 1 845 Спасибо сказали: 1570 раз ![]() |
хмхм а может предусмотреть отдельно целочисленные операции для 8, 16 и 32-разрядных как бы?
-------------------- using namespace fbx;
|
|
|
![]()
Сообщение
#7
|
|
![]() Яблочный произвол! Сообщений: 11 080 Спасибо сказали: 3988 раз ![]() |
а, собственно, зачем (кроме логических)?
|
|
|
![]()
Сообщение
#8
|
|
![]() 🐓🐓🐓🐓🐓🐓🐓 Сообщений: 1 845 Спасибо сказали: 1570 раз ![]() |
переполнение, деление нацело или с остатком. Ну и логические. Плюс - вещественные допускают погрешности. Причем тут они какие-то жесткие очень - например факториал от 60..
-------------------- using namespace fbx;
|
|
|
![]()
Сообщение
#9
|
|
![]() Яблочный произвол! Сообщений: 11 080 Спасибо сказали: 3988 раз ![]() |
вообще-то 60! - это
83209871127413901442763411832233643807541726063612459524492776964096000000000000 00 ты хочешь чтобы я реализовал длинную арифметику? |
|
|
![]()
Сообщение
#10
|
|
![]() 🐓🐓🐓🐓🐓🐓🐓 Сообщений: 1 845 Спасибо сказали: 1570 раз ![]() |
да зачем длинную... просто целочисленную обычную
-------------------- using namespace fbx;
|
|
|
![]()
Сообщение
#11
|
|
![]() Яблочный произвол! Сообщений: 11 080 Спасибо сказали: 3988 раз ![]() |
ну у тебя же претензии к факториалу 60
|
|
|
![]()
Сообщение
#12
|
|
![]() В миру GrayFace Сообщений: 2 529 Спасибо сказали: 817 раз ![]() |
Для Megamaze лучше использовать Lua.
-------------------- ДНК банана на 50% состоит из человека.
|
|
|
![]()
Сообщение
#13
|
|
![]() Immortal Сообщений: 1 468 Спасибо сказали: 1153 раза ![]() |
Для всего в мире лучше использовать Lua!
-------------------- |
|
|
![]()
Сообщение
#14
|
|
![]() Яблочный произвол! Сообщений: 11 080 Спасибо сказали: 3988 раз ![]() |
sergroj, добавь поддержку Lua в реальность.
|
|
|
![]()
Сообщение
#15
|
|
Immortal Сообщений: 1 464 Спасибо сказали: 1194 раза ![]() |
gamecreator, плес, составь описание для сайта МутноСофта без спойлеров и тэга кода, а то при рипе кода страницы все остальные страницы на сайте слетают.
-------------------- Совсем скоро сайт МутноСофт будет, мб, обновлен.
Статья про защиту icq от взлома одобрена псехом. И вот идеи для сайтов хорошие очень. |
|
|
![]()
Сообщение
#16
|
|
![]() Яблочный произвол! Сообщений: 11 080 Спасибо сказали: 3988 раз ![]() |
да спойлеры это для форума. их можно смело убирать. а код просто выделить отступом и шрифтом.
кстати, название языка в следующей версии может измениться. |
|
|
![]()
Сообщение
#17
|
|
![]() Яблочный произвол! Сообщений: 11 080 Спасибо сказали: 3988 раз ![]() |
вышла новая версия
Добавлено ([mergetime]1277053149[/mergetime]): подробности в первом сообщении темы |
|
|
![]()
Сообщение
#18
|
|
![]() •●Revolucionario●• Сообщений: 2 467 Спасибо сказали: 5936 раз ![]() |
Хм, ну вот и название появилось - может уже можно приступить к реализации идеи с анонсами ?
-------------------- life MOV.I #life+1, *life
האם יש זמן לעצור ? |
|
|
![]()
Сообщение
#19
|
|
![]() Яблочный произвол! Сообщений: 11 080 Спасибо сказали: 3988 раз ![]() |
Анонс номер 1: будут коменты и считывание данных, а может даже и файлы
|
|
|
![]() ![]() |
Текстовая версия | Сейчас: 29 June 2025 - 00:14 |
Copyright by Алексей Крючков
![]() Programming by Degtyarev Dmitry |
|