— А меня зовут Гена. Я работаю в зоопарке Крокодилом.
— А что мы будем сейчас делать?
— Ничего. Давайте просто побеседуем.
Э. Успенский
Повторим кратко, что мы узнали о Кукараче из предыдущего учебника «Азбуки Роботландии».
Среда обитания Кукарачи и его СКИ
Вспомним среду, в которой трудится исполнитель, его СКИ. И, самое главное, вспомним язык программирования, на котором можно создавать для него программы.
Исполнитель
Палку в воду бросит, а телёнок принесёт. Скажет ему: «Лежать» — и Гаврюша лежит. Прикажет ему Матроскин: «Взять! Куси!» — тот сразу бежит, и бодаться начинает.
Э. Успенский
Скрыть ответы
Вопрос. Опишите среду Кукарачи .
Ответ. Кукарача работает на клетчатом поле. Исполнитель может переползать из клетки в клетку вверх, вниз, влево, вправо, но не по диагонали. Выход исполнителя за пределы поля запрещён (отказ Не могу! ). В каждой клетке может находиться кубик с нанесённым на его грань символом. Кукарача, перемещаясь по полю, может толкать один или несколько кубиков перед собой и «сбрасывать» кубики за пределы поля.
Кукарача и латинские советы | Rumba latin tips | Перезалив
Скрыть ответы
Вопрос. Расскажите про скрытые символы на кубиках и индикатор.
Ответ. Некоторые кубики на поле могут иметь «скрытые» символы, обозначаемые знаком вопроса. Считается, что такие кубики расположены в клетке «символом вниз». Толкая такой кубик, Кукарача перемещает его в следующую клетку по ходу движения, переворачивает и видит надпись.
Исполнитель в состоянии прочитать символ на кубике независимо от того, была ли запись символа обычной или скрытой. Кубик с обычной надписью исполнитель толкает, но не переворачивает.
В среде есть специальная ячейка памяти (её не видно на экране), которая называется индикатором . В начальный момент (перед выполнением программы) в эту ячейку помещается значение ПУСТО . Затем значение индикатора меняется каждый раз, когда Кукарача передвигается в соседнюю клетку. Если в клетке был кубик (исполнитель толкнул его) в индикатор записывается символ с кубика, в противном случае в индикатор записывается ПУСТО .
Скрыть ответы
Вопрос. Опишите СКИ Кукарачи .
Ответ. Система команд исполнителя (СКИ) включает пять команд:
ВПРАВО | Сместиться на одну клетку вправо |
ВЛЕВО | Сместиться на одну клетку влево |
ВВЕРХ | Сместиться на одну клетку вверх |
ВНИЗ | Сместиться на одну клетку вниз |
СТОЯТЬ | Пустая команда — исполнитель не выполняет никаких действий |
Любая команда, кроме команды СТОЯТЬ , может привести к отказу Не могу , если её выполнение уводит Кукарачу за пределы поля.
Язык программирования
И стал он галчонка учить разговаривать. Целыми днями сидел около него и говорил:
— Кто там? Кто там? Кто там?
Э. Успенский
В языке программирования Кукарачи , как и в обычном языке, слова разделяются пробелами. Конец строки также является разделителем слов.
Кукарача Изначально без Кьюбн Экшена/ Что такое Кукарача/ Восьмерка/ Лекция Румба/ История Фигуры
Программа может быть записана в одну длинную строку:
ЭТО Шаг ВЛЕВО ВНИЗ ВПРАВО КОНЕЦ
Но так не делают. Программу записывают лесенкой, чтобы человеку было легче её читать, и снабжают комментариями:
ЭТО Шаг ВЛЕВО // В первый столбец ВНИЗ // На следующую строку ВПРАВО // Толкнуть кубик КОНЕЦ
Для записи комментариев в программах Кукарачи используют две косых черты «//». Они сами и всё, что находится правее до конца строки, не принимается во внимание при выполнении программы.
Скрыть ответы
Вопрос. Что представляет собой программа в языке Кукарачи ?
Ответ. Программа представляет собой последовательность процедур , записанных в любом порядке. Процедура описывает действия исполнителя, а имя процедуры может быть использовано наравне с командой из СКИ исполнителя в других процедурах или в командной строке.
Скрыть ответы
Вопрос. Как записывается процедура?
Ответ. Процедура записывается следующим образом:
Описание процедуры
ЭТО и КОНЕЦ — ключевые слова языка программирования.
Ключевые слова — служат для построения языковых конструкций. Они должны записываться точно так, как обозначены в языке.
Имя процедуры должно начинаться с буквы. Оно не должно содержать пробелов и не может совпадать с ключевыми словами языка программирования.
Командой в процедуре может быть:
- команда из СКИ
- вызов процедуры (имя процедуры)
- команда языка программирования
Скрыть ответы
Вопрос. Назовите команды языка программирования Кукарачи .
Ответ. Команды языка программирования Кукарачи представлены в следующей таблице.
ПОВТОРИ число команда
Пример
ПОВТОРИ 5 ВПРАВО
ПОКА условие команда
Пример
ПОКА ПУСТО ВПРАВО
ЕСЛИ условие ТО команда1 ИНАЧЕ команда2
Пример
ЕСЛИ A ТО ВПРАВО ИНАЧЕ ВЛЕВО
Пример
Интерпретатор
— Заходите, — пригласил Винтика и Шпунтика Бублик. — Я вас познакомлю с Шурупчиком. Это интересная личность.
Компьютерная модель Кукарачи — это программа для компьютера. Она состоит из многих частей-процедур, которые выполняют определенную для них часть работы. Одна процедура отвечает за вывод на экран картинок, другая записывает информацию на диск, третья обрабатывает нажатие клавиш на клавиатуре компьютера.
Интерпретатор — это одна из процедур этой программы. Именно интерпретатор выполняет программу, написанную для Кукарачи .
Интерпретатор читает программу с «чужими» для Кукарачи словами: ЭТО , КОНЕЦ , ПОВТОРИ , и переводит её на язык исполнителя — то есть на язык команд из его СКИ.
Скрыть ответы
Вопрос. Объясните, как интерпретатор выполнит процедуру Ух .
Ответ. Интерпретатор передаст Кукараче 5 команд ВПРАВО .
Скрыть ответы
Вопрос. Как интерпретатор проверяет условия?
Ответ. Интерпретатор сравнивает запись условия в программе со значением индикатора в среде Кукарачи и вырабатывает значения истина или ложь по правилам, описанным в следующей таблице:
Команды языка программирования
На брюках было: два кармана спереди, два кармана сзади, два кармана по бокам и один карман внизу, на колене.
Скрыть ответы
Вопрос. Как работает цикл: ПОВТОРИ число команда ?
Ответ. Интерпретатор выполнит команду, записанную после числа, указанное количество раз. Примеры показаны в таблице:
ПОВТОРИ 7 ВНИЗ
Скрыть ответы
Вопрос. Как работает команда ветвления:
Ответ. Интерпретатор проверяет условие и, если условие верное, то выполняет первую команду, иначе (если условие ложное) — вторую. В любом случае работает только одна команда, либо команда1 , либо команда2 . Примеры показаны в таблице:
ЕСЛИ ЦИФРА ТО ВЛЕВО ИНАЧЕ ВПРАВО
Скрыть ответы
Вопрос. Как работает команда ветвления в сокращённой форме:
Ответ. Интерпретатор проверяет условие и, если условие верное, то выполняет команду. Если условие ложное, команда не выполняется. Примеры показаны в таблице:
ЕСЛИ ЦИФРА ТО ВЛЕВО
Скрыть ответы
Вопрос. Как работает команда цикла ПОКА :
- Сначала проверяется условие.
- Если условие ложно, выполнение цикла заканчивается.
- Если условие истинно, выполняется команда, записанная после условия, и всё начинается сначала: проверяется условие, выполняется команда и так далее.
Примеры показаны в таблице:
ПОКА ПУСТО ВПРАВО
Тестирование и отладка программ
В это время корзина с силой ударилась о землю и перевернулась.
Посмотрите, как Вася решил задачу Расставь цифры .
Задача. Расставь цифры
Исполнитель стоит в левом верхнем углу поля. Во второй строке, начиная с первой клетки, находится плотный ряд кубиков с цифрами. Число кубиков не более 9. Цифры в ряду расположены в произвольном порядке и значение каждой из них больше 2. Поставить кубики в строки с номерами, равными значениям цифр.
Пример начального и конечного состояний среды задачи Расставь цифры
Задача решается при помощи цикла ПОКА (для обнаружения конца цепочки цифр) и переключателя, который вызывает одну из 7 процедур для обработки цифр: 3, 4, 5, 6, 7, 8, 9.
ЭТО Цифры_на_место ВНИЗ // В индикатор первую цифру ПОКА НЕ ПУСТО < Установка_цифры Шаг >КОНЕЦ // Установим цифру и вернёмся во 2-ю строку ЭТО Установка_цифры ЕСЛИ 3 ТО Цифра_3 ИНАЧЕ ЕСЛИ 4 ТО Цифра_4 ИНАЧЕ ЕСЛИ 5 ТО Цифра_5 ИНАЧЕ ЕСЛИ 6 ТО Цифра_6 ИНАЧЕ ЕСЛИ 7 ТО Цифра_7 ИНАЧЕ ЕСЛИ 8 ТО Цифра_8 ИНАЧЕ ЕСЛИ 9 ТО Цифра_9 КОНЕЦ // Толкнём следующую цифру ЭТО Шаг ВВЕРХ ВПРАВО ВНИЗ КОНЕЦ ЭТО Цифра_3 СТОЯТЬ КОНЕЦ ЭТО Цифра_4 ВНИЗ ВВЕРХ КОНЕЦ ЭТО Цифра_5 ПОВТОРИ 2 ВНИЗ ПОВТОРИ 2 ВВЕРХ КОНЕЦ ЭТО Цифра_6 ПОВТОРИ 3 ВНИЗ ПОВТОРИ 3 ВВЕРХ КОНЕЦ ЭТО Цифра_7 ПОВТОРИ 4 ВНИЗ ПОВТОРИ 4 ВВЕРХ КОНЕЦ ЭТО Цифра_8 ПОВТОРИ 5 ВНИЗ ПОВТОРИ 5 ВВЕРХ КОНЕЦ ЭТО Цифра_9 ПОВТОРИ 6 ВНИЗ ПОВТОРИ 6 ВВЕРХ КОНЕЦ
После того как программа написана, её начинают тестировать , то есть пытаются найти в программе ошибки.
Тестируют программы, запуская их с разными допустимыми состояними среды. Обычно таких состояний очень много, трудно поверить, но для задачи Расставь цифры таких состояний насчитывается 47 079 207 , то есть более 47 миллионов!
Проверить такое число вариантов невозможно, поэтому проверяют несколько типичных и все особые начальные состояния среды.
Наборы начальных состояний назвают тестами .
Вот необходимый набор тестов для задачи Расставь цифры :
3 | Особый случай: одна цифра. |
3456789 | Промежуточный вариант между крайними. Присутствуют все возможные цифры (проверим правильность установки каждой цифры). |
755786733 | Особый случай: максимальное число цифр. |
Что делать, если обнаружен тест, на котором программа работает неверно? Нужно найти в тексте программного кода ошибку и исправить её. Для поиска места ошибки можно запускать выполнение программы по шагам .
Процесс тестирования и исправления ошибок программисты называют отладкой программы.
Тестирование устанавливает факт наличия ошибки, а для исправления нужно найти место ошибки в программном коде, исправить, и убедиться, что непрошедший тест теперь проходит правильно.
Скопируйте прямо с этой страницы программу Цифры_на_место в приложение Кукарача , и проверьте правильность выполнения всех 3-х тестов.
Источник: robotlandia.ru
Что за язык кукарача?
Кукарача- это язык программирования. В языке программирования Кукарачи, как и в обычном языке, слова разделяются пробелами. Конец строки также является разделителем слов.
Программу записывают лесенкой, чтобы человеку было легче её читать, и снабжают комментариями:
ВЛЕВО // В первый столбец
ВНИЗ // На следующую строку
ВПРАВО // Толкнуть кубик
Для записи комментариев в программах Кукарачи используют две косых черты «//». Они сами и всё, что находится правее до конца строки, не принимается во внимание при выполнении программы.
Кукарача Windows — это среда, в которой можно работать с исполнителем:
в командном режиме (при помощи команд из СКИ исполнителя);
при помощи программ, написанных на языке программирования Кукарачи.
Источник: www.bolshoyvopros.ru
Игрушечный ЯП — Cockroach
В школьном и более продвинутом курсе информатики есть учебный язык — Кукарача. Довольно удачный, для обучения детей программированию. Простой, понятный, визуальные результаты с первой строчки.
Авторы курса сделали только exe-шник под Windows. Когда младший сын начал требовать «Папа научи программировать» принял волевое решение — сделаю свою имплементацию. И сделал.
Че это вообще?
Есть прямоугольное поле. Жучок и буквочки. Нужно писать программы, что бы жучок правильным образом подвигал буковки.
Поддерживаются простые команды — ВВЕРХ , ВНИЗ , ВПРАВО , ВЛЕВО и их группировка с помощью <> .
После каждого действия известен результат — какую букву толкнул жучок.
Есть циклы — ПОВТОРИ x , ПОКА y и условие ЕСЛИ z ТО . ИНАЧЕ .
И даже процедуры — ЭТО proc_name . КОНЕЦ
Поэтому, в процессе обучения ребенок учится довольно сложных концепциям включая рекурсию и процедурное программирование.
Поле
Поле работает совсем очевидно — массивчик char’ов и специальный символ для жучка. Процедуры, которые передвигают жучка изменяя состояние. Запоминаем последнюю букву, которую толкнули. Осталось добавить загрузку/выгрузку в строку примерно такого вида:
А_А__ _1_1_ _____ ____~
а также колбек на изменение, что бы отрисовывать и симпатичный компонент готов.
Как сделать интерпретатор?
Оказалось, что сделать интерпретатор не так уж и сложно. Надо понимать что такое синтаксис и грамматика, почитать немного примеров и воспользоваться готовыми либами.
Я взял antlr — т.к мой основной язык java и там этот генератор парсеров на слуху. В итоге получилась такая грамматика
Грамматика задает правила для парсера что бы из текста сформировать синтаксическое дерево. Пример на картинке.
Интерпретатору всего-лишь надо обойти это дерево верным образом и выполнить необходимые действия. Действия следуют из их смысла:
- Определение процедуры — запоминаем имя процедуры в специальной мапке. Ключ — название, значение — поддерево команд.
- Вызов процедуры (токен ID) — ищем определение процедуры и вызываем соответствующее поддерево команд.
- Цикл ПОВТОРИ x — выполняем поддерево x раз.
- Цикл ПОКА у — проверяем условие y и выполняем поддерево пока оно выполняется.
- ЕСЛИ z ТО . ИНАЧЕ . — проверяем условие z и выполняем то или иное поддерево.
- Обычные команды — изменяем состояние поля.
Интерфейс
Последний раз я делал UI еще во времена когда jquery и extjs были модными :), поэтому погуглив как сейчас делается интерфейс слегка ох^Wудивился обилию возможностей. В итоге собрал из туториала который первым заработал рабочее one page application и запилил с помощью того что знаю — bootstrap и jquery.
Очень хотелось сделать подсветку синтаксиса, а нагугленный компонент поддерживал другой генератор парсеров. Нет проблем — записать грамматику немного другим синтаксисом проще простого.
Несмотря на то, что в CodeMirror довольно подробная документация разобраться в API оказалось не так просто. Возможно, я отвык от уровня документирования js компонент. Но, в итоге, подсветка синтаксиса и текущей команды во время дебага и запуска работает.
Сохранение файликов сделал через localStorage — удобненько.
Сложности
Первая реализация интерпретатора написана на java и работает через консоль. Пошаговое выполнение (отладку) легко сделать через ожидание ввода с консоли.
А вот в javascript простой возможности останавить выполнение в рандомном месте нет. Поэтому, пришлось заморочиться и сделать, что бы интерпретация приложения работала на promise’ах. Команда кукарачи выполняется при выполнении Promise.resolve .
Публикация
Вкратце — github прекрасен)
Оказалось, что в github есть бесплатный, автоматизированный, удобный функционал, что бы опубликовать one page application. Называется github pages. Обалденно удобно. Собираешь свое приложение, указываешь папочку, жмешь кнопку и вуаля — приложение готово и работает.
Ну вот и все pet project готов и вроде как работает. Ребенок два раза позанимался программированием и получил массу удовольствия. Я тоже доволен и пописал интересный код.
А еще у меня есть канал с выступлениями и ссылками на интересные пейперы из мира разработки СУБД.
- antlr
- ненормальное программирование
Источник: habr.com