TOKEN_KEYWORD, /* loop */
+ TOKEN_DOTS, /* 3 dots, ... */
+
TOKEN_STRINGCONST, /* not the typename but an actual "string" */
TOKEN_CHARCONST,
TOKEN_VECTORCONST,
"TOKEN_TYPENAME",
"TOKEN_OPERATOR",
"TOKEN_KEYWORD",
+ "TOKEN_DOTS",
"TOKEN_STRINGCONST",
"TOKEN_CHARCONST",
"TOKEN_VECTORCONST",
char peek[256];
size_t peekpos;
+ bool eof;
+
token *tok;
struct {
int framevalue;
MEM_VECTOR_MAKE(frame_macro, frames);
+ char *modelname;
} lex_file;
MEM_VECTOR_PROTO(lex_file, char, token);
lex_file* lex_open (const char *file);
void lex_close(lex_file *lex);
int lex_do (lex_file *lex);
+void lex_cleanup(void);
/* Parser
*
#define opid3(a,b,c) ((a<<16)|(b<<8)|c)
static const oper_info operators[] = {
+ { "(", 0, opid1('('), ASSOC_LEFT, 99, OP_PREFIX}, /* paren expression - non function call */
+
{ "++", 1, opid3('S','+','+'), ASSOC_LEFT, 16, OP_SUFFIX},
{ "--", 1, opid3('S','-','-'), ASSOC_LEFT, 16, OP_SUFFIX},
{ ".", 2, opid1('.'), ASSOC_LEFT, 15, 0 },
+ { "(", 0, opid1('('), ASSOC_LEFT, 15, 0 }, /* function call */
{ "!", 1, opid2('!', 'P'), ASSOC_RIGHT, 14, OP_PREFIX },
{ "~", 1, opid2('~', 'P'), ASSOC_RIGHT, 14, OP_PREFIX },