My-Soft Classic Interpreter 1.0

Тема в разделе "WASM.PROJECTS", создана пользователем Administrator, 20 дек 2009.

  1. Administrator

    Administrator New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2009
    Сообщения:
    23
    Я написал интерпретатор языка BrainFuck
    Прочиать о интерпретаторе здесь:
    http://forum.vingrad.ru/forum/topic-283624.html


    Скачать (архив с самим интерпретатором, эксклюзивным значком, примерами программ на BF (+ readme.txt объясняющий задачи, которые выполняют примеры программ; кодировка DOS) и информацией (руководство пользователя + информация о назначении областей оперативной памяти и регистров + исходный код интерпретатора на TASM 4.1))
     
  2. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    супер, без него бы даже читать эту тему не стал
     
  3. Administrator

    Administrator New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2009
    Сообщения:
    23
    :) Хорош не только значок, но и сама программа
     
  4. Administrator

    Administrator New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2009
    Сообщения:
    23
    ОБНОВЛЕНИЕ
    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!
     
  5. Administrator

    Administrator New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2009
    Сообщения:
    23
  6. Administrator

    Administrator New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2009
    Сообщения:
    23
    Помогите пожалуйста, объясните как здесь редактировать уже написанные сообщения, э то уменя даблпост получается
     
  7. Microedition

    Microedition Active Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    814
    Никак. И еще, смените ник.
     
  8. Clear__Energy

    Clear__Energy New Member

    Публикаций:
    0
    Регистрация:
    30 янв 2009
    Сообщения:
    432
    Пусть будет. Прикольно же: администратор пишет интерпретатор брейнфака :3
    Пусть враги боятся.
     
  9. Administrator

    Administrator New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2009
    Сообщения:
    23
    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), то выводит на экран белую рожу, если нет, то черную.
     
  10. persicum

    persicum New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2007
    Сообщения:
    947
    В задницу БФ... Придумай лучше свой компактный байт код приближенный к машине тюринга с человеческой загрузкой ячеек, с прямой и косвенной адресацией ячеек и лент, ленту с номером 255 можно отвести под случайные байты
     
  11. SL7549

    SL7549 New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2009
    Сообщения:
    17
    А ваш интерпретатор Brainfuck сможет выполнить компилятор из Brainfuck в код на C?
    Я тоже писал когда-то свой интерпретатор, только было это на Lua (нравится мне этот язык), он нормально скомпилировал компилятор BF->C в код на C, который я после этого нормально скомпилировал и заставил компилировать ещё что-то.
    Вот кстати код компилятора:
    Код (Text):
    1. >+++++[>+++++++<-]>.<<++[>+++++[>+++++++<-]<-]>>.+++++.<++[>-----<-]>-.<++[>++++
    2. <-]>+.<++[>++++<-]>+.[>+>+>+<<<-]>>>[<<<+>>>-]<<<<<++[>+++[>---<-]<-]>>+.+.<++++
    3. +++[>----------<-]>+.<++++[>+++++++<-]>.>.-------.-----.<<++[>>+++++<<-]>>.+.---
    4. -------------.<<++[>-------<-]>.>++++.<<++[>++++++++<-]>.<++++++++++[>>>--------
    5. ---<<<-]>>>+++.<-----.+++++.-------.<<++[>>++++++++<<-]>>+.<<+++[>----------<-]>
    6. .<++[>>--------<<-]>>-.------.<<++[>++++++++<-]>+++.---....>++.<----.--.<++[>>++
    7. +++++++<<-]>>+.<<++[>+++++++++<-]>+.<++[>>-------<<-]>>-.<--.>>.<<<+++[>>++++<<-
    8. ]>>.<<+++[>>----<<-]>>.++++++++.+++++.<<++[>---------<-]>-.+.>>.<<<++[>>+++++++<
    9. <-]>>-.>.>>>[-]>>[-]<+[<<[-],[>>>>>>>>>>>>>+>+<<<<<<<<<<<<<<-]>>>>>>>>>>>>>>[<<<
    10. <<<<<<<<<<<+>>>>>>>>>>>>>>-]<<+>[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-
    11. [-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[<->[-]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
    12. ]]]]]]<[<<<<<<<<<<<<[-]>>>>>>>>>>>>[-]]<<<<<<<<<<<<[<+++++[>---------<-]>++[>]>>
    13. [>+++++[>+++++++++<-]>--..-.<+++++++[>++++++++++<-]>.<+++++++++++[>-----<-]>++.<
    14. <<<<<.>>>>>>[-]<]<<<[-[>]>>[>++++++[>+++[>++++++<-]<-]>>++++++.-------------.---
    15. -.+++.<++++++[>----------<-]>.++++++++.----.<++++[>+++++++++++++++++<-]>.<++++[>
    16. -----------------<-]>.+++++.--------.<++[>+++++++++<-]>.[-]<<<<<<<.>>>>>]<<<[-[>
    17. ]>>[>+++++[>+++++++++<-]>..---.<+++++++[>++++++++++<-]>.<+++++++++++[>-----<-]>+
    18. +.<<<<<<.>>>>>>[-]<]<<<[-[>]>>[>+++[>++++[>++++++++++<-]<-]>>-.-----.---------.<
    19. ++[>++++++<-]>-.<+++[>-----<-]>.<++++++[>----------<-]>-.<+++[>+++<-]>.-----.<++
    20. ++[>+++++++++++++++++<-]>.<++++[>-----------------<-]>.+++++.--------.<++[>+++++
    21. ++++<-]>.[-]<<<<<<<.>>>>>]<<<[<+++[>-----<-]>+[>]>>[>+++++[>+++++++++<-]>..<++++
    22. +++[>++++++++++<-]>---.<+++++[>----------<-]>---.<<<<<<.>>>>>>[-]<]<<<[--[>]>>[>
    23. +++++[>+++++++++<-]>--..<+++++++[>++++++++++<-]>-.<+++++[>----------<-]>---.[-]<
    24. <<<<<.>>>>>]<<<[<+++[>----------<-]>+[>]>>[>+++[>++++[>++++++++++<-]<-]>>-.<+++[
    25. >-----<-]>.+.+++.-------.<++++++[>----------<-]>-.++.<+++++++[>++++++++++<-]>.<+
    26. ++++++[>----------<-]>-.<++++++++[>++++++++++<-]>++.[-]<<<<<<<.>>>>>]<<<[--[>]>>
    27. [>+++++[>+++++[>+++++<-]<-]>>.[-]<<<<<<<.>>>>>]<<<[<++++++++++[>----------------
    28. <-]>--[>]>>[<<<<[-]]]]]]]]]]]>>]<++[>+++++[>++++++++++<-]<-]>>+.<+++[>++++++<-]>
    29. +.<+++[>-----<-]>.+++++++++++.<+++++++[>----------<-]>------.++++++++.-------.<+
    30. ++[>++++++<-]>.<++++++[>+++++++++++<-]>.<++++++++++.
     
  12. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    Вы таки жжоте, господа. Интерпретатор Фокала, интересно, кто-нибудь замутит по-быстрому?
     
  13. Administrator

    Administrator New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2009
    Сообщения:
    23
    Прекрасно скушал ваш код (не я). Я запустил вашу программу и с клавиатуры ввёл +.[+.] а потом нажал на клавишу g (для завершения, я так понял ваш код завершается при нажатии на клавишу, не несущую BF-код)
    А мой интерпретатор тем временем вывел на экран:
    Кстате, а почему вы сами не запустили код? Несмогли разобраться как запустить мой интерпретатор или просто не захотели скачивать? Если вы жалеете трафик то скачайте исполняемый файл отдельно http://www.my-soft2008.narod.ru/programs/BF.COM
    Только его надо настроить: в свойствах убрать галочку напротив "закрывать окно по завершению работы"


    ОБНОВЛЕНИЕ
    Я переделал некоторые места в программе, использую строковые функции. Код упростился и теперь объём исполняемого файла 207 байт.
    Скачать можно или архив из этого поста, или с моего сайта www.my-soft2008.narod.ru/programs/bf.htmархив или некоторые, в него входящие файлы, по отдельности.