* in-game scripting interpreter
*/
+/* special tokens */
+
+#define L_KW_FUNCTION "fn"
+#define L_KW_IF "if"
+#define L_KW_WHILE "while"
+#define L_KW_FOR "for"
+#define L_KW_DO "do"
+
+#define L_TOK_OPEN_SCOPE "{"
+#define L_TOK_CLOSE_SCOPE "}"
+#define L_TOK_OPEN_PAREN "("
+#define L_TOK_CLOSE_PAREN ")"
+#define L_TOK_OPEN_IDX "["
+#define L_TOK_CLOSE_IDX "]"
+#define L_TOK_COMMA ","
+#define L_TOK_SEMICOLON ";"
+#define L_TOK_DOT "."
+#define L_TOK_DQUOTE "\""
+#define L_TOK_SQUOTE "'"
+#define L_TOK_ASSIGN "="
+
+#define L_OP_PLUS "+"
+#define L_OP_MINUS "-"
+#define L_OP_MUL "*"
+#define L_OP_DIV "/"
+#define L_OP_MOD "%"
+#define L_OP_EQUAL "=="
+#define L_OP_NOT_EQUAL "!="
+#define L_OP_NOT "!"
+#define L_OP_BIT_XOR "^"
+#define L_OP_BIT_OR "|"
+#define L_OP_BIT_AND "&"
+#define L_OP_BIT_NOT "~"
+#define L_OP_OR "||"
+#define L_OP_AND "&&"
+
+enum l_token_type {
+ L_TOKT_FN,
+ L_TOKT_IF,
+ L_TOKT_WHILE,
+ L_TOKT_FOR,
+ L_TOKT_DO,
+ L_TOKT_OPEN_SCOPE,
+ L_TOKT_CLOSE_SCOPE,
+ L_TOKT_OPEN_PAREN,
+ L_TOKT_CLOSE_PAREN,
+ L_TOKT_OPEN_IDX,
+ L_TOKT_CLOSE_IDX,
+ L_TOKT_COMMA,
+ L_TOKT_SEMICLONON,
+ L_TOKT_DOT,
+ L_TOKT_DQUOTE,
+ L_TOKT_SQUOTE,
+ L_TOKT_ASSIGN,
+ L_TOKT_OP_PLUS,
+ L_TOKT_OP_MINUS,
+ L_TOKT_OP_DIV,
+ L_TOKT_OP_MUL,
+ L_TOKT_OP_MOD,
+ L_TOKT_OP_EQUAL,
+ L_TOKT_OP_NOT_EQUAL,
+ L_TOKT_OP_NOT,
+ L_TOKT_OP_BIT_XOR,
+ L_TOKT_OP_BIT_OR,
+ L_TOKT_OP_BIT_AND,
+ L_TOKT_OP_BIT_NOT,
+ L_TOKT_OP_OR,
+ L_TOKT_OP_AND
+};
+
enum l_lsl_flags {
L_LSL_F_NONE = 0
};