X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=src%2Fparser.re;h=d5a0f8e0205824d32aaf0134341fb6d8e5c10f7c;hp=08478bcd3659e63699904dddd3a1bc3ed8a2c557;hb=756a2c4350162a9a7f930bdc0ec7718ff13ea48c;hpb=4b5ceb304b924c50eaf8263ad394493ff806fed4 diff --git a/src/parser.re b/src/parser.re index 08478bc..d5a0f8e 100644 --- a/src/parser.re +++ b/src/parser.re @@ -141,6 +141,9 @@ void PSI_ParserFree(PSI_Parser **P) #define RETURN(t) do { \ P->num = t; \ + if (P->flags & PSI_PARSER_DEBUG) { \ + fprintf(stderr, "PSI> TOKEN: %d %.*s (EOF=%d)\n", P->num, (int) (P->cur-P->tok), P->tok, P->num == PSI_T_EOF); \ + } \ return t; \ } while(1) @@ -154,7 +157,7 @@ token_t PSI_ParserScan(PSI_Parser *P) re2c:define:YYCURSOR = P->cur; re2c:define:YYLIMIT = P->lim; re2c:define:YYMARKER = P->mrk; - re2c:define:YYFILL = "{ if (!PSI_ParserFill(P,@@)) RETURN(-1); }"; + re2c:define:YYFILL = "{ if (!PSI_ParserFill(P,@@)) RETURN(PSI_T_EOF); }"; re2c:yyfill:parameter = 0; B = [^a-zA-Z0-9_]; @@ -176,8 +179,11 @@ token_t PSI_ParserScan(PSI_Parser *P) "]" {RETURN(PSI_T_RBRACKET);} "=" {RETURN(PSI_T_EQUALS);} "$" {RETURN(PSI_T_DOLLAR);} - "*" {RETURN(PSI_T_POINTER);} - "&" {RETURN(PSI_T_REFERENCE);} + "*" {RETURN(PSI_T_ASTERISK);} + "&" {RETURN(PSI_T_AMPERSAND);} + "+" {RETURN(PSI_T_PLUS);} + "-" {RETURN(PSI_T_MINUS);} + "/" {RETURN(PSI_T_SLASH);} [\r\n] { ++P->line; continue; } [\t ]+ { continue; } 'TRUE' {RETURN(PSI_T_TRUE);} @@ -200,6 +206,7 @@ token_t PSI_ParserScan(PSI_Parser *P) 'UNSIGNED' {RETURN(PSI_T_UNSIGNED);} 'STRING' {RETURN(PSI_T_STRING);} 'ARRAY' {RETURN(PSI_T_ARRAY);} + 'OBJECT' {RETURN(PSI_T_OBJECT);} 'FUNCTION' {RETURN(PSI_T_FUNCTION);} 'TYPEDEF' {RETURN(PSI_T_TYPEDEF);} 'STRUCT' {RETURN(PSI_T_STRUCT);} @@ -211,11 +218,14 @@ token_t PSI_ParserScan(PSI_Parser *P) 'FREE' {RETURN(PSI_T_FREE);} 'STRLEN' {RETURN(PSI_T_STRLEN);} 'STRVAL' {RETURN(PSI_T_STRVAL);} + 'PATHVAL' {RETURN(PSI_T_PATHVAL);} 'INTVAL' {RETURN(PSI_T_INTVAL);} 'FLOATVAL' {RETURN(PSI_T_FLOATVAL);} 'BOOLVAL' {RETURN(PSI_T_BOOLVAL);} 'ARRVAL' {RETURN(PSI_T_ARRVAL);} + 'OBJVAL' {RETURN(PSI_T_OBJVAL);} 'CALLOC' {RETURN(PSI_T_CALLOC);} + 'TO_OBJECT' {RETURN(PSI_T_TO_OBJECT);} 'TO_ARRAY' {RETURN(PSI_T_TO_ARRAY);} 'TO_STRING' {RETURN(PSI_T_TO_STRING);} 'TO_INT' {RETURN(PSI_T_TO_INT);}