a tiny embeddable scripting language
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
Robey 9a6ed408f5 nicer readme, while i'm enjoying the weather with a cold racer 5 2 months ago
docs nicer readme, while i'm enjoying the weather with a cold racer 5 2 months ago
src format if/then/if else/if else/... as one nesting level 2 months ago
tests format if/then/if else/if else/... as one nesting level 2 months ago
.gitignore import tokenizer from zdani 9 months ago
LICENSE.txt include a readme and license 8 months ago
README.md nicer readme, while i'm enjoying the weather with a cold racer 5 2 months ago
package-lock.json 2.2.3 2 months ago
package.json 2.2.3 2 months ago
tsconfig.json fix valueFor to be a promise too (sigh) 3 months ago

README.md

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 or for
  • 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)

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 robey@lag.net