THLEK

THLEK (an acronym for THree LEtter Keywords) is a stack-based language by User:Cocosbeans. As the full name implies, the instructions in THLEK are always three characters long. This allows code to be interpreted without any delimiters (i.e. whitespace), since the code length will always be divisible by three. Whitespace can be added for human legibility but it is ignored by the interpreter. For instance, the code mrk x01 end ifc tru jmp x01 end eof can be written as mrkx01endifctrujmpx01endeof and it will execute exactly the same.
= Memory =
THLEK has two sets of memory: the Memory tape, and the Stack.
The Memory tape is a fixed-size tape of Cells that can store data. As the tape has 256 cells at all times, Cells can be indexed by their Address, a number between x00 and xff. NOTE that the address x10 cannot be accessed as it always stores the 257th value from the Stack, acting as overflow storage.
The Stack is a stack of Cells that works on a FILO basis and can be pushed to and popped from. The Stack can hold up to 256 cells, and if an extra Cell is pushed to the Stack, the top Cell is popped to Address x10. When using the interpreter, this can be disabled by providing the argument --no-overflow which frees the Address of its reservation, but this will cause the program to immediately halt with a code of 3 if the Stack overflows. No value below the top Cell can be mutated or accessed until it becomes the top Cell.
= Syntax =
All instructions in THLEK are three characters long. They are not case-sensitive, but their order does matter. Numbers in THLEK are hexadecimal, and are always written as two nibbles prefixed with x. While only 8-bit numbers can be written into the code, mathematical operations can be used to produce a signed 32-bit number. Below is an example of how to bypass the 8-bit restriction. In this example, the sum of xff + x10 (0x10f) is stored to address x01, then is later compared to xff. If x10f > xff, then it prints that value (271).
 psh xff end
 psh x10 end
 dmp x01 end
 ptr x01 end
 ifc grt rpv xff
 doc
 plv rpv end
 edc
 eif
 eof
== Control ==
In THLEK, you can test an expression's truth and then perform some code based on the result. THLEK supports the basic If Then (Else) control, and has standard logical and mathematical operators. You can define an If statement that only has a then body, but not an else body, with ifc. To add an else body, the keyword is ife. Unlike other expressions, If statements end with eif.
= Glossary =
Keyword	Arguments expected	Full name 	Description
edc 	None 	End Do Condition 	Marks the end of the then body of an If statement.
ede 	None 	End Do Else 	Marks the end of the else body of an If statement.
eif 	None 	End If 	Marks the end of an If statement.
eof 	None 	End Of File 	Marks the end of the code. Can also be used to halt the program at any point.
end 	None 	End 	Marks the end of an expression.
fls 	None 	False 	Represents the False boolean value.
jmp 	rpv 	Jump 	If a number is given, jumps to the marker that corresponds to that number. If no existing marker exists, the program halts with code 5. If rpv is given, jumps to the marker with the number at the address that the pointer currently points to.
mrk 	Marker (number) 	Marker 	Sets the index where the keyword is written as a marker that can be jumped to with the specified number.
pcc 	None 	Pop and Clear Cell 	Pops the top Cell of the Stack, effectively deleting it.
pop 	rpa 	Pop 	Pops the top Cell of the Stack to the specified address, or to the pointer's current address if rpa is given.
rpa 	None 	Refer to Pointer Address	Returns the address that the pointer is currently pointing to.
rpv 	None 	Refer to Pointer Value 	Returns the value at the address that the pointer is currently pointing to.
spa 	Address (number) 	Set Pointer to Address 	Sets the pointer to a given Address.
tru 	None 	True 	Represents the True boolean value.
this page is wip, and so is its implementation :)
Category:Languages Category:Works-in-Progress Category:Stack-based Category:Cell-based Category:2024