#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)
-/* DIGIT = [0-9]
- DIGITS = DIGIT+
- DECIMALS = (+|-)? DIGIT* "."
- digits ::= digits DIGIT.
- decimals ::= digits DOT digits.
- decimals ::= DOT digits.
- decimals ::= digits DOT.
- number ::= digits.
- number ::= PLUS digits.
- number ::= MINUS digits.
- number ::= decimals.
- number ::= MINUS decimals.
- number ::= PLUS decimals.
-
-*/
token_t PSI_ParserScan(PSI_Parser *P)
{
for (;;) {
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_];
QUOTED_STRING = "\"" ([^\"])+ "\"";
NUMBER = [+-]? [0-9]* "."? [0-9]+ ([eE] [+-]? [0-9]+)?;
- "#" .* "\n" { ++P->line; RETURN(PSI_T_COMMENT);}
+ ("#"|"//") .* "\n" { ++P->line; continue;}
"(" {RETURN(PSI_T_LPAREN);}
")" {RETURN(PSI_T_RPAREN);}
";" {RETURN(PSI_T_EOS);}
"]" {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);}
'UINT32_T' {RETURN(PSI_T_UINT32);}
'INT64_T' {RETURN(PSI_T_INT64);}
'UINT64_T' {RETURN(PSI_T_UINT64);}
+ '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);}
'SET' {RETURN(PSI_T_SET);}
'RETURN' {RETURN(PSI_T_RETURN);}
'FREE' {RETURN(PSI_T_FREE);}
+ 'TEMP' {RETURN(PSI_T_TEMP);}
'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);}