Merthese

From Esolang
Jump to: navigation, search

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)

External resources