TEWELSWAC

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 ==
* non-fully compliant interpreter, by User:zseri, License: MIT
Category:Languages Category:Implemented Category:High-level