X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fnasal%2Fparse.h;h=1574ea305f3999f869355d4c066d58adf203e572;hb=c82df0590dd46347e2f1d0dca4cc3712f67f3654;hp=1e5e2d90cca097c28a786755b64b1456a3d27db8;hpb=966331dac7da0f9ec03ffeb052dd2cd72829b2eb;p=simgear.git diff --git a/simgear/nasal/parse.h b/simgear/nasal/parse.h index 1e5e2d90..1574ea30 100644 --- a/simgear/nasal/parse.h +++ b/simgear/nasal/parse.h @@ -7,23 +7,28 @@ #include "data.h" #include "code.h" -enum { +enum tok { TOK_TOP=1, TOK_AND, TOK_OR, TOK_NOT, TOK_LPAR, TOK_RPAR, TOK_LBRA, TOK_RBRA, TOK_LCURL, TOK_RCURL, TOK_MUL, TOK_PLUS, TOK_MINUS, TOK_NEG, TOK_DIV, TOK_CAT, TOK_COLON, TOK_DOT, TOK_COMMA, TOK_SEMI, TOK_ASSIGN, TOK_LT, TOK_LTE, TOK_EQ, TOK_NEQ, TOK_GT, TOK_GTE, TOK_IF, TOK_ELSIF, TOK_ELSE, TOK_FOR, TOK_FOREACH, TOK_WHILE, TOK_RETURN, TOK_BREAK, TOK_CONTINUE, TOK_FUNC, TOK_SYMBOL, - TOK_LITERAL, TOK_EMPTY, TOK_NIL, TOK_ELLIPSIS, TOK_QUESTION, TOK_VAR + TOK_LITERAL, TOK_EMPTY, TOK_NIL, TOK_ELLIPSIS, TOK_QUESTION, TOK_VAR, + TOK_PLUSEQ, TOK_MINUSEQ, TOK_MULEQ, TOK_DIVEQ, TOK_CATEQ, + TOK_FORINDEX }; +// Precedence rules +enum { PREC_BINARY=1, PREC_REVERSE, PREC_PREFIX, PREC_SUFFIX }; + struct Token { - int type; + enum tok type; int line; char* str; int strlen; + int rule; double num; - struct Token* parent; struct Token* next; struct Token* prev; struct Token* children; @@ -58,7 +63,7 @@ struct Parser { // Computed line number table for the lexer int* lines; int nLines; - + struct CodeGenerator* cg; }; @@ -75,6 +80,11 @@ struct CodeGenerator { int nLineIps; // number of pairs int nextLineIp; + int* argSyms; + int* optArgSyms; + int* optArgVals; + naRef restArgSym; + // Stack of "loop" frames for break/continue statements struct { int breakIP; @@ -92,6 +102,7 @@ void naParseInit(struct Parser* p); void* naParseAlloc(struct Parser* p, int bytes); void naParseDestroy(struct Parser* p); void naLex(struct Parser* p); +int naLexUtf8C(char* s, int len, int* used); /* in utf8lib.c */ naRef naCodeGen(struct Parser* p, struct Token* block, struct Token* arglist); void naParse(struct Parser* p);