X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=formats%2Fctf%2Fmetadata%2Fctf-lexer.l;h=26aa1bce2322d2571a9b57b24d614484009e3cdc;hp=763a1bb8d7c99974f6aab0c0c35abd7cd36a339d;hb=c462e188f3e7819c7bc74f671038cdbf36e8c3c0;hpb=8b9d5b5e700bdf66edf4c0fa035fdf10cb3b36f3 diff --git a/formats/ctf/metadata/ctf-lexer.l b/formats/ctf/metadata/ctf-lexer.l index 763a1bb8..26aa1bce 100644 --- a/formats/ctf/metadata/ctf-lexer.l +++ b/formats/ctf/metadata/ctf-lexer.l @@ -1,13 +1,49 @@ %{ +/* + * ctf-lexer.l + * + * Common Trace Formal Lexer + * + * Copyright 2010 - Mathieu Desnoyers + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + #include +#include +#include "ctf-scanner.h" #include "ctf-parser.h" #include "ctf-ast.h" -extern YYSTYPE yylval; -extern void setstring(const char *src); +__attribute__((visibility("hidden"))) +void setstring(struct ctf_scanner *scanner, YYSTYPE *lvalp, const char *src); + +static void yyunput (int c, register char * yy_bp , yyscan_t yyscanner) + __attribute__((unused)); +static int input (yyscan_t yyscanner) __attribute__((unused)); + %} %x comment_ml comment_sl string_lit char_const +%option reentrant yylineno noyywrap bison-bridge +%option extra-type="struct ctf_scanner *" + /* bison-locations */ INTEGER_SUFFIX [ \n\t]*(U|UL|ULL|LU|LLU|Ul|Ull|lU|llU|u|uL|uLL|Lu|LLu|ul|ull|lu|llu) DIGIT [0-9] NONDIGIT [a-zA-Z_] @@ -44,7 +80,7 @@ L\" BEGIN(string_lit); return STRING_LITERAL_START; ESCSEQ return ESCSEQ; \n ; /* ignore */ -. return CHAR_STRING_TOKEN; +. setstring(yyextra, yylval, yytext); return CHAR_STRING_TOKEN; "[" return LSBRAC; "]" return RSBRAC; @@ -65,34 +101,38 @@ L\" BEGIN(string_lit); return STRING_LITERAL_START; "." return DOT; = return EQUAL; "," return COMMA; -const return CONST; -char return CHAR; -double return DOUBLE; -enum return ENUM; -event return EVENT; -floating_point return FLOATING_POINT; -float return FLOAT; -integer return INTEGER; -int return INT; -long return LONG; -short return SHORT; -signed return SIGNED; -stream return STREAM; -string return STRING; -struct return STRUCT; -trace return TRACE; -typealias return TYPEALIAS; -typedef return TYPEDEF; -unsigned return UNSIGNED; -variant return VARIANT; -void return VOID; -_Bool return _BOOL; -_Complex return _COMPLEX; -_Imaginary return _IMAGINARY; -[1-9]{DIGIT}*{INTEGER_SUFFIX}? return DECIMAL_CONSTANT; -0{OCTALDIGIT}*{INTEGER_SUFFIX}? return OCTAL_CONSTANT; -0[xX]{HEXDIGIT}+{INTEGER_SUFFIX}? return HEXADECIMAL_CONSTANT; -{IDENTIFIER} fprintf(stderr, "\n", yytext); setstring(yytext); if (is_type(yytext)) return ID_TYPE; else return IDENTIFIER; +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}? setstring(yyextra, yylval, yytext); return DECIMAL_CONSTANT; +0{OCTALDIGIT}*{INTEGER_SUFFIX}? setstring(yyextra, yylval, yytext); return OCTAL_CONSTANT; +0[xX]{HEXDIGIT}+{INTEGER_SUFFIX}? setstring(yyextra, yylval, yytext); return HEXADECIMAL_CONSTANT; +{IDENTIFIER} printf_debug("\n", yytext); setstring(yyextra, yylval, yytext); if (is_type(yyextra, yytext)) return ID_TYPE; else return IDENTIFIER; [ \t\n]+ ; /* ignore */ . return ERROR; %%