Merthese
A joke language started on the Cemetech IRC channel and developed on the forums there. Vanilla Merthese has the following 5 operators:
Command | Description |
---|---|
m |
Print "merth" |
e |
Print a new line (defined as new line for the environment) |
r |
Print a space |
t |
Print a random-length string of random letters where letters are [a-z], and the length of the string is in the range [0, 13.4) |
h |
Seek to the character after the next "h" character |
A Merthese program is composed of a series of ASCII characters stored in a text file or provided as an argument to the interpreter or compiler (according to implementation). Characters other than the recognized operators are ignored. Merthese is case sensitive.
Extensions
Several community members have proposed (and often implemented) extensions to Merthese, usually to add an output for their screen name and a few extra capabilities. Where proposed capabilities share a letter with the existing operators, a random selection is made at run-time as to which operator to use (unless otherwise stated by the extension). Generally these are cumulative, however that doesn't need to be the case.
Merthing @ Kerm
Adds the following operators to vanilla Merthese:
Command | Description |
---|---|
k |
Print accum. char |
e |
accum++ |
r |
Reset accum |
m |
Print accum. num |
Merthing @ Kerm w/ Nikky
Adds the following operators to the Merthing @ Kerm extension:
Command | Description |
---|---|
n |
Add next character to accumulator. |
i |
Input a character -> accum |
k |
Print "nikky" |
y |
Loops a number of times based on the next character (for instance, \0 would loop 0 times, and A would loop 65 times), executing the character after the next repeatedly. |
Merthing @ Kerm w/ Nikky && tev
Adds the following operators to the Merthing @ Kerm w/ Nikky extension:
Command | Description |
---|---|
t |
Print incrementing sequence of chars starting from accum. char with random length 0–13.4 (same range as with the base Merthese 't' command). Randomly either leaves accum. unmodified or sets it to final char code + 1 |
e |
Randomly print one of .,;:-!?'
|
v |
Print the accum. char ROT13'ed if it's a letter (ASCII 65–90 or 97–122), unmodified otherwise |
Merthing and Ashbad are awesome
Adds one new operator:
Command | Description |
---|---|
a |
Print "ASHBAD IZ SMRT" |
This extension is widely unimplemented.
IMDB Dialect Directives
The IMDB dialect adds formal directives to Merthese:
Directive | Description |
---|---|
#extend |
Allows for extending an existing rule module for interpretation |
#retract |
Removes an existing, currently loaded rule module from interpretation |
#nikky |
Makes interpretation an attention seeker, and chooses the next line of input for the user |
#exit |
End program or interpretation |
#create |
Create a new module. Implementation defined. |
#end |
Ends a create module session. |
This dialect allows for creation of new extensions, otherwise known as "Modules", with the #create directive. It is loose in definition, to be mostly defined by the interpreter or compiler implementation.
Extended modules are defined for usage per implementation, with the caveat that the standard set of extensions "Merthing @ Kerm with Nikky && tev" must be executed so that overlapping characters are randomly executed from loaded modules; user-created modules may be chained to the standard set of extensions instead.
Implementations
Merthese is relatively well-supported for an esoteric language. Implementations are available in the following languages (chronological):
- C#
- TI-BASIC (z80)
- C
- C++
- TI-BASIC (z80)
- Casio BASIC
- z80 ASM
- Axe
- UserRPL
- Python
- Ruby
- Racket
- Common Lisp
- Haskell
- Bash
- Stack-Oriented BF
- Javascript
- Perl
- Lua
- Java
- SysRPL
- BASIC256
- Rust
- MUMPS
- Scala
Additionally, compilers have been written for the following languages (chronological):
- CIL (compiler written in C#)
- UserRPL (compiler written in UserRPL)
- Java Bytecode (compiler in Bash)
- z80 ASM (compiler written in C#)
- LLVM (compiler written in Rust)