teilz
v3.2.1
Published
a tiny embeddable scripting language
Downloads
15
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
let
orfor
- 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 A
ornone
)
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]