TMMLPTEALPAITAFNFAL
TMMLPTEALPAITAFNFAL ("The Multi-Million Language Project To End All Language Projects And Isn't That A Fine Name For A Language") is not a single language, it is approximately 100.000.000.000.000.000.000.000.000.000.000 languages in one small 26K compiler. The basic syntax is very simple, however, based on a unique-day-index (relative to january 1, 1900) arbitrary instruction subsets and arbitrary restrictions on identifiers are introduced, thus creating a new language syntax every day ! You no longer have to be bored at work, because each day you can completely rewrite all of your TMMLPTEALPAITAFNFAL applications ! The unemployment rate could be reduced significantly if major companies were to introduce TMMLPTEALPAITAFNFAL programming in their work.
Features
- The Syntax allows an arbitrary subset of the following pretty straightforward control instructions: IF-THEN, IF-THEN-ELSE, IF-THEN-UNLESS, IF-THEN-PROVIDED, WHILE-DO, WHILE-DO-UNLESS, WHILE-DO-PROVIDED, UNLESS-DO, REPEAT-UNTIL, REPEAT-UNLESS, DO-WHILE, DO-UNTIL, DO-UNLESS, UNTIL-DO.
- The Syntax either allows GOTO or GOSUB, but not both.
- The Syntax either allows DIV or MOD, but not both.
- The Syntax introduces arbitrary name restrictions regarding name size and character frequency.
- OPP-support, of course :)
You can get the unique syntax for today by typing
c:\> TMMLPTEALPAITAFNFAL HELP
at a command prompt. For example, the syntax for today, October 13, 2000, read:
- You can use GOSUB, but not GOTO
- You can use DIV, but not MOD
- Only the following high-level constructs are supported: IF-THEN-ELSE, IF-THEN-UNLESS, IF-THEN-PROVIDED, WHILE-DO-PROIDED, REPEAT-UNLESS.
- Names must be at least 15 Characters long
- Names must be less than 110 Characters long
- Identifier characters must be in ASCII range 33 .. 68 (! .. D), or 'R'.
- The character 82 ('R') must be used 57 Times modulo 58 per identifier.
Instead, the syntax for October 14, 2000, reads:
- You can use GOTO, but not GOSUB
- You can use MOD, but not DIV
- You have only UNTIL-DO as a high-level construct
- Names must be less than 21 characters long.
Download
You can download the Win32 distribution, complete with sourcecode and binaries, here.
NEW: You can download the Linux distribution, complete with sourcecode and binaries, here.
Syntax
The syntax looks pretty much like an obsolete basic dialect, with small INTERCAL-like diamonds such as "IF-THEN-UNLESS" and "WHILE-DO-PROVIDED". A sample Hello World application that could be used if all restrictions were disabled:
DECLARE CELL 100 AS READPOS
DECLARE 10 AS NEWLINE
WRITE CHAR NEWLINE
COPY "Hello, World" TO CELL 0
COPY 0 TO READPOS
WHILE READPOS INDIRECT DO GOSUB 300
WRITE CHAR NEWLINE
RETURN
LINE 300: WRITE CHAR READPOS INDIRECT
ADD 1 TO READPOS
RETURN
But of course the program won't run on most days of most years of the next 20 millenia. Here is the syntax for the complete interpreter:
- STATEMENT
- [LINE_NUMBER] CONTROL_LOGIC | MATH_STATEMENT | IO_STATEMENTS | DECLARATION
- DECLARATION
- 'DECLARE' NUMERIC 'AS' NAME
- NAME
- NC { (NC | DECINT) }
- NC
- <non-numeric printable ASCII char>
- CONTROL_LOGIC
- BRANCH_STATEMENT | IF_FAMILY | WHILE_FAMILY
- IF_FAMILY
- IF_THEN | IF_THEN_ELSE | IF_THEN_UNLESS | IF_THEN_PROVIDED
- WHILE_FAMILY
- WHILE_DO | WHILE_DO_UNLESS | WHILE_DO_PROVIDED | UNLESS_DO | REPEAT_UNTIL | REPEAT_UNLESS | DO_WHILE | DO_UNTIL | DO_UNLESS | UNTIL_DO
- IF_THEN
- 'IF' BOOLEAN_EXPRESSION 'THEN' STATEMENT
- IF_THEN_ELSE
- 'IF' BOOLEAN_EXPRESSION 'THEN' STATEMENT 'ELSE' STATEMENT
- IF_THEN_UNLESS
- 'IF' BOOLEAN_EXPRESSION 'THEN' STATEMENT 'UNLESS' BOOLEAN_EXPRESSION
- IF_THEN_PROVIDED
- 'IF' BOOLEAN_EXPRESSION 'THEN' STATEMENT 'PROVIDED' 'THAT' BOOLEAN_EXPRESSION.
- WHILE_DO
- 'WHILE' BOOLEAN_EXPRESSION 'DO' STATEMENT.
- WHILE_DO_UNLESS
- 'WHILE' BOOLEAN_EXPRESSION 'DO' STATEMENT 'UNLESS' BOOLEAN_EXPRESSION
- WHILE_DO_PROVIDED
- 'WHILE' BOOLEAN_EXPRESSION 'DO' STATEMENT 'PROVIDED' BOOLEAN_EXPRESSION
- UNLESS_DO
- 'UNLESS' BOOLEAN_EXPRESSION 'DO' STATEMENT
- UNTIL_DO
- 'UNTIL' BOOLEAN_EXPRESSION 'DO' STATEMENT
- REPEAT_UNTIL
- 'REPEAT' STATEMENT 'UNTIL' BOOLEAN_EXPRESSION
- REPEAT_UNLESS
- 'REPEAT' STATEMENT 'UNLESS' BOOLEAN_EXPRESSION
- DO_WHILE
- 'DO' STATEMENT 'WHILE' BOOLEAN_EXPRESSION
- DO_UNTIL
- 'DO' STATEMENT 'UNTIL' BOOLEAN_EXPRESSION
- DO_UNLESS
- 'DO' STATEMENT 'UNLESS' BOOLEAN_EXPRESSION
- IO_STATEMENTS
- READ | WRITE
- WRITE
- 'WRITE' ('CHAR'|'INTEGER') NUMERIC
- READ
- 'READ' ('CHAR'|'INTEGER') NUMERIC
- BOOLEAN_EXPRESSION
- NUMERIC [ ('>'|'<'|'='|'<>'|'<='|'>=') NUMERIC]
- MATH_STATEMENT
- ADD | SUB | MUL | MOD | DIV | COPY | NAND
- ADD
- 'ADD' NUMERIC 'TO' NUMERIC
- COPY
- 'COPY' NUMERIC 'TO' NUMERIC
- SUB
- 'SUB' NUMERIC 'FROM' NUMERIC
- MUL
- 'MUL' NUMERIC 'WITH' NUMERIC
- NAND
- 'NAND' NUMERIC 'WITH' NUMERIC
- MOD
- 'MOD' NUMERIC 'BY' NUMERIC
- DIV
- 'DIV' NUMERIC 'BY' NUMERIC
- NUMERIC
- NAME | INTEGER | 'CELL' INTEGER ['INDIRECT']
- BRANCH_STATEMENT
- GOTO | GOSUB | STOP | RETURN
- STOP
- 'STOP'
- RETURN
- 'RETURN'
- GOSUB
- 'GOSUB' NUMERIC
- GOTO
- 'GOTO' NUMERIC
- LINE_NUMBER
- 'LINE' INTEGER ':'
- INTEGER
- DECINT { DECINT }
- DECINT
- '0' .. '9'