TEWELSWAC

From Esolang
Jump to navigation Jump to search

Pronounced tools-whack, TEWELSWAC is an idea for a programming language by User:Timtomtoaster. As you can see, I'm not great at naming things (look at eWagon). The name stands for The Esolang Where Every Line Starts With A Colon. I will likely implement it in the future, but you can make an interpreter/compiler too!

Not all of this is guaranteed to be implemented in the final version, or implemented at all. Please don't write any big programs until an interpreter is written! It will save you a lot of pain "converting" from this to the real language.

Basic stuff

Syntax

Every line of code is like this:

label:command args;

When no condition is specified, the line is executed no matter what. All whitespace is supported.

The ; is used to separate commands. Newlines after this are not necessary.

Labels are used mainly for GOTO statements. The condition specifies whether or not that line of code will be executed.

Variables

Variables are defined by the SET command, which will be explained further in the Commands section of this page. To use the value of a variable as an arguments or condition, put a dollar sign before it. The only time you use only the variable's name is when you use commands that modify its value.

Memory

The memory for TEWELSWAC is a list of values. This is only used for variables. To point to a "physical" location in memory, use *location. At the beginning of each program, type MEMSIZE size. If this appears anywhere else in the code, it will clear the memory and re-initialize it with the specified size. Numbers only take up one cell, but strings are stored as several numbers plus an end character, so take this into consideration when defining the memory size.

Expressions

Expressions are used within lines of code as conditions or arguments. They are enclosed in []s. An example of an expression is [4 > 5] or [$A + 5]. The expression will return the value represented by what's in the square brackets. A ! will get numerical input, and @ will get string input. YOU CAN'T NEST THESE (unless you can write an interpreter that supports that, since I can't).

Command list

Capitalization isn't necessary.

Command Arguments Description
NEW name, [IS, value] Create a new variable. The type is auto-detected (int, float, or string). If IS isn't there, the variable has no value until it's set.
SET variable, newvalue Assign a new value to a variable.
GOTO label Skip to another line.
PRINT string/int/float Print something with a newline after it.
SHOW string/int/float Print something without a newline.
MEMSIZE size Set the memory to the given size.
COM none Comment.
NOP none Don't do anything.
END none End the program.

Examples

Cat

1:MEMSIZE 0;
LOOP:PRINT [@];
3:GOTO LOOP;

Fibonacci sequence

1:MEMSIZE 3;
2:NEW A; 3:NEW B IS 1; 4:NEW C;
LOOP: PRINT $A;
    7:SET C [$A + $B];
    8:SET A $B
    9:SET B $C;
10:GOTO LOOP;

Truth-machine

1:MEMSIZE 1;
2:NEW A IS [!];
3:([$A = 1]) GOTO TRUE;
4:([$A = 0]) GOTO FALSE;
TRUE:PRINT 1; 6:GOTO TRUE;
FALSE:PRINT 0; 7:END;

99 bottles of beer

1:MEMSIZE 40;
2:NEW BOTTLES IS 99;
3:NEW A IS " bottles of";
4:NEW B IS " beer";
5:NEW C IS " on the wall";
6:NEW D IS "No more";
LOOP1:NOP;
    LOOP2:SHOW $BOTTLES; 9:SHOW $A; 10:SHOW $B; 11:SHOW $C; 12:PRINT ".";
        13:SHOW $BOTTLES; 14:SHOW $A; 15:SHOW $B; 16:PRINT ".";
        17:PRINT "Take one down, pass it around."; 18:SET BOTTLES [BOTTLES - 1];
        19:SHOW $BOTTLES; 20:SHOW $A; 21:SHOW $B; 22:SHOW $C; 23:PRINT ".";
    24:([$BOTTLES > 0]) GOTO LOOP2;
    26:SHOW $D; 27:SHOW $A; 28:SHOW $B; 29:SHOW $C; 30:PRINT ".";
    31:SHOW $D; 32:SHOW $A; 33:SHOW $B; 34:PRINT ".";
    35:PRINT "Go to the store, buy some more."; 36:SET BOTTLES 99;
    37:SHOW $BOTTLES; 38:SHOW $A; 39:SHOW $B; 40:SHOW $C; 41:PRINT ".";
42:GOTO LOOP1;

External Resources