11 TOK_TOP=1, TOK_AND, TOK_OR, TOK_NOT, TOK_BIT_AND, TOK_BIT_OR, TOK_BIT_XOR,
12 TOK_BIT_NEG, TOK_LPAR, TOK_RPAR, TOK_LBRA,
13 TOK_RBRA, TOK_LCURL, TOK_RCURL, TOK_MUL, TOK_PLUS, TOK_MINUS, TOK_NEG,
14 TOK_DIV, TOK_CAT, TOK_COLON, TOK_DOT, TOK_COMMA, TOK_SEMI,
15 TOK_ASSIGN, TOK_LT, TOK_LTE, TOK_EQ, TOK_NEQ, TOK_GT, TOK_GTE,
16 TOK_IF, TOK_ELSIF, TOK_ELSE, TOK_FOR, TOK_FOREACH, TOK_WHILE,
17 TOK_RETURN, TOK_BREAK, TOK_CONTINUE, TOK_FUNC, TOK_SYMBOL,
18 TOK_LITERAL, TOK_EMPTY, TOK_NIL, TOK_ELLIPSIS, TOK_QUESTION, TOK_VAR,
19 TOK_PLUSEQ, TOK_MINUSEQ, TOK_MULEQ, TOK_DIVEQ, TOK_CATEQ, TOK_BIT_ANDEQ,
20 TOK_BIT_OREQ, TOK_BIT_XOREQ, TOK_FORINDEX
24 enum { PREC_BINARY=1, PREC_REVERSE, PREC_PREFIX, PREC_SUFFIX };
35 struct Token* children;
36 struct Token* lastChild;
40 // Handle to the Nasal interpreter
41 struct Context* context;
47 // The parse tree ubernode
54 // Input file parameters (for generating pretty stack dumps)
58 // Chunk allocator. Throw away after parsing.
64 // Computed line number table for the lexer
68 struct CodeGenerator* cg;
71 struct CodeGenerator {
74 // Accumulated byte code array
75 unsigned short* byteCode;
79 // Inst. -> line table, stores pairs of {ip, line}
80 unsigned short* lineIps;
81 int nLineIps; // number of pairs
89 // Stack of "loop" frames for break/continue statements
94 } loops[MAX_MARK_DEPTH];
97 // Dynamic storage for constants, to be compiled into a static table
101 void naParseError(struct Parser* p, char* msg, int line);
102 void naParseInit(struct Parser* p);
103 void* naParseAlloc(struct Parser* p, int bytes);
104 void naParseDestroy(struct Parser* p);
105 void naLex(struct Parser* p);
106 int naLexUtf8C(char* s, int len, int* used); /* in utf8lib.c */
107 naRef naCodeGen(struct Parser* p, struct Token* block, struct Token* arglist);
109 void naParse(struct Parser* p);