Я написал интерпретатор языка BrainFuck Прочиать о интерпретаторе здесь: http://forum.vingrad.ru/forum/topic-283624.html Скачать (архив с самим интерпретатором, эксклюзивным значком, примерами программ на BF (+ readme.txt объясняющий задачи, которые выполняют примеры программ; кодировка DOS) и информацией (руководство пользователя + информация о назначении областей оперативной памяти и регистров + исходный код интерпретатора на TASM 4.1))
ОБНОВЛЕНИЕ 1. Я обнаружил ещё одну маленькую ошибочку: оказалось, что область магазинной памяти имеет размер не 30000 байт, а 30001 байт. 2. Я переделал загрузчик интерпретируемой программы, а именно ту часть, которая определяет параметры командной строки. В связи с чем размер исполняемого файла стал не 218 байт, а 213 байт. 3. Я написал пару программ на языку BF: а) Теоритический шаблон программы Данная программа позволяет производить условный переход в зависимости от данных. Допустим, что в данный момент указатель находится на 1 ячейки, а все ячейки заполнены нулями. В этом случае программа будет сравнивать значение во 2 ячейки. Вот она: Без подсветки 1: 2: 3: 4: 5: +> (Условие) [<-> (Обратное условие) > (Выполняется если нет) [-]<[>+<-]]<[-> (Обратное условие) < (Выполняется если да) [-]]>>[<+>-]<< Что значит условие и обратное условие? Условие представляет собой кусок программы, отнимающий n от текущей ячейки. Если значение во 2 ячейки равно n, то будет выполнятся подпрограмма "Выполняется если да", а если нет соответственно другая подпрограмма. Обратное условие представляет собой кусок программы, прибовляющий n к текущей ячейки. Пример условного перехода: +> ,------------- [<-> +++++++++++++ > +. [-]<[>+<-]]<[-> +++++++++++++ < ++. [-]]>>[<+>-]<< Данна программа работает так: 1)требует ввода с клавиатуры 2) Если ввели Enter (13), то выводит на экран белую рожу, если нет, то черную. А вот другая программа, работающая по такому же принципу: Без подсветки >+++++++[<+++++++++++>-]<.>++++[<+++++>-]<.>+++[<++++++>-]<+.------------.+++++++++++.>+++++++[<------------>-]<+.>+++++++[<++++++++++++>-]<.---------------.++++++++++++++.+.>++++++++[<------------->-]<+.---.+++.---.>+++++[<++++++++>-]<.-------.+++++++.+++++++++++.++.>+++++[<---------->-]<.---. [-]>[-] >,>++++++[<-------->-]<< +>----[<->++++> >++++++++[<+++++++++++>-]<+.>+++[<+++++++>-]<+.++++++.>+++++++[<------------>-]<-.>++++++++[<++++++++>-]<+.+++++++++++++++++.-------------.>+++++++[<---------->-]<+.>++++++++[<+++++++++++>-]<-.-----.---.-.-------.>+++++++[<---------->-]<. <[>+<-]]<[ ->++++++++[<+++++++++++>-]<+.>+++[<+++++++>-]<+.++++++.>+++++++[<------------>-]<-.>++++++++[<++++++++>-]<+.+++++++++++++++++.-------------.>+++++++[<---------->-]<+.>+++++++++[<+++++++++>-]<+.---------.--.+.++++++++++++.>+++++++[<------------>-]<+. [-]]>>[<+>-]<< Она выводит на экран: Math test 2+2=? А потом требует ввода с клавиатуры. Если ввели 4, то на экране пеоявляется надпись You are right! А если ввели что-то другое, то выводится You are wrong!
Появилась страничка программы http://my-soft2008.narod.ru/programs/bf.htm. От сюда можно качать гостям
Помогите пожалуйста, объясните как здесь редактировать уже написанные сообщения, э то уменя даблпост получается
1. Обновление. а) Изменён интерпретатор. Раньше, в том месте, где определялось кол-во вложенных циклов использовался регистр bp, теперь si. В связи с этим вес исполняемого файла уменьшился с 213 до 211. Принципиальных изменений не было. б) Добавлены примеры Новую версию скачать можно из вложения или от сюда http://my-soft2008.narod.ru/programs/bf.htm. Исходник вот: http://my-soft2008.narod.ru/programs/Source.htm 2. Реализация конструкции IF...THEN...ELSE... Данная программа позволяет производить условный переход в зависимости от данных. Допустим, что в данный момент указатель находится на 1 ячейки, а все ячейки заполнены нулями. В этом случае программа будет сравнивать значение во 2 ячейки. Вот она: +> (Условие) [<-> (Обратное условие) > (Выполняется если нет) [-]<[>+<-]]<[-> (Обратное условие) < (Выполняется если да) [-]]>>[<+>-]<< Что значит условие и обратное условие? Условие представляет собой кусок программы, отнимающий n от текущей ячейки. Если значение во 2 ячейки равно n, то будет выполнятся подпрограмма "Выполняется если да", а если нет соответственно другая подпрограмма. Обратное условие представляет собой кусок программы, прибовляющий n к текущей ячейки. Пример условного перехода: +> ,------------- [<-> +++++++++++++ > +. [-]<[>+<-]]<[-> +++++++++++++ < ++. [-]]>>[<+>-]<< Данна программа работает так: 1)требует ввода с клавиатуры 2) Если ввели Enter (13), то выводит на экран белую рожу, если нет, то черную.
В задницу БФ... Придумай лучше свой компактный байт код приближенный к машине тюринга с человеческой загрузкой ячеек, с прямой и косвенной адресацией ячеек и лент, ленту с номером 255 можно отвести под случайные байты
А ваш интерпретатор Brainfuck сможет выполнить компилятор из Brainfuck в код на C? Я тоже писал когда-то свой интерпретатор, только было это на Lua (нравится мне этот язык), он нормально скомпилировал компилятор BF->C в код на C, который я после этого нормально скомпилировал и заставил компилировать ещё что-то. Вот кстати код компилятора: Код (Text): >+++++[>+++++++<-]>.<<++[>+++++[>+++++++<-]<-]>>.+++++.<++[>-----<-]>-.<++[>++++ <-]>+.<++[>++++<-]>+.[>+>+>+<<<-]>>>[<<<+>>>-]<<<<<++[>+++[>---<-]<-]>>+.+.<++++ +++[>----------<-]>+.<++++[>+++++++<-]>.>.-------.-----.<<++[>>+++++<<-]>>.+.--- -------------.<<++[>-------<-]>.>++++.<<++[>++++++++<-]>.<++++++++++[>>>-------- ---<<<-]>>>+++.<-----.+++++.-------.<<++[>>++++++++<<-]>>+.<<+++[>----------<-]> .<++[>>--------<<-]>>-.------.<<++[>++++++++<-]>+++.---....>++.<----.--.<++[>>++ +++++++<<-]>>+.<<++[>+++++++++<-]>+.<++[>>-------<<-]>>-.<--.>>.<<<+++[>>++++<<- ]>>.<<+++[>>----<<-]>>.++++++++.+++++.<<++[>---------<-]>-.+.>>.<<<++[>>+++++++< <-]>>-.>.>>>[-]>>[-]<+[<<[-],[>>>>>>>>>>>>>+>+<<<<<<<<<<<<<<-]>>>>>>>>>>>>>>[<<< <<<<<<<<<<<+>>>>>>>>>>>>>>-]<<+>[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[- [-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[<->[-]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] ]]]]]]<[<<<<<<<<<<<<[-]>>>>>>>>>>>>[-]]<<<<<<<<<<<<[<+++++[>---------<-]>++[>]>> [>+++++[>+++++++++<-]>--..-.<+++++++[>++++++++++<-]>.<+++++++++++[>-----<-]>++.< <<<<<.>>>>>>[-]<]<<<[-[>]>>[>++++++[>+++[>++++++<-]<-]>>++++++.-------------.--- -.+++.<++++++[>----------<-]>.++++++++.----.<++++[>+++++++++++++++++<-]>.<++++[> -----------------<-]>.+++++.--------.<++[>+++++++++<-]>.[-]<<<<<<<.>>>>>]<<<[-[> ]>>[>+++++[>+++++++++<-]>..---.<+++++++[>++++++++++<-]>.<+++++++++++[>-----<-]>+ +.<<<<<<.>>>>>>[-]<]<<<[-[>]>>[>+++[>++++[>++++++++++<-]<-]>>-.-----.---------.< ++[>++++++<-]>-.<+++[>-----<-]>.<++++++[>----------<-]>-.<+++[>+++<-]>.-----.<++ ++[>+++++++++++++++++<-]>.<++++[>-----------------<-]>.+++++.--------.<++[>+++++ ++++<-]>.[-]<<<<<<<.>>>>>]<<<[<+++[>-----<-]>+[>]>>[>+++++[>+++++++++<-]>..<++++ +++[>++++++++++<-]>---.<+++++[>----------<-]>---.<<<<<<.>>>>>>[-]<]<<<[--[>]>>[> +++++[>+++++++++<-]>--..<+++++++[>++++++++++<-]>-.<+++++[>----------<-]>---.[-]< <<<<<.>>>>>]<<<[<+++[>----------<-]>+[>]>>[>+++[>++++[>++++++++++<-]<-]>>-.<+++[ >-----<-]>.+.+++.-------.<++++++[>----------<-]>-.++.<+++++++[>++++++++++<-]>.<+ ++++++[>----------<-]>-.<++++++++[>++++++++++<-]>++.[-]<<<<<<<.>>>>>]<<<[--[>]>> [>+++++[>+++++[>+++++<-]<-]>>.[-]<<<<<<<.>>>>>]<<<[<++++++++++[>---------------- <-]>--[>]>>[<<<<[-]]]]]]]]]]]>>]<++[>+++++[>++++++++++<-]<-]>>+.<+++[>++++++<-]> +.<+++[>-----<-]>.+++++++++++.<+++++++[>----------<-]>------.++++++++.-------.<+ ++[>++++++<-]>.<++++++[>+++++++++++<-]>.<++++++++++.
Прекрасно скушал ваш код (не я). Я запустил вашу программу и с клавиатуры ввёл +.[+.] а потом нажал на клавишу g (для завершения, я так понял ваш код завершается при нажатии на клавишу, не несущую BF-код) А мой интерпретатор тем временем вывел на экран: Кстате, а почему вы сами не запустили код? Несмогли разобраться как запустить мой интерпретатор или просто не захотели скачивать? Если вы жалеете трафик то скачайте исполняемый файл отдельно http://www.my-soft2008.narod.ru/programs/BF.COM Только его надо настроить: в свойствах убрать галочку напротив "закрывать окно по завершению работы" ОБНОВЛЕНИЕ Я переделал некоторые места в программе, использую строковые функции. Код упростился и теперь объём исполняемого файла 207 байт. Скачать можно или архив из этого поста, или с моего сайта www.my-soft2008.narod.ru/programs/bf.htmархив или некоторые, в него входящие файлы, по отдельности.