# Minimal operation language

*Not to be confused with Minimal.*

**Minimal operation language** is a test esolang by User:PythonshellDebugwindow.

## Contents

## Syntax

Each line is a sequence of unsigned integers of arbitrary size separated by operators (other than lines with goto), e.g.:

1 + 2 - 3 * 4 / 5

Spaces (other than newlines) don't matter. The result of each line is printed to STDOUT with a newline, so the above code would print:

0

because with Minimal operation language's OOO (see #Operators), and / being floor division:

(1 + 2) - ((3 * 4) / 5) = 0.6

Any question marks will be replaced with user input with the prompt `? `

, e.g.:

?

is a numeric cat program. Also:

1?5

with input `7`

gives:

175

or with input `123`

gives:

11235

or with input `abc`

gives:

105

because `abc`

is not a valid integer in Minimal operation language (regex: `[0-9]+`

, no preceding `+`

allowed).

## Operators

Operator | Operation | Precedence |
---|---|---|

`+` |
Addition | 5 |

`-` |
Subtraction | 6 |

`*` |
Multiplication | 3 |

`/` |
Floor division | 4 |

`^` |
Exponentiation | 2 |

`(` |
Grouping | 1 |

`)` |
Grouping | 1 |

`==` |
Equality | 7 |

`!=` |
Inequality | 8 |

Precedence is 1 for highest, meaning the higher the precedence, the sooner that operation will be solved. The subtraction operator returns the absolute value of its result, the equality operator returns 1 if its LHS and RHS are the same, otherwise 0, and the inequality operator returns 0 if its LHS and RHS are the same, otherwise 1.

## Gotos

When a line starts with `:`

(colon), the program will jump to the (0-based) Nth line of the program, where N is the number on the line after evaluation (minus the colon). The number on the line will not be printed, and jumping to an out-of-range line will terminate the program without an error. If a line starts with `;`

(semicolon) instead of `:`

, then the number on the line will be printed before the jump, e.g.:

1 + 1 :0

would print out `2`

forever, and:

1 + 1 ;0

would print out `2`

(followed by `0`

) forever (`2\n0\n2\n0`

...).

### Conditional gotos

If you prefix a `:`

or `;`

with a number, then the jump will only happen if that left number is not equal to 0. If a `:`

is used, then no value will be printed out, even if the left number is equal to 0, but if a `;`

is used, then the right value will be printed out. For example:

?:3 0 :4 1

will print out 0 if user input is invalid or equal to 0, and will print out 1 otherwise. This example can be easily modified into a truth-machine.

## Examples

### Numeric cat

?

### Add two inputs

? + ?

### Truth-machine

?:3 0 :5 1 :3

## Resources

- An interpreter written in NodeJS by User:PythonshellDebugwindow (unfinished as of now)
- Interpreter written in Node.js by User:Hakerh400
- Interpreter written in Io by User:A