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' |