Язык Brainfuck. Технология разработки программного обеспечения

Содержание

Слайд 2

Язык Brainfuck

Для понимания языка и удобства программирования лучше всего использовать визуализатор https://fatiherikli.github.io/brainfuck-visualizer
Brainfuck

Язык Brainfuck Для понимания языка и удобства программирования лучше всего использовать визуализатор
это эзотерический язык программирования; он разработан для исследования границ возможностей языков программирования, для доказательства утверждения, для искусства, для юмора.

Слайд 3

Язык Brainfuck

Автор Урбан Мюллер, 1993 год. Язык имеет 8 команд, каждая записывается

Язык Brainfuck Автор Урбан Мюллер, 1993 год. Язык имеет 8 команд, каждая
1 символом. Исходный код программы это последовательность символов без синтаксиса. Компилятор Brainfuck занимает примерно 200 байт.
Подробно https://ru.wikipedia.org/wiki/Brainfuck

Слайд 4

Язык Brainfuck

Brainfuck управляет "машиной", которая состоит из упорядоченного набора ячеек и указателя

Язык Brainfuck Brainfuck управляет "машиной", которая состоит из упорядоченного набора ячеек и
на текущую ячейку. Язык имеет тьюринговую полноту, т.е. Brainfuck полноценный язык программирования.

Сумрачный гений

Слайд 5

Правила языка

1) Одна ячейка = 1 байт
2) На старте 30,000 ячеек
3) Старт

Правила языка 1) Одна ячейка = 1 байт 2) На старте 30,000
это крайняя левая позиция
4) Ввод и вывод идет ASCII-кодом
5) Число 1 будет записано как 0х31 (49)
6) Если в ячейке находится 0х41 (65), то на экран выведется символ «A» (большая английская буква А)

Слайд 6

Команды языка

> перейти к следующей ячейке
< перейти к предыдущей ячейке
+ увеличить значение в

Команды языка > перейти к следующей ячейке + увеличить значение в ячейке
ячейке на 1
- уменьшить значение в ячейке на 1
. напечатать значение из текущей ячейки
, ввести значение и сохранить его в ячейке
[ цикл: если текущее значение ячейки = 0, то
перейти на ] (нет захода в цикл)
] цикл: если текущее значение ячейки !=0, то
перейти назад на [ (на начало цикла)

Слайд 7

Примеры

Примеры

Слайд 8

Примеры

Примеры

Слайд 9

Примеры

Как вывести на экран английскую букву «а»?

Примеры Как вывести на экран английскую букву «а»?

Слайд 10

Hello World!

Как вывести на экран Hello World!
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++
.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.
------.--------.>+.>.
Как это все работает? Что обозначают

Hello World! Как вывести на экран Hello World! ++++++++++[>+++++++>++++++++++>+++>+ ++ .>+.+++++++..+++.>++. .+++.
эти плюсики, точки и скобочки?

Слайд 11

Hello World!

Мы хотим вывести строку
Для этого в первые ячейки ленты занесем

Hello World! Мы хотим вывести строку Для этого в первые ячейки ленты
некоторые вспомогательные числа
Зачем нам эти числа?

Слайд 12

Hello World!

Подготовим первые 4 ячейки, занесем туда числа 70, 100, 30, 10
++++++++++

Hello World! Подготовим первые 4 ячейки, занесем туда числа 70, 100, 30,
присваивание ячейке 0 значение 10
[ повторять, пока значение текущей ячейки > нуля
>+++++++ приращение ячейки 1 на 7
>++++++++++ приращение ячейки 2 на 10
>+++ приращение ячейки 3 на 3
>+ приращение ячейки 4 на 1
<<<<- возврат к ячейке 0 и его уменьшение на 1
] вернуться к началу цикла

Слайд 13

Hello World!

А теперь выводим символы
>++. Вывод «Н». Получение кода «H» (72)
>+. Вывод «e». Получение

Hello World! А теперь выводим символы >++. Вывод «Н». Получение кода «H»
кода «e» (101)
+++++++.. Вывод «ll». Получение кода «l» (108)
+++. Вывод «o». Получение кода «o» (111)
>++. Вывод пробела. Получение кода пробела (32)
<<+++++++++++++++. Вывод «W». Получение кода «W» (87)
>. Вывод «o». Код «o» (111)
+++. Вывод «r». Получение кода «r» (114)
------. Вывод «l». Получение кода «l» (108)
--------. Вывод «d». Получение кода «d» (100)
>+. Вывод «!». Получение кода «!» (33)
>. Вывод кода перевода строки (10)

Слайд 15

Релейный компьютер

https://clck.ru/RrkWk

Тоже сумрачный гений

Релейный компьютер https://clck.ru/RrkWk Тоже сумрачный гений

Слайд 16

Функция для вычисления массива скобочек

Массив левых скобок
Массив пар скобок

Пробегаем по коду
Если нашли

Функция для вычисления массива скобочек Массив левых скобок Массив пар скобок Пробегаем
левую скобку

Добавили ее в массив левых скобок

Если нашли правую скобку
Добавили {20:10}
Добавили {10:20}

А вот сложный момент .pop() берет из массива и удаляет из него

Слайд 17

Самый сложный момент

Вот что пришло
Вот что должно уйти

Самый сложный момент Вот что пришло Вот что должно уйти

Слайд 18

Код = парсим(код)

Текущая ячейка
Цикловая ячейка

Массив {ячейка:значение}

Делаем массив скобок

Если >, то идем вправо
Если

Код = парсим(код) Текущая ячейка Цикловая ячейка Массив {ячейка:значение} Делаем массив скобок
там нет значения,
то устанавливаем его = 0

Если ., то выводим код символа,
который там (65 → А)

Если , то просим ввести
Число 0-255 (хотя, конечно,
надо вводить символ)

Прыжок
Прыжок

Слайд 19

Код Hello World!

Код Hello World!