X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=src%2Fparser.re;h=61c328d815bab5f210b772c806f6fc60b9b02736;hp=5b7e80e83c24d81a36892167a51bbd6094704351;hb=e8a409b21cb50f5931ab02ce6ab4f4406be94394;hpb=1c837573a87e0d375768e990a28d1b2706dbaf43 diff --git a/src/parser.re b/src/parser.re index 5b7e80e..61c328d 100644 --- a/src/parser.re +++ b/src/parser.re @@ -19,8 +19,10 @@ PSI_Parser *PSI_ParserInit(PSI_Parser *P, const char *filename, psi_error_cb err fp = fopen(filename, "r"); if (!fp) { - error(NULL, PSI_WARNING, "Could not open '%s' for reading: %s", - filename, strerror(errno)); + if (!(flags & PSI_PARSER_SILENT)) { + error(NULL, NULL, PSI_WARNING, "Could not open '%s' for reading: %s", + filename, strerror(errno)); + } return NULL; } @@ -125,77 +127,6 @@ void PSI_ParserFree(PSI_Parser **P) # error BSIZE must be greater than YYMAXFILL #endif -#define PSI_T(n) \ -(n) == PSI_T_NAME ? "NAME" : \ -(n) == PSI_T_PLUS ? "PLUS" : \ -(n) == PSI_T_MINUS ? "MINUS" : \ -(n) == PSI_T_SLASH ? "SLASH" : \ -(n) == PSI_T_ASTERISK ? "ASTERISK" : \ -(n) == PSI_T_TEMP ? "TEMP" : \ -(n) == PSI_T_FREE ? "FREE" : \ -(n) == PSI_T_SET ? "SET" : \ -(n) == PSI_T_LET ? "LET" : \ -(n) == PSI_T_RETURN ? "RETURN" : \ -(n) == PSI_T_LIB ? "LIB" : \ -(n) == PSI_T_INT ? "INT" : \ -(n) == PSI_T_UNSIGNED ? "UNSIGNED" : \ -(n) == PSI_T_EOF ? "EOF" : \ -(n) == PSI_T_QUOTED_STRING ? "QUOTED_STRING" : \ -(n) == PSI_T_EOS ? "EOS" : \ -(n) == PSI_T_STRUCT ? "STRUCT" : \ -(n) == PSI_T_LBRACE ? "LBRACE" : \ -(n) == PSI_T_RBRACE ? "RBRACE" : \ -(n) == PSI_T_COLON ? "COLON" : \ -(n) == PSI_T_LPAREN ? "LPAREN" : \ -(n) == PSI_T_NUMBER ? "NUMBER" : \ -(n) == PSI_T_RPAREN ? "RPAREN" : \ -(n) == PSI_T_BOOL ? "BOOL" : \ -(n) == PSI_T_FLOAT ? "FLOAT" : \ -(n) == PSI_T_STRING ? "STRING" : \ -(n) == PSI_T_CONST ? "CONST" : \ -(n) == PSI_T_NSNAME ? "NSNAME" : \ -(n) == PSI_T_EQUALS ? "EQUALS" : \ -(n) == PSI_T_TYPEDEF ? "TYPEDEF" : \ -(n) == PSI_T_VOID ? "VOID" : \ -(n) == PSI_T_LBRACKET ? "LBRACKET" : \ -(n) == PSI_T_RBRACKET ? "RBRACKET" : \ -(n) == PSI_T_COMMA ? "COMMA" : \ -(n) == PSI_T_ELLIPSIS ? "ELLIPSIS" : \ -(n) == PSI_T_DOUBLE ? "DOUBLE" : \ -(n) == PSI_T_INT8 ? "INT8" : \ -(n) == PSI_T_UINT8 ? "UINT8" : \ -(n) == PSI_T_INT16 ? "INT16" : \ -(n) == PSI_T_UINT16 ? "UINT16" : \ -(n) == PSI_T_INT32 ? "INT32" : \ -(n) == PSI_T_UINT32 ? "UINT32" : \ -(n) == PSI_T_INT64 ? "INT64" : \ -(n) == PSI_T_UINT64 ? "UINT64" : \ -(n) == PSI_T_FUNCTION ? "FUNCTION" : \ -(n) == PSI_T_NULL ? "NULL" : \ -(n) == PSI_T_TRUE ? "TRUE" : \ -(n) == PSI_T_FALSE ? "FALSE" : \ -(n) == PSI_T_DOLLAR ? "DOLLAR" : \ -(n) == PSI_T_CALLOC ? "CALLOC" : \ -(n) == PSI_T_OBJVAL ? "OBJVAL" : \ -(n) == PSI_T_ARRVAL ? "ARRVAL" : \ -(n) == PSI_T_PATHVAL ? "PATHVAL" : \ -(n) == PSI_T_STRLEN ? "STRLEN" : \ -(n) == PSI_T_STRVAL ? "STRVAL" : \ -(n) == PSI_T_FLOATVAL ? "FLOATVAL" : \ -(n) == PSI_T_INTVAL ? "INTVAL" : \ -(n) == PSI_T_BOOLVAL ? "BOOLVAL" : \ -(n) == PSI_T_TO_OBJECT ? "TO_OBJECT" : \ -(n) == PSI_T_TO_ARRAY ? "TO_ARRAY" : \ -(n) == PSI_T_TO_STRING ? "TO_STRING" : \ -(n) == PSI_T_TO_INT ? "TO_INT" : \ -(n) == PSI_T_TO_FLOAT ? "TO_FLOAT" : \ -(n) == PSI_T_TO_BOOL ? "TO_BOOL" : \ -(n) == PSI_T_MIXED ? "MIXED" : \ -(n) == PSI_T_ARRAY ? "ARRAY" : \ -(n) == PSI_T_OBJECT ? "OBJECT" : \ -(n) == PSI_T_AMPERSAND ? "AMPERSAND" : \ - - #define RETURN(t) do { \ P->num = t; \ if (P->flags & PSI_PARSER_DEBUG) { \ @@ -233,6 +164,7 @@ token_t PSI_ParserScan(PSI_Parser *P) W = [a-zA-Z0-9_]; NAME = [a-zA-Z_]W*; NSNAME = (NAME)? ("\\" NAME)+; + DOLLAR_NAME = '$' NAME; QUOTED_STRING = "\"" ([^\"])+ "\""; NUMBER = [+-]? [0-9]* "."? [0-9]+ ([eE] [+-]? [0-9]+)?; @@ -248,7 +180,6 @@ token_t PSI_ParserScan(PSI_Parser *P) "[" {RETURN(PSI_T_LBRACKET);} "]" {RETURN(PSI_T_RBRACKET);} "=" {RETURN(PSI_T_EQUALS);} - "$" {RETURN(PSI_T_DOLLAR);} "*" {RETURN(PSI_T_ASTERISK);} "&" {RETURN(PSI_T_AMPERSAND);} "+" {RETURN(PSI_T_PLUS);} @@ -261,6 +192,7 @@ token_t PSI_ParserScan(PSI_Parser *P) 'FALSE' {RETURN(PSI_T_FALSE);} 'NULL' {RETURN(PSI_T_NULL);} 'MIXED' {RETURN(PSI_T_MIXED);} + 'CALLABLE' {RETURN(PSI_T_CALLABLE);} 'VOID' {RETURN(PSI_T_VOID);} 'BOOL' {RETURN(PSI_T_BOOL);} 'CHAR' {RETURN(PSI_T_CHAR);} @@ -282,6 +214,7 @@ token_t PSI_ParserScan(PSI_Parser *P) 'STRING' {RETURN(PSI_T_STRING);} 'ARRAY' {RETURN(PSI_T_ARRAY);} 'OBJECT' {RETURN(PSI_T_OBJECT);} + 'CALLBACK' {RETURN(PSI_T_CALLBACK);} 'FUNCTION' {RETURN(PSI_T_FUNCTION);} 'TYPEDEF' {RETURN(PSI_T_TYPEDEF);} 'STRUCT' {RETURN(PSI_T_STRUCT);} @@ -302,6 +235,7 @@ token_t PSI_ParserScan(PSI_Parser *P) 'BOOLVAL' {RETURN(PSI_T_BOOLVAL);} 'ARRVAL' {RETURN(PSI_T_ARRVAL);} 'OBJVAL' {RETURN(PSI_T_OBJVAL);} + 'ZVAL' {RETURN(PSI_T_ZVAL);} 'CALLOC' {RETURN(PSI_T_CALLOC);} 'TO_OBJECT' {RETURN(PSI_T_TO_OBJECT);} 'TO_ARRAY' {RETURN(PSI_T_TO_ARRAY);} @@ -312,6 +246,7 @@ token_t PSI_ParserScan(PSI_Parser *P) NUMBER {RETURN(PSI_T_NUMBER);} NAME {RETURN(PSI_T_NAME);} NSNAME {RETURN(PSI_T_NSNAME);} + DOLLAR_NAME {RETURN(PSI_T_DOLLAR_NAME);} QUOTED_STRING {RETURN(PSI_T_QUOTED_STRING);} [^] {break;} */