From 252af820ecf406c7dac397bcb54f763883e1eb8f Mon Sep 17 00:00:00 2001 From: "jolsa@redhat.com" Date: Sat, 12 Mar 2011 13:59:21 +0100 Subject: adding support for configuration file - separating bison/flex functions for args and config - the "include file support" unified among new conf and C header parsing - support for following options: HEADERS INDENT_SYM PIPE TIMESTAMP FRAMESIZE FRAMESIZE_CHECK HIDE_TID FOLLOW_FORK FOLLOW_EXEC DEMANGLE BRACES ENABLE_ARGS DETAIL_ARGS --- src/config-flex.l | 119 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 src/config-flex.l (limited to 'src/config-flex.l') diff --git a/src/config-flex.l b/src/config-flex.l new file mode 100644 index 0000000..61a775e --- /dev/null +++ b/src/config-flex.l @@ -0,0 +1,119 @@ +/* + 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})+ +alphnum [-0-9a-zA-Z_] +name ({alphnum})+ +filename ([-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; } +{filename} { RETURN_STR(FILENAME); } +"\"" { 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; } + +{bool} { RETURN_STR(BOOL); } +{value} { RETURN_LONG(VALUE); } +{filename} { RETURN_STR(FILENAME); } +{comment} { ; } +"}" { BEGIN(INITIAL); 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); +} -- cgit