teilz
v3.2.1
Published
a tiny embeddable scripting language
Downloads
51
Readme
Teilz
Teilz (pronounced "tails") is a tiny embeddable scripting language, written in typescript, and created primarily to support the zdani text game. It stands for "terrifically easy instruction language for zdani".
Features:
- basic-like: most instructions start with a keyword like
letorfor - sandboxed: user code runs with limits on the number of instruction cycles and recursion depth, in a restricted environment
- strongly typed: every expression is type-checked, without explicit type declarations, because the syntax is kept extremely simple and all types are inferred at parse time
- extensible: custom types and instructions can (and should) be added by the container
- simple: all variable references start with
@to distinguish them from instructions; symbols are only used when their meaning has general consensus across all programming languages (;and{ ... }and the method call syntax, for example) - no "advanced" features like user-defined functions or classes
Builtin types:
- Boolean
- Number
- String
- Array(A) (array of some other type)
- Optional(A) (holds
some Aornone)
Builtin instructions:
- binary infix operators:
* / mod + - == != < > <= >= and or - unary operators:
not - assignment:
:=,let - conditions, loops, multi-way branches:
if,for,match - list expressions:
any,all,count,sum,min,max(with implicit map & filter) - method calls / message passing:
@x.set(3, "tomato") - format strings: anything in mustaches is parsed as an expression to be stringified:
"Double x is {{@x * 2}}"
All of the builtin types may be used as compile-time constants: true, 23, "carrot", [ 1, 2, 3 ]. When you add custom types, you can define syntax so they can be used as constants too.
Example code
Assuming the container adds a print instruction, and defines a local variable named @players of type Array(Player):
for @p in @players where @p.wizard do {
print "There is a wizard here: {{@p.name}}";
if @p.username.length mod 2 == 1 then print "Their username is... odd.";
}Syntax
FIXME
Embedding
FIXME
License
Apache 2 (open-source) license, included in 'LICENSE.txt'.
Credit and blame: Robey Pointer [email protected]
