Важная информация
Страница 1 из 32 12311 ... ПоследняяПоследняя
Показано с 1 по 10 из 315

Тема: Проект нового языка

  1. #1 Проект нового языка 
    Супер модератор Аватар для Kakos_nonos
    Регистрация
    07.01.2011
    Адрес
    Кубань
    Сообщений
    1,531
    Сказал(а) спасибо
    126
    Поблагодарили 428 раз(а) в 291 сообщениях
    Записей в блоге
    6
    Вчера вечером мне в голову пришла идея создать новый язык программирования
    Не такой, типа паскаль или си, а типа Brainfuck, так, ради забавы.
    И вот, что получилось:
    Главной командой языка является команда присвоения одной переменной какого-нибудь значения. Клавиатура и экран являются переменными, и чтение этой переменной- это ввод с клавиатуры, а запись туда- это соответственно, вывод на экран.

    Для арифметических операций используется обратная польская запись, похожая на запись у калькулятора Электроника мк-61.

    В записи числа есть следующие знаки
    ^ -Число вверх по стеку.
    $ -переменная. Например, 100$ это переменная с номером 100
    ? -Случайное число. Диапозон- значение на вершине стека.
    +,-,*,/,% - арифметические операции.
    " -выполнение команды на вершине стека. То есть, если на вершине стека код символа +, то выполняется сложение.
    ! -определение знака числа.
    | -Заменить на вершине 0 на 1, а всё остальное на 0.
    @ -Квадратный корень
    & -Вершина возводится в степень подвершины

    Вот такая запись числа. Для примера:
    2^2+ - 2+2=4
    4$?^5* - случайное число, максимальное значение которого- значение ячейки 4, умножаем на 5.

    Команда присвоения имеет следующий формат:
    $(номер переменной)(число)


    Вот пример:
    $(5)(2^2+) - ячейка 5 будет равна 4

    Далее, команда условного перехода:
    #(Число)<метка>

    Это значит, если значение числа равно нулю, то переход к метке.
    Метка определяется так:
    {Имя метки}

    Далее, вывод строки на экран.
    [Выводимая строка]

    комментарии можно писать после символа /

    Переменная 1 - символьный ввод вывод.
    Переменная 2 - числовой ввод вывод.

    То есть программа $(2)(1$) выводит код нажатой клавиши.

    Также, есть функция вызова подпрограммы
    *<подпрограмма>

    выход из подпрограммы
    **

    И дополнитетьные функции.
    Они все имеют такой синтаксис:

    ~(номер функции)(параметры, помещающиеся в стек)

    Есть 13 функций:

    ~(1)(номер режима) - выбрать графический режим

    Есть такие режимы
    0-текстовой
    1 - 640*480*256

    ~(2)(X,Y,цвет) - рисовать точку в указанном месте с указанным цветом

    ~(3)(X,Y,X1,Y1,цвет) - рисовать линию

    ~(4)(X,Y,R,цвет) - рисовать круг

    ~(5)(X,Y,н.п) - получить цвет пикселя. Этот цвет записывается в ячейку н.п

    ~(6)(частота) - играть звук с частотой "частота".

    ~(7)(номер порта,значение) - отправить "значение" в порт "номер порта"

    ~(8)(номер порта,номер переменной) - прочитать значение из порта "номер порта" и отправить значение в переменную "номер переменной"

    ~(9)(номер прерывания,смещение переменной) - выполнить прерывание МС-ДОС. Выполняется прерывание "номер прерывания". Регистры, которые используются находятся со смещением "смещение переменной". Регистры расположены в таком порядке: ah,al,bh,bl,ch,cl,dh,dl,es,ds,si,di,bp. Тоесть,если смещение указано в 6, то ah будет в шестой переменной, al в седьмой, и. т. д.

    ~(10)(смещение к имени файла,номер файла,метод) - открыть фаил. Открывается фаил, название которого находится в памяти со смещением "смещение к имени файла". Имя файла должно заканчиватся нулевым символом.

    Метод 0 - открыть для чтения.
    Метод 1 - для записи.

    ~(11)(Номер файла,байт) - Записать байт в фаил "номер файла".

    ~(12)(Номер файла,байт,конец) - прочитать байт из файла. Если фаил кончился, то переменная "конец" примет значение в 0, иначе в 1.

    ~(13)(Номер Файла) - Закрыть фаил.

    ~(14)(номер цвета,р,г,б) - уствновить цвет "номер цвета" в р.г.б

    ~(15)(пауза) - пауза в сотых долях секунды.

    ~(16)(0) - очистить экран

    ~(17)(X,Y,C,G) - заливка. X,Y - точка заливки, C - цвет, G - цвет границы.

    ~(18)(цвет,размер,X,Y,смещение к началу текста) вывод текста в графическом режиме. Конец строки обозначается нулевым символом.

    ~(19)(цвет,размер,X,Y,число) - вывести на экран число.

    ~(20)(цвет,размер,X,Y,код символа) вывод символа на экран.

    Уфф... Сейчас пишу интерпретатор. Команду присвоения уже реализовал. Жду ваших предложений.

    Вот, несколько программ:
    Калькулятор

    $(2)(2$^2$^1$")

    Игра угадай число

    $(7)(100?^1+)
    {ввод}
    [Введи число]
    $(6)(2$)
    #(6$^7$-)<равно>
    #(6$^7$-!^1-)<больше>
    [введи больше]
    #(0)<ввод>
    {больше}
    [введи меньше]
    #(0)<ввод>
    {равно}
    [молодец!!!]
    Последний раз редактировалось Kakos_nonos; 28.07.2011 в 16:04. Причина: Добавил новые команды
    [Ссылки могут видеть только зарегистрированные пользователи. ]
    Ответить с цитированием  
     

  2. #2  
    Гуру Аватар для Абадябер
    Регистрация
    09.12.2010
    Адрес
    Беларусь, Минск
    Сообщений
    1,219
    Сказал(а) спасибо
    302
    Поблагодарили 176 раз(а) в 144 сообщениях
    Записей в блоге
    5
    Опа, весьма интересный язык получается Что же, пишите интерпретатор, будет интересно . Я только не понял, все же какая команда всовывает в стек значение?
    Мало того, для подобных языков на опн совсем несложно написать компилятор
    Я уже примерно представляю его структуру
    Дружба-магия-радость!
    Ответить с цитированием  
     

  3. #3  
    Супер модератор Аватар для Kakos_nonos
    Регистрация
    07.01.2011
    Адрес
    Кубань
    Сообщений
    1,531
    Сказал(а) спасибо
    126
    Поблагодарили 428 раз(а) в 291 сообщениях
    Записей в блоге
    6
    В стек всовывает команда ^
    Например: 45^78
    после выполнения команды на вершине стека 78 а на подвершине 45.
    Тт есть вначале вводится 45, потом всё сдвигается вверх, а потом вводится 78

    Насчёт компилятора будут затруднения с командой "
    Она, по сути, код самомодифицирует
    [Ссылки могут видеть только зарегистрированные пользователи. ]
    Ответить с цитированием  
     

  4. #4  
    Гуру Аватар для Абадябер
    Регистрация
    09.12.2010
    Адрес
    Беларусь, Минск
    Сообщений
    1,219
    Сказал(а) спасибо
    302
    Поблагодарили 176 раз(а) в 144 сообщениях
    Записей в блоге
    5
    В таком случае команда ^ лишь сдвигает индекс стека, а любое упоминание числа уже является помещением его в стек, так ведь?
    В таком случае ждем интерпретатор, причем желательно с исходником Тогда будет проще разобраться, что есть что.
    Дружба-магия-радость!
    Ответить с цитированием  
     

  5. #5  
    Супер модератор Аватар для Kakos_nonos
    Регистрация
    07.01.2011
    Адрес
    Кубань
    Сообщений
    1,531
    Сказал(а) спасибо
    126
    Поблагодарили 428 раз(а) в 291 сообщениях
    Записей в блоге
    6
    Да да, именно. Интерпретатор постараюсь завтра выложить.
    [Ссылки могут видеть только зарегистрированные пользователи. ]
    Ответить с цитированием  
     

  6. #6 "заветы дедушки" Никлауса Вирта 
    Профи Аватар для Dimon012
    Регистрация
    09.02.2011
    Адрес
    Владивосток
    Сообщений
    850
    Сказал(а) спасибо
    29
    Поблагодарили 130 раз(а) в 108 сообщениях
    Записей в блоге
    3
    Да вроде неплохо задумано, кроме одного, # (условного перехода), я конечно не настаиваю, но считаю необходимым применить структурные блоки, что то типа:
    If
    ...
    ...
    ElseIf
    ...
    ...
    EndIf
    согласен немного усложнится транслятор, но облегчится написание программ. Иначе получится нечто похожее на язык калькулятора или например ассемблер, но там это от дефицита ресурсов, но у нас немного не так.
    Я уж и забыл когда использовал переход на метку, на Fortrane так писал, потом на GVBasik, а вот на TurboBasik уже использовал только структурное программирование.
    Кончено мой авторитет в програмировании не велик, но я призываю вспомнить "заветы дедушки" Никлауса Вирта.
    #(True/False)
    #T
    ...
    ...
    #F
    ...
    ...
    #E

    Да! И еще в степень то как будем возводить? (на Fortrane - **)
    Последний раз редактировалось Dimon012; 16.02.2011 в 06:49.
    Ответить с цитированием  
     

  7. #7 Hello World 
    Профи Аватар для Dimon012
    Регистрация
    09.02.2011
    Адрес
    Владивосток
    Сообщений
    850
    Сказал(а) спасибо
    29
    Поблагодарили 130 раз(а) в 108 сообщениях
    Записей в блоге
    3
    Ужас! переменные только цифирные, а как теперь написать программу для вывода "Hello World", этож классика!!!
    Дошло! вывести конечно можно, но только текстовую константу, а переменные?
    Последний раз редактировалось Dimon012; 16.02.2011 в 08:03.
    Ответить с цитированием  
     

  8. #8  
    Профи Аватар для Dimon012
    Регистрация
    09.02.2011
    Адрес
    Владивосток
    Сообщений
    850
    Сказал(а) спасибо
    29
    Поблагодарили 130 раз(а) в 108 сообщениях
    Записей в блоге
    3
    Да еще какая то путаница, знак деления "/" и знак коментария "/"?
    Ответить с цитированием  
     

  9. #9  
    Супер модератор Аватар для Kakos_nonos
    Регистрация
    07.01.2011
    Адрес
    Кубань
    Сообщений
    1,531
    Сказал(а) спасибо
    126
    Поблагодарили 428 раз(а) в 291 сообщениях
    Записей в блоге
    6
    Добавил команду | если на вершине стека 0, то он преврящается в один, а если что-то другое, то оно станет нулём.


    команду if можно сделать так:

    #(число |)<else>


    {else}
    #(число)<end>


    {end}


    разница между комментарием и делить в том, что комментарий пишится сначала строки, а делить где-то посередине.

    Интерпретатор уже написал, сейчас ошибки удаляю.
    [Ссылки могут видеть только зарегистрированные пользователи. ]
    Ответить с цитированием  
     

  10. #10  
    Супер модератор Аватар для Kakos_nonos
    Регистрация
    07.01.2011
    Адрес
    Кубань
    Сообщений
    1,531
    Сказал(а) спасибо
    126
    Поблагодарили 428 раз(а) в 291 сообщениях
    Записей в блоге
    6
    Дописал интерпретатор без ошибок.
    Внутри архива Интерпретатор, исходник и игра угадай число.
    Всё писалось в Turbo pascal 7.0
    Вложения
    • Тип файла: zip Yaz.zip (17.2 Кб, Просмотров: 27)
    Последний раз редактировалось Kakos_nonos; 23.04.2011 в 18:39. Причина: Обновил
    [Ссылки могут видеть только зарегистрированные пользователи. ]
    Ответить с цитированием  
     

Страница 1 из 32 12311 ... ПоследняяПоследняя
Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Смена языка
    от Respekt-95 в разделе QBasic
    Ответов: 8
    Последнее сообщение: 14.05.2012, 18:21
  2. Предложения по расширению языка.
    от Dimon012 в разделе Степлер
    Ответов: 3
    Последнее сообщение: 14.01.2012, 14:17
  3. Проект нового Линукса.
    от Dispetcher14 в разделе Операционные системы
    Ответов: 24
    Последнее сообщение: 07.06.2011, 13:53
  4. Бефунгин-Интерпретатор языка Befung.
    от Kakos_nonos в разделе Другие языки программирования
    Ответов: 10
    Последнее сообщение: 23.01.2011, 00:47
  5. Ответов: 0
    Последнее сообщение: 30.11.2010, 00:40
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •