Jakowlew 11 Опубликовано: 12 марта, 2018 Brainfuck? Почему бы нет? Если вы не знаете, что это, то вот ссыль: https://ru.wikipedia.org/wiki/Brainfuck А вот и сам интерпретатор: https://pastebin.com/DVNbB7Rf Текущая версия: 1.0 Документация: -- Создать экземпляр интерпретатора -- Входной параметр - строка с brainfuck кодом b = bf:new("++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.") -- Запустить код -- Вовзращает строку с ошибкой, если она произошла b:run() -- Проверить код на валидность. Код валиден, если вовзращенное значение == 0 valid = b:validate() -- Получить строку с ошибкой, код которой вовзращает bf:validate() str = b:getError(valid) -- bf:run вызывает bf:validate() и bf:getError() внутри себя -- Поэтому не надо проверять код на валидность самостоятельно 6 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 12 марта, 2018 Надо теперь расширить до NetFuck. =) 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Jakowlew Автор темы 11 Опубликовано: 12 марта, 2018 Надо теперь расширить до NetFuck. =) Ой как не хочется мучаться с сетью и параллельным выполнением. Я по фану написал за 20 минут интерпретатор brainfuck, чтобы запустить на нем интерпретатор brainfuck, написанный на brainfuck, а в нем еще один, и еще, и еще. А потом посмотрел, как это все работает, сказал себе "малаца" и запостил сюда 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
LeshaInc 625 Опубликовано: 12 марта, 2018 А теперь сделай JIT-компилятор. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
qwertyMAN 1 723 Опубликовано: 12 марта, 2018 Надо теперь расширить до NetFuck. =) @@Totoro надо теперь расширить до FuckTheSystem 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Jakowlew Автор темы 11 Опубликовано: 12 марта, 2018 А теперь сделай JIT-компилятор. Можно сделать транслятор в Си код, который потом компилируется, вопрос в том, насколько это надо. Код все же для опенкомпов писался 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zer0Galaxy 2 187 Опубликовано: 14 марта, 2018 if errorCode == 0 then return "Code is valid" elseif errorCode > 0 then return "Error: Opening bracket(s) missing" elseif errorCode < 0 then return "Error: Closing bracket(s) missing" else return "Error: Unknown error" end Вспомнился анекдот: Если выпадет орел, идем пить пиво, если решка – идем в кино, а если монета встанет на ребро, то пойдем учиться. 5 1 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 14 марта, 2018 Чисто технически - там есть четвёртый вариант.Это когда errorCode содержит не число, а какой-нибудь boolean или вообще nil. Но в ветку "Unknown error" этот случай всё равно не попадёт, потому что Lua выбросит ошибку на попытке сравнить переменную с нулём. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Jakowlew Автор темы 11 Опубликовано: 14 марта, 2018 Чисто технически - там есть четвёртый вариант. Это когда errorCode содержит не число, а какой-нибудь boolean или вообще nil. Но в ветку "Unknown error" этот случай всё равно не попадёт, потому что Lua выбросит ошибку на попытке сравнить переменную с нулём. Разве? Вроде nil трактуется как ложное значение, и результат операций с ним будет всегда ложный, нет? 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Fingercomp 4 409 Опубликовано: 14 марта, 2018 (изменено) Числовые операции (например, операторы <, >, +, *, ...) бросают ошибку, если скормишь им nil. Изменено 14 марта, 2018 пользователем Fingercomp 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
LeshaInc 625 Опубликовано: 14 марта, 2018 NaN не равен, не больше и не меньше любого числа. 3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ECS 1 903 Опубликовано: 14 марта, 2018 Все он правильно сделал, гипотетически четвертый вариант возможен: 1 1 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Jakowlew Автор темы 11 Опубликовано: 14 марта, 2018 Все он правильно сделал, гипотетически четвертый вариант возможен: Вот, спасибо. Я забыл. nil выкидывает ошибку, я имел в виду NaN. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 15 марта, 2018 (изменено) inf и nan это уже пятый вариант =)И с ними - да, проблем не будет. Проблемы будут если в код ошибки попадёт нечисловой тип, а-ля string.Но это я уже докапываюсь, исходя из гипотетического предположения, что автор кода решил сделать 100% покрытие всех возможных случаев. Изменено 15 марта, 2018 пользователем Totoro 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
evgkul 571 Опубликовано: 15 марта, 2018 Есть ещё метатаблицы... 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 15 марта, 2018 Есть ещё метатаблицы... Но метатаблица в плане типов данных - просто table, разве нет? Это покрывается четвёртым случаем =) 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Fingercomp 4 409 Опубликовано: 15 марта, 2018 Но метатаблица в плане типов данных - просто table, разве нет? Это покрывается четвёртым случаем =) В ней можно поведение при сравнении переопределять. if setmetatable({value = 4}, {__lt = function(self, other) return self.value < other end}) < 5 then print("It works, unexpectedly.") end 3 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Griffi 17 Опубликовано: 21 июля, 2021 А почему не рекомпилятор в код lua? Так гораздо быстрее, но есть один минус - большие программы не работают; слишком большой размер блока получается даже со всеми оптимизациями. Я таких уже 3 написал, первый кривой, второй норм , а третий с поддержкой модов, кучей бесполезных фич и даже с графикой) 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 154 Опубликовано: 21 июля, 2021 4 часа назад, Griffi сказал: А почему не рекомпилятор в код lua? Так гораздо быстрее, но есть один минус - большие программы не работают; слишком большой размер блока получается даже со всеми оптимизациями. Я таких уже 3 написал, первый кривой, второй норм , а третий с поддержкой модов, кучей бесполезных фич и даже с графикой) О чём этот пост? Что такое рекомпилятор? Что он делает? Что гораздо быстрее? Что за блоки большого размера? О каких модах идёт речь? И какое отношение ко всему этому имеет графика? 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах