Mouse (programming language)
{{Short description|Programming language}}
The Mouse (sometimes written as MOUSE) programming language is a small computer programming language developed by Dr. Peter Grogono in the late 1970s and early 1980s.{{cite news | url=https://archive.org/stream/byte-magazine-1979-07/1979_07_BYTE_04-07_Automating_Eclipses#page mii/n197/mode/2up | title=Mouse / A Language for Microcomputers | work=BYTE | date=July 1979 | accessdate=18 October 2013 | author=Grogono, Peter | pages=198–220}}{{cite news | url=https://archive.org/stream/byte-magazine-1980-06/1980_06_BYTE_05-06_Inter_Computer_Communications#page/n243/mode/2up | title=Comment and Correction for Mouse | work=BYTE | date=June 1980 | accessdate=18 October 2013 |author1=Lane, Tom |author2=Grogono, Peter }}Grogono, Peter. Mouse: A Language for Microcomputers. 151 pages. Petrocelli Books, Inc.: 1983. {{ISBN|0-89433-201-5}}. It was developed as an extension of an earlier language called MUSYS, which was used to control digital and analog devices in an electronic music studio.
Mouse was originally intended as a small, efficient language for microcomputers with limited memory. It is an interpreted, stack-based language and uses Reverse Polish notation. To make an interpreter as easy as possible to implement, Mouse is designed so that a program is processed as a stream of characters, interpreted one character at a time.
The elements of the Mouse language consist of a set of (mostly) one-character symbols, each of which performs a specific function (see table below). Since variable names are limited to one character, there are only 26 possible variables in Mouse (named A-Z). Integers and characters are the only available data types.
Despite these limits, Mouse includes a number of relatively advanced features, including:
- Conditional branching
- Loops
- Pointers
- Macros (subroutines (which may be recursive))
- Arrays
- Code tracing
The design of the Mouse language makes it ideal for teaching the design of a simple interpreter. Much of the book describing Mouse is devoted to describing the implementation of two interpreters, one in Z80 assembly language, the other in Pascal.
Details
= Symbols =
The following table describes each of the symbols used by Mouse. Here X refers to the number on the top of the stack, and Y is the next number on the stack.
class="wikitable"
! Symbol ! Action |
align="center"| | No action |
align="center"| $
| End of program |
| Push |
align="center"| +
| Add |
align="center"| -
| Subtract |
align="center"| *
| Multiply |
align="center"| /
| Integer divide |
align="center"| \
| Remainder |
align="center"| ?
| Input integer |
align="center"| ?'
| Input character |
align="center"| !
| Print integer |
align="center"| !'
| Print character |
align="center"| '
| Push character onto stack |
align="center"| "
| Print string |
align="center"| | Get variable address |
align="center"| :
| Store variable |
align="center"| .
| Recall variable |
align="center"| <
| Return 1 if Y < X; else return 0 |
align="center"| =
| Return 1 if Y = X; else return 0 |
align="center"| >
| Return 1 if Y > X; else return 0 |
align="center"| [
| Start of conditional statement |
align="center"| ]
| End of conditional statement |
align="center"| (
| Start of loop |
align="center"| )
| End of loop |
align="center"| ^
| Exit loop (if false) |
align="center"| #
| Macro call |
align="center"| @
| Exit from macro |
align="center"| %
| Macro parameter |
align="center"| ,
| End of actual macro parameter |
align="center"| ;
| End of list of macro parameters |
align="center"| {
| Start trace |
align="center"| }
| End trace |
align="center"| ~
| Comment |
= Expressions =
== Common idioms ==
These expressions appear frequently in Mouse programs.
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
==Input==
Mouse may input integers or characters. When a character is input, it is automatically converted to its ASCII code.
? X: ~ input a number and store into X
?' X: ~ input a character and store its ASCII code into X
==Output==
Mouse may print integers, characters, or string constants, as shown in these examples. If an exclamation point appears in a string constant, a new line is printed.
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
==Conditionals==
A conditional statement has the general form:
B [ S ] ~ equivalent to: if B then S
Here B is an expression that evaluates to 1 (true) or 0 (false), and S is a sequence of statements.
==Loops==
Loops may have one of several forms. Most common are the forms:
(B ^ S) ~ equivalent to: while B do S
(S B ^) ~ equivalent to: repeat S until (not B)
Here again B is a boolean value (0 or 1), and S is a sequence of statements.
==Macro calls==
The format of a macro (subroutine) call may be illustrated by the following example. Macro A in this example adds the two parameters passed to it from the main program, and returns the sum on the top of the stack.
- A,p1,p2; ~ call in main program to macro A
...
$A 1% 2% + @ ~ macro A (add parameters p1 and p2)
Here p1 and p2 are parameters passed to the macro.
= Example programs =
This short program prints 'Hello world.'
"Hello world."
$
This program displays the squares of the integers from 1 to 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
Notes
{{Reflist|2}}
External links
- [http://users.encs.concordia.ca/~grogono/Mouse/mouse.html The Mouse Programming Language]
- [https://web.archive.org/web/20070307145837/http://www.geocities.com/fullerhaparnoldafmil/mouse.html The Great MOUSE Programming Language Revival]
- [https://archive.today/20030506120304/http://cth.dtdns.net/mouse/ Friends of the Mouse]
- [http://primepuzzle.com/mouse/mouse.html Mouse, the Language]
- [http://mouse.davidgsimpson.com Mouse: Computer Programming Language] (includes source code for Mouse interpreters)
- [http://mouse.sourceforge.net/ Information on sourceforge.net]
{{Authority control}}