Jump to content

Мышь (язык программирования)

Язык программирования 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

Примечания

[ редактировать ]
  1. ^ Jump up to: а б Грогоно, Питер (июль 1979 г.). mii/n197/mode/2up «Мышь/Язык для микрокомпьютеров» . БАЙТ . стр. 198–220 . Проверено 18 октября 2013 г. {{cite news}}: Проверять |url= ценность ( помощь )
  2. ^ Лейн, Том; Грогоно, Питер (июнь 1980 г.). «Комментарий и исправление для мыши» . БАЙТ . Проверено 18 октября 2013 г.
  3. ^ Jump up to: а б с д Грогоно, Питер. Мышь: язык для микрокомпьютеров . 151 страница. Petrocelli Books, Inc.: 1983. ISBN   0-89433-201-5 .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 8a9957161c711f25c45b0a87ab4e692c__1656198360
URL1:https://arc.ask3.ru/arc/aa/8a/2c/8a9957161c711f25c45b0a87ab4e692c.html
Заголовок, (Title) документа по адресу, URL1:
Mouse (programming language) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)