X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=plugins%2Fctf%2Fcommon%2Fmetadata%2Flexer.l;h=694ddc3aed28258b26ae0f36a27577841470a43b;hb=68b66a256a54d32992dfefeaad11eea88b7df234;hp=b71308a1337edf70db3411884a275bc3996f35af;hpb=06a626b83f4426ea5b8d3199d1edf5a07594026e;p=babeltrace.git diff --git a/plugins/ctf/common/metadata/lexer.l b/plugins/ctf/common/metadata/lexer.l index b71308a1..694ddc3a 100644 --- a/plugins/ctf/common/metadata/lexer.l +++ b/plugins/ctf/common/metadata/lexer.l @@ -25,20 +25,26 @@ * SOFTWARE. */ +#define BT_LOG_TAG "PLUGIN-CTF-METADATA-LEXER" +#include "logging.h" + #include #include -#include #include "scanner.h" #include "parser.h" #include "ast.h" +#define YY_FATAL_ERROR(_msg) BT_LOGF_STR(_msg) + #define PARSE_INTEGER_LITERAL(base) \ do { \ errno = 0; \ yylval->ull = strtoull(yytext, NULL, base); \ if (errno) { \ - printfl_perror(yylineno, "Integer literal"); \ - return ERROR; \ + _BT_LOGE_LINENO(yylineno, \ + "Cannot parser constant integer: " \ + "base=%d, text=\"%s\"", base, yytext); \ + return CTF_ERROR; \ } \ } while (0) @@ -72,7 +78,7 @@ IDENTIFIER {ID_NONDIGIT}({ID_NONDIGIT}|{DIGIT})* /* * Using start conditions to deal with comments * and strings. - */ + */ "/*" BEGIN(comment_ml); [^*\n]* /* eat anything that's not a '*' */ @@ -82,61 +88,61 @@ IDENTIFIER {ID_NONDIGIT}({ID_NONDIGIT}|{DIGIT})* "//"[^\n]*\n /* skip comment */ -L?\"(\\.|[^\\"])*\" { if (import_string(yyextra, yylval, yytext, '\"') < 0) return ERROR; else return STRING_LITERAL; } -L?\'(\\.|[^\\'])*\' { if (import_string(yyextra, yylval, yytext, '\'') < 0) return ERROR; else return CHARACTER_LITERAL; } +L?\"(\\.|[^\\"])*\" { if (import_string(yyextra, yylval, yytext, '\"') < 0) return CTF_ERROR; else return CTF_STRING_LITERAL; } +L?\'(\\.|[^\\'])*\' { if (import_string(yyextra, yylval, yytext, '\'') < 0) return CTF_ERROR; else return CTF_CHARACTER_LITERAL; } -"[" return LSBRAC; -"]" return RSBRAC; -"(" return LPAREN; -")" return RPAREN; -"{" return LBRAC; -"}" return RBRAC; -"->" return RARROW; -"*" return STAR; -"+" return PLUS; -"-" return MINUS; -"<" return LT; -">" return GT; -:= return TYPEASSIGN; -: return COLON; -; return SEMICOLON; -"..." return DOTDOTDOT; -"." return DOT; -= return EQUAL; -"," return COMMA; -align setstring(yyextra, yylval, yytext); return TOK_ALIGN; -const setstring(yyextra, yylval, yytext); return CONST; -char setstring(yyextra, yylval, yytext); return CHAR; -clock setstring(yyextra, yylval, yytext); return CLOCK; -double setstring(yyextra, yylval, yytext); return DOUBLE; -enum setstring(yyextra, yylval, yytext); return ENUM; -env setstring(yyextra, yylval, yytext); return ENV; -event setstring(yyextra, yylval, yytext); return EVENT; -floating_point setstring(yyextra, yylval, yytext); return FLOATING_POINT; -float setstring(yyextra, yylval, yytext); return FLOAT; -integer setstring(yyextra, yylval, yytext); return INTEGER; -int setstring(yyextra, yylval, yytext); return INT; -long setstring(yyextra, yylval, yytext); return LONG; -short setstring(yyextra, yylval, yytext); return SHORT; -signed setstring(yyextra, yylval, yytext); return SIGNED; -stream setstring(yyextra, yylval, yytext); return STREAM; -string setstring(yyextra, yylval, yytext); return STRING; -struct setstring(yyextra, yylval, yytext); return STRUCT; -trace setstring(yyextra, yylval, yytext); return TRACE; -callsite setstring(yyextra, yylval, yytext); return CALLSITE; -typealias setstring(yyextra, yylval, yytext); return TYPEALIAS; -typedef setstring(yyextra, yylval, yytext); return TYPEDEF; -unsigned setstring(yyextra, yylval, yytext); return UNSIGNED; -variant setstring(yyextra, yylval, yytext); return VARIANT; -void setstring(yyextra, yylval, yytext); return VOID; -_Bool setstring(yyextra, yylval, yytext); return _BOOL; -_Complex setstring(yyextra, yylval, yytext); return _COMPLEX; -_Imaginary setstring(yyextra, yylval, yytext); return _IMAGINARY; -[1-9]{DIGIT}*{INTEGER_SUFFIX}? PARSE_INTEGER_LITERAL(10); return INTEGER_LITERAL; -0{OCTALDIGIT}*{INTEGER_SUFFIX}? PARSE_INTEGER_LITERAL(8); return INTEGER_LITERAL; -0[xX]{HEXDIGIT}+{INTEGER_SUFFIX}? PARSE_INTEGER_LITERAL(16); return INTEGER_LITERAL; +"[" return CTF_LSBRAC; +"]" return CTF_RSBRAC; +"(" return CTF_LPAREN; +")" return CTF_RPAREN; +"{" return CTF_LBRAC; +"}" return CTF_RBRAC; +"->" return CTF_RARROW; +"*" return CTF_STAR; +"+" return CTF_PLUS; +"-" return CTF_MINUS; +"<" return CTF_LT; +">" return CTF_GT; +:= return CTF_TYPEASSIGN; +: return CTF_COLON; +; return CTF_SEMICOLON; +"..." return CTF_DOTDOTDOT; +"." return CTF_DOT; += return CTF_EQUAL; +"," return CTF_COMMA; +align setstring(yyextra, yylval, yytext); return CTF_TOK_ALIGN; +const setstring(yyextra, yylval, yytext); return CTF_CONST; +char setstring(yyextra, yylval, yytext); return CTF_CHAR; +clock setstring(yyextra, yylval, yytext); return CTF_CLOCK; +double setstring(yyextra, yylval, yytext); return CTF_DOUBLE; +enum setstring(yyextra, yylval, yytext); return CTF_ENUM; +env setstring(yyextra, yylval, yytext); return CTF_ENV; +event setstring(yyextra, yylval, yytext); return CTF_EVENT; +floating_point setstring(yyextra, yylval, yytext); return CTF_FLOATING_POINT; +float setstring(yyextra, yylval, yytext); return CTF_FLOAT; +integer setstring(yyextra, yylval, yytext); return CTF_INTEGER; +int setstring(yyextra, yylval, yytext); return CTF_INT; +long setstring(yyextra, yylval, yytext); return CTF_LONG; +short setstring(yyextra, yylval, yytext); return CTF_SHORT; +signed setstring(yyextra, yylval, yytext); return CTF_SIGNED; +stream setstring(yyextra, yylval, yytext); return CTF_STREAM; +string setstring(yyextra, yylval, yytext); return CTF_STRING; +struct setstring(yyextra, yylval, yytext); return CTF_STRUCT; +trace setstring(yyextra, yylval, yytext); return CTF_TRACE; +callsite setstring(yyextra, yylval, yytext); return CTF_CALLSITE; +typealias setstring(yyextra, yylval, yytext); return CTF_TYPEALIAS; +typedef setstring(yyextra, yylval, yytext); return CTF_TYPEDEF; +unsigned setstring(yyextra, yylval, yytext); return CTF_UNSIGNED; +variant setstring(yyextra, yylval, yytext); return CTF_VARIANT; +void setstring(yyextra, yylval, yytext); return CTF_VOID; +_Bool setstring(yyextra, yylval, yytext); return CTF_BOOL; +_Complex setstring(yyextra, yylval, yytext); return CTF_COMPLEX; +_Imaginary setstring(yyextra, yylval, yytext); return CTF_IMAGINARY; +[1-9]{DIGIT}*{INTEGER_SUFFIX}? PARSE_INTEGER_LITERAL(10); return CTF_INTEGER_LITERAL; +0{OCTALDIGIT}*{INTEGER_SUFFIX}? PARSE_INTEGER_LITERAL(8); return CTF_INTEGER_LITERAL; +0[xX]{HEXDIGIT}+{INTEGER_SUFFIX}? PARSE_INTEGER_LITERAL(16); return CTF_INTEGER_LITERAL; -{IDENTIFIER} printf_debug("\n", yytext); setstring(yyextra, yylval, yytext); if (is_type(yyextra, yytext)) return ID_TYPE; else return IDENTIFIER; +{IDENTIFIER} BT_LOGV("Got identifier: id=\"%s\"", yytext); setstring(yyextra, yylval, yytext); if (is_type(yyextra, yytext)) return ID_TYPE; else return IDENTIFIER; [ \t\r\n] ; /* ignore */ -. printfl_error(yylineno, "invalid character '0x%02X'", yytext[0]); return ERROR; +. _BT_LOGE_LINENO(yylineno, "Invalid character: char=\"%c\", val=0x%02x", isprint(yytext[0]) ? yytext[0] : '\0', yytext[0]); return CTF_ERROR; %%