char start_of_expression;
-static inline int mkid(int type)
+static inline int m(int type)
{
char*s = malloc(yyleng+1);
memcpy(s, yytext, yyleng);
s[yyleng]=0;
- avm2_lval.id = s;
- return type;
-}
-static inline int m(int type)
-{
- avm2_lval.token = type;
+ NEW(token_t,t);
+ t->type = type;
+ t->text = s;
+ avm2_lval.token = t;
return type;
}
-
static char numberbuf[64];
static inline int handlenumber()
{
is {c();return m(KW_IS) ;}
if {c();return m(KW_IF) ;}
as {c();return m(KW_AS);}
-{NAME} {c();BEGIN(INITIAL);return mkid(T_IDENTIFIER);}
+{NAME} {c();BEGIN(INITIAL);return m(T_IDENTIFIER);}
[+-\/*^~@$!%&\(=\[\]\{\}|?:;,.<>] {c();BEGIN(REGEXPOK);return m(yytext[0]);}
[\)\]] {c();BEGIN(INITIAL);return m(yytext[0]);}
}
static char mbuf[256];
-char*token2string(enum yytokentype nr)
+char*token2string(token_t*t)
{
+ int nr=t->type;
if(nr==T_STRING) return "<string>";
else if(nr==T_INT) return "<int>";
else if(nr==T_UINT) return "<uint>";
else if(nr==KW_VAR) return "var";
else if(nr==KW_IS) return "is";
else if(nr==KW_AS) return "as";
- else if(nr==T_IDENTIFIER) return "ID";
- else {
+ else if(nr==T_IDENTIFIER) {
+ if(strlen(t->text)>sizeof(mbuf)-1)
+ return "ID(...)";
+ sprintf(mbuf, "ID(%s)", t->text);
+ return mbuf;
+ } else {
sprintf(mbuf, "%d", nr);
return mbuf;
}