Перейти к содержимому


Фотография

Интерпретатор brainfuck

brainfuck interpreter

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 16

#1 Оффлайн   Jakowlew

Jakowlew
  • Пользователи
  • Сообщений: 23
  • Уровень сигнала: 0,03%
  • В игре: 0 час. 17 мин.

Отправлено 12 Март 2018 - 14:29

Brainfuck? Почему бы нет?

Если вы не знаете, что это, то вот ссыль: https://ru.wikipedia.../wiki/Brainfuck

А вот и сам интерпретатор: https://pastebin.com/DVNbB7Rf

Текущая версия: 1.0

 

Документация:

Спойлер

  • Zer0Galaxy, Totoro, Sharplook и 3 другим это нравится

#2 Оффлайн   Totoro

Totoro
  • Хранители Кода
  • Сообщений: 1 740
  • Уровень сигнала: 0,27%
  • В игре: 2 час. 13 мин.

Награды

                                      

Отправлено 12 Март 2018 - 14:36

Надо теперь расширить до NetFuck. =)



#3 Оффлайн   Jakowlew

Jakowlew
  • Автор темы
  • Пользователи
  • Сообщений: 23
  • Уровень сигнала: 0,03%
  • В игре: 0 час. 17 мин.

Отправлено 12 Март 2018 - 15:10

Надо теперь расширить до NetFuck. =)

Ой как не хочется мучаться с сетью и параллельным выполнением. Я по фану написал за 20 минут интерпретатор brainfuck, чтобы запустить на нем интерпретатор brainfuck, написанный на brainfuck, а в нем еще один, и еще, и еще. А потом посмотрел, как это все работает, сказал себе "малаца" и запостил сюда :)



#4 Оффлайн   LeshaInc

LeshaInc
  • Пользователи
  • Сообщений: 1 212
  • Уровень сигнала: 14,48%
  • В игре: 117 час. 41 мин.
  • ГородЛуна

Награды

                       

Отправлено 12 Март 2018 - 17:13

А теперь сделай JIT-компилятор.



#5 Оффлайн   qwertyMAN

qwertyMAN
  • Пользователи
  • Сообщений: 1 438
  • Уровень сигнала: 0,13%
  • В игре: 1 час. 3 мин.
  • ГородCity17

Награды

                             

Отправлено 12 Март 2018 - 17:16

Надо теперь расширить до NetFuck. =)

@Totoro надо теперь расширить до FuckTheSystem


  • LeshaInc это нравится

#6 Оффлайн   Jakowlew

Jakowlew
  • Автор темы
  • Пользователи
  • Сообщений: 23
  • Уровень сигнала: 0,03%
  • В игре: 0 час. 17 мин.

Отправлено 12 Март 2018 - 22:16

А теперь сделай JIT-компилятор.

Можно сделать транслятор в Си код, который потом компилируется, вопрос в том, насколько это надо. Код все же для опенкомпов писался



#7 Оффлайн   Zer0Galaxy

Zer0Galaxy
  • Гуру
  • Сообщений: 1 229
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Награды

   5                              

Отправлено 14 Март 2018 - 10:02

  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

Вспомнился анекдот:

 

 

Если выпадет орел, идем пить пиво, если решка – идем в кино, а если монета встанет на ребро, то пойдем учиться.

  • Alex, Fingercomp, Sharplook и 2 другим это нравится

#8 Оффлайн   Totoro

Totoro
  • Хранители Кода
  • Сообщений: 1 740
  • Уровень сигнала: 0,27%
  • В игре: 2 час. 13 мин.

Награды

                                      

Отправлено 14 Март 2018 - 14:22

Чисто технически - там есть четвёртый вариант.
Это когда errorCode содержит не число, а какой-нибудь boolean или вообще nil.

Но в ветку "Unknown error" этот случай всё равно не попадёт, потому что Lua выбросит ошибку на попытке сравнить переменную с нулём.



#9 Оффлайн   Jakowlew

Jakowlew
  • Автор темы
  • Пользователи
  • Сообщений: 23
  • Уровень сигнала: 0,03%
  • В игре: 0 час. 17 мин.

Отправлено 14 Март 2018 - 14:29

Чисто технически - там есть четвёртый вариант.
Это когда errorCode содержит не число, а какой-нибудь boolean или вообще nil.

Но в ветку "Unknown error" этот случай всё равно не попадёт, потому что Lua выбросит ошибку на попытке сравнить переменную с нулём.

Разве? Вроде nil трактуется как ложное значение, и результат операций с ним будет всегда ложный, нет?



#10 Оффлайн   Fingercomp

Fingercomp
  • Гуру
  • Сообщений: 2 006
  • Уровень сигнала: 157,38%
  • В игре: 1279 час. 4 мин.

Награды

                                               

Отправлено 14 Март 2018 - 14:35

Числовые операции (например, операторы <, >, +, *, ...) бросают ошибку, если скормишь им nil.

Сообщение отредактировал Fingercomp: 14 Март 2018 - 14:35


#11 Оффлайн   LeshaInc

LeshaInc
  • Пользователи
  • Сообщений: 1 212
  • Уровень сигнала: 14,48%
  • В игре: 117 час. 41 мин.
  • ГородЛуна

Награды

                       

Отправлено 14 Март 2018 - 16:48

NaN не равен, не больше и не меньше любого числа.
  • eu_tomat, ECS и Kartze это нравится

#12 Оффлайн   ECS

ECS
  • Гуру
  • Сообщений: 204
  • Уровень сигнала: 0,51%
  • В игре: 4 час. 10 мин.
  • ГородСанкт-Петербург

Награды

   10                  

Отправлено 14 Март 2018 - 16:58

Все он правильно сделал, гипотетически четвертый вариант возможен:

 

ABxLg5s.png


  • eu_tomat это нравится

#13 Оффлайн   Jakowlew

Jakowlew
  • Автор темы
  • Пользователи
  • Сообщений: 23
  • Уровень сигнала: 0,03%
  • В игре: 0 час. 17 мин.

Отправлено 14 Март 2018 - 17:59

Все он правильно сделал, гипотетически четвертый вариант возможен:

 

ABxLg5s.png

Вот, спасибо. Я забыл. nil выкидывает ошибку, я имел в виду NaN.



#14 Оффлайн   Totoro

Totoro
  • Хранители Кода
  • Сообщений: 1 740
  • Уровень сигнала: 0,27%
  • В игре: 2 час. 13 мин.

Награды

                                      

Отправлено 15 Март 2018 - 10:25

inf и nan это уже пятый вариант =)
И с ними - да, проблем не будет.

Проблемы будут если в код ошибки попадёт нечисловой тип, а-ля string.
Но это я уже докапываюсь, исходя из гипотетического предположения, что автор кода решил сделать 100% покрытие всех возможных случаев.


Сообщение отредактировал Totoro: 15 Март 2018 - 10:27


#15 Оффлайн   evgkul

evgkul
  • Пользователи
  • Сообщений: 369
  • Уровень сигнала: 0,59%
  • В игре: 4 час. 49 мин.

Награды

     

Отправлено 15 Март 2018 - 13:34

Есть ещё метатаблицы...



#16 Оффлайн   Totoro

Totoro
  • Хранители Кода
  • Сообщений: 1 740
  • Уровень сигнала: 0,27%
  • В игре: 2 час. 13 мин.

Награды

                                      

Отправлено 15 Март 2018 - 16:58

Есть ещё метатаблицы...

 

Но метатаблица в плане типов данных - просто table, разве нет?
Это покрывается четвёртым случаем =)



#17 Оффлайн   Fingercomp

Fingercomp
  • Гуру
  • Сообщений: 2 006
  • Уровень сигнала: 157,38%
  • В игре: 1279 час. 4 мин.

Награды

                                               

Отправлено 15 Март 2018 - 17:07

Но метатаблица в плане типов данных - просто table, разве нет?
Это покрывается четвёртым случаем =)

В ней можно поведение при сравнении переопределять.

if setmetatable({value = 4}, {__lt = function(self, other)
      return self.value < other
    end}) < 5 then
  print("It works, unexpectedly.")
end

  • Totoro, Doob и eu_tomat это нравится




Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных