Лр 5 (Сама МТ)
Статья посвящена тому, как без лишней мороки написать, отладить и запустить МТ на музэйном пека.
Удобнее всего сначала написать прогу в эмуляторе в 4-х.
Как по мне проще всего написать машину в 4-х, но сдавать то надо в 5-х…
Я изначально написал прогу в 4-х и мне было лень ее переписывать в 5-ки, поэтому я написал прогу, которая делает это за вас.
Итак, как я советую сделать.
- Придумать общий алгоритм на основе вашей задачи
- Написать и отладить его в 4-х
- Перевести в 5-ки автоматом
Почему именно так? Потому что в 5-х очень мало нормальных интерпретаторов, а тот что есть (на сайте ВМК) призывает вас написать МТ5 в таблице…
Это никуда не годится (ИМХО). Дедовский интерпретатор работает на прямых командах, как и эмулятор в 4-х (1 пункт инструкции)
Важное замечание: на дедовском интерпретаторе ограничение на количество СОСТОЯНИЙ OxOO-0xFF (255шт) Само количество команд вроде не ограничено (у меня около 200, и все норм заработало)
Применение моей проги:
- Пишем и отлаживаем программу тут (или тут, оффлайн версия)
- Сохраняем ваши команды куда-нибудь в другой файл
- Нажимаем
- Копируем полученное в другой файл
- Запускаем мою прогу (прога умеет пока только 10-е цифры воспринимать)
- Копируем команды МТ4 в левое окно
Программа переведет 4->5 прямым переводом, сохраните тоже где-нибудь. Но прямого перевода не хватит, ведь в МТ 5 у нас есть отдельное место под «действие», поэтому есть логика, которая сжимает ваши команды до допустимого состояния.
- Включаем перекрестное сжатие. Если вдруг количество команд не уменьшилось, то значит у вас нечего сжимать, и перевод получился впритык. Допустим на моей первой МТ количество команд с 67 уменьшилось до 63
Насчет функции «Удаление промежуточных» я долго думал, но пришел к выводу, что однозначно она работать не может, т.к. те команды, что промежуточные на 4-х, на 5-х могут быть ключевыми, поэтому не советую ее использовать, ибо если логика сложная, то она сломает ее и придется дописывать уже на 5-х удаленные промежуточные. Короче, лучше ее не использовать, т.к. дед не заметит подмены уже после «Перекрестного сжатия»
- Копируем полученные переводом команды и сохраняем в файл .txt
- Приносим эти команды в файле на музэйный пк
- Открываем терминал, запускает терминал. Переходим в нужную нам папку. Пишем команду «tu newMt.tu«, пишем 5 и нажимаем Enter
- Откроется интерпретатор. Нам нужно здесь одно, чтобы он создал нам файл, поэтому пишем какую-нибудь одну левую команду и нажимаем «TAB», видим надпись, что файл успешно сохранен, нажимаем CTRL+C, выходим с терминала
- В той папке, где вы находились появится файл newMt.tu
- Открываем его с помощью Emacs, открываем наш файл, который мы принесли на флешке любым редактором и копируем все команды в newMt.tu, сохраняем
- После этого, если вы сделали все верно, то попробуйте написать в терминале снова «tu NewMt.ru», он должен открыть все ваши команды в интерпретаторе
- После этого проверьте уже работоспособность вашей МТ. Если вдруг не работает, попробуйте запустить МТ, которую вы получили прямым переводом, без сжатия, если снова не заработает, то это уже ваша вина.
Я лично показал деду МТ переведенную прогой со сжатием (НЕ УДАЛЯЯ ПРОМЕЖУТОЧНЫЕ) и он зачел мне эту мт. Честно, он даже не смотрел что в самих командах, так как их было слишком много, чтобы понять что они делают.
Если ваша МТ не очень обширная, то вам стоит задуматься над красотою вашей мт. И вообще он не принимает без нормализации, т.е. чтобы входные данные были изменены.
Что это значит? Если у вас задача «сложить 2 числа в 2-й системе», то она должна при входных «1001+1», «1001+1=1010»