Мышь (язык программирования)
Язык программирования Mouse — небольшой компьютерный язык программирования, разработанный доктором Питером Грогоно в конце 1970-х — начале 1980-х годов. [1] [2] [3] Он был разработан как расширение более раннего языка под названием MUSYS, который использовался для управления цифровыми и аналоговыми устройствами в студии электронной музыки.
Изначально мышь задумывалась как небольшой и эффективный язык для микрокомпьютеров с ограниченной памятью. Это интерпретируемый стека язык на основе , в котором используется обратная польская нотация . Чтобы максимально упростить реализацию интерпретатора, Mouse спроектирована таким образом, что программа обрабатывается как поток символов, интерпретируемых по одному символу за раз.
Элементы языка Mouse состоят из набора (в основном) односимвольных символов, каждый из которых выполняет определенную функцию (см. таблицу ниже). Поскольку имена переменных ограничены одним символом, в Mouse существует только 26 возможных переменных (с именем AZ). Целые числа и символы — единственные доступные типы данных.
Несмотря на эти ограничения, Mouse включает в себя ряд относительно продвинутых функций, в том числе:
- Условное ветвление
- Петли
- Указатели
- Макросы (подпрограммы (которые могут быть рекурсивными))
- Массивы
- Трассировка кода
Конструкция языка Mouse делает его идеальным для обучения проектированию простого интерпретатора. Большая часть книги, описывающая Мышь [3] посвящен описанию реализации двух интерпретаторов, один на Z80 языке ассемблера , другой на языке Паскаль .
Подробности
[ редактировать ]Описанный здесь язык является более поздней версией Mouse, описанной в книге Mouse. [3] Эта версия является расширением языка, описанного в оригинальной журнальной статье. [1]
Символы
[ редактировать ]В следующей таблице описан каждый из символов, используемых мышью. [3] Здесь X относится к числу на вершине стека, а Y — к следующему числу в стеке.
Символ | Действие |
---|---|
<пробел> | Нет действий |
$ | Конец программы |
<номер> | Поместить <число> в стек |
+ | Добавлять |
- | Вычесть |
* | Умножить |
/ | Целочисленное деление |
\ | Остаток |
? | Введите целое число |
?' | Введите символ |
! | Вывести целое число |
!' | Печать символа |
' | Поместить символ в стек |
" | Распечатать строку |
<письмо> | Получить адрес переменной |
: | Сохранить переменную |
. | Вызов переменной |
< | Верните 1, если Y < X; иначе вернуть 0 |
= | Верните 1, если Y = X; иначе вернуть 0 |
> | Верните 1, если Y > X; иначе вернуть 0 |
[ | Начало условного оператора |
] | Конец условного оператора |
( | Начало цикла |
) | Конец цикла |
^ | Выход из цикла (если ложь) |
# | Вызов макроса |
@ | Выход из макроса |
% | Параметр макроса |
, | Конец фактического параметра макроса |
; | Конец списка параметров макроса |
{ | Начать трассировку |
} | Конец трассировки |
~ | Комментарий |
Выражения
[ редактировать ]Распространенные идиомы
[ редактировать ]Эти выражения часто встречаются в программах для мыши.
X: ~ store into variable X X. ~ recall variable X X. Y: ~ copy X into Y N. 1 + N: ~ increment N by 1 P. Q. P: Q: ~ swap values of P and Q ? A: ~ input a number and store in A P. ! ~ print variable P
Вход
[ редактировать ]Мышь может вводить целые числа или символы. При вводе символа он автоматически преобразуется в код ASCII.
? X: ~ input a number and store into X ?' X: ~ input a character and store its ASCII code into X
Выход
[ редактировать ]Мышь может печатать целые числа, символы или строковые константы, как показано в этих примерах. Если в строковой константе появляется восклицательный знак, печатается новая строка.
X. ! ~ recall number X and print it X. !' ~ recall ASCII code X and print character "Hello" ~ print string "Hello" "Line 1!Line 2" ~ print strings "Line 1" and "Line 2" on two lines
Условные предложения
[ редактировать ]Условное выражение имеет общую форму:
B [ S ] ~ equivalent to: if B then S
Здесь B — выражение, значение которого равно 1 (истина) или 0 (ложь), а S — последовательность операторов.
Петли
[ редактировать ]Циклы могут иметь одну из нескольких форм. Наиболее распространены формы:
(B ^ S) ~ equivalent to: while B do S (S B ^) ~ equivalent to: repeat S until (not B)
Здесь снова B — логическое значение (0 или 1), а S — последовательность операторов.
Макровызовы
[ редактировать ]Формат вызова макроса (подпрограммы) можно проиллюстрировать следующим примером. Макрос A в этом примере добавляет два параметра, переданные ему из основной программы, и возвращает сумму на вершину стека.
#A,p1,p2; ~ call in main program to macro A ... $A 1% 2% + @ ~ macro A (add parameters p1 and p2)
Здесь p1 и p2 — параметры, передаваемые макросу.
Примеры программ
[ редактировать ]Эта короткая программа печатает «Привет, мир».
"Hello world." $
Эта программа отображает квадраты целых чисел от 1 до 10.
1 N: ~ initialize N to 1 ( N. N. * ! " " ~ begin loop; print squares of numbers N. 10 - 0 < ^ ~ exit loop if N >= 10 N. 1 + N: ) $ ~ increment N and repeat loop
Примечания
[ редактировать ]- ^ Jump up to: а б Грогоно, Питер (июль 1979 г.). mii/n197/mode/2up «Мышь/Язык для микрокомпьютеров» . БАЙТ . стр. 198–220 . Проверено 18 октября 2013 г.
{{cite news}}
: Проверять|url=
ценность ( помощь ) - ^ Лейн, Том; Грогоно, Питер (июнь 1980 г.). «Комментарий и исправление для мыши» . БАЙТ . Проверено 18 октября 2013 г.
- ^ Jump up to: а б с д Грогоно, Питер. Мышь: язык для микрокомпьютеров . 151 страница. Petrocelli Books, Inc.: 1983. ISBN 0-89433-201-5 .
Внешние ссылки
[ редактировать ]- Язык программирования мыши
- Великое возрождение языка программирования MOUSE
- Друзья Мыши
- Мышь, Язык
- Мышь: язык компьютерного программирования (включает исходный код для интерпретаторов мыши)
- Информация на сайте sourceforge.net