/* Copyright (C) 2011 Jiri Olsa This file is part of the latrace. The latrace is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. The latrace is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with the latrace (file COPYING). If not, see . */ %option prefix="lt_config_" %{ #include #include "config.h" #include "config-bison.h" #include "lib-include.h" extern struct lt_include *lt_config_sinc; #define NEW_LINE() \ do { \ lt_inc_stack(lt_config_sinc)->lineno++; \ } while(0) #define RETURN_STR(token) \ do { \ lt_config_lval.s = strdup(lt_config_text); return token; \ } while(0) #define RETURN_LONG(token) \ do { \ lt_config_lval.l = atol(lt_config_text); return token; \ } while(0) %} num [-0-9] value ({num})+ name ([-0-9a-zA-Z\./_\-\*])+ bool YES|NO comment ^([\s\t])*#.* %x comment include options %% <> { return END; } "\n" { NEW_LINE(); } {comment} { ; } . { ; } INCLUDE { BEGIN(include); return INCLUDE; } {name} { RETURN_STR(NAME); } "\"" { return '"'; } \n { BEGIN(INITIAL); NEW_LINE(); } . { ; } OPTIONS { BEGIN(options); return OPTIONS; } HEADERS { return OPT_HEADERS; } INDENT_SYM { return OPT_INDENT_SYM; } PIPE { return OPT_PIPE; } TIMESTAMP { return OPT_TIMESTAMP; } FRAMESIZE { return OPT_FRAMESIZE; } FRAMESIZE_CHECK { return OPT_FRAMESIZE_CHECK; } HIDE_TID { return OPT_HIDE_TID; } FOLLOW_FORK { return OPT_FOLLOW_FORK; } FOLLOW_EXEC { return OPT_FOLLOW_EXEC; } DEMANGLE { return OPT_DEMANGLE; } BRACES { return OPT_BRACES; } ENABLE_ARGS { return OPT_ENABLE_ARGS; } DETAIL_ARGS { return OPT_DETAIL_ARGS; } OUTPUT_TTY { return OPT_OUTPUT_TTY; } LIBS { return OPT_LIBS; } LIBS_TO { return OPT_LIBS_TO; } LIBS_FROM { return OPT_LIBS_FROM; } SYM { return OPT_SYM; } SYM_OMIT { return OPT_SYM_OMIT; } SYM_BELOW { return OPT_SYM_BELOW; } SYM_NOEXIT { return OPT_SYM_NOEXIT; } ARGS_STRING_POINTER_LENGTH { return OPT_ARGS_STRING_POINTER_LENGTH; } {bool} { RETURN_STR(BOOL); } {value} { RETURN_LONG(VALUE); } {name} { RETURN_STR(NAME); } {comment} { ; } "}" { BEGIN(INITIAL); return '}'; } "{" { return '{'; } "=" { return '='; } "\"" { return '"'; } "," { return ','; } "\\" { ; } "\n" { NEW_LINE(); } . { ; } %% #ifndef yywrap int yywrap() { return 1; /* XXX not to get the compiler 'not used' warning */ yyunput(0, NULL); input(); } #endif void lt_config_error(const char *m) { printf("conf file [%s] line %d: %s\n", lt_inc_stack(lt_config_sinc)->file, lt_inc_stack(lt_config_sinc)->lineno, m); }