LIL Scripting Language
Overview
LIL
, or little interpretted language, is a
scripting language that somewhat resembles
TCL
. The language is easy to embed
into other
programs, as it only conists of a small C and header
file.
The homepage of LIL can be found at http://runtimeterror.com/tech/lil/.
Most of the documentation for syntax and API can be found here: http://runtimeterror.com/tech/lil/readme.txt.
Syntax Examples
Hello World
Hello world:
print hello world
Function starts with the first word, arguments follow. Arguments are words separated by spaces.
Arithmetic
Arithmetic is done with expr
. Bitwise operations
work! It seems attention to operator precedence
is also here as well.
print [expr 4 + 4 * 2]
print [1 << 4]
Line Breaks
A new function starts at each line break by default. Alternatively, semi-colons can be used to have multiple function calls on one line.
# print hi there on two lines
print hi
print there
# same thing, but put the calls on one line
print hi ;print there
# break up function into lines
print hi \
there
Functions
func foo {a b} {print $a $b}
Variables
Variables are set with set
.
set x 4; print $x
Arrays/Lists
LIL calls these things lists.
set foo {paul john george}
To get the number of items from a list, run count
.
print [count $foo]
To get an item from a list, use index
.
print [index $foo 0]
Use append
to append an item to a list.
append foo ringo
For Loop
for {set i 0} {$i < 10} {inc i} {
print $i
}
Command line arguments
Stored as a list via $argv
.
Block Comments
Separated by ##
and ##
##
hello!
this is a block comment!##
##
this is
another
block
comment
##
API Usage Examples
Here's a really quick "hello world" API example I made:
#include <stdlib.h>
#include <stdio.h>
#include "lil.h"
static lil_value_t foo(lil_t lil, size_t argc, lil_value_t *argv)
{
printf("hello from C!\n");
printf("nargs: %ld\n", argc);
return NULL;
}
int main(int argc, char *argv[])
{
lil_t lil;
lil_value_t val;
lil = lil_new();
val = lil_parse(lil, "print hello there!\n", 19, 0);
lil_free_value(val);
lil_register(lil, "foo", foo);
val = lil_parse(lil, "foo 1.234\n", 10, 0);
lil_free_value(val);
lil_free(lil);
return 0;
}