diff options
author | jolsa@redhat.com <jolsa@redhat.com> | 2011-03-12 13:59:21 +0100 |
---|---|---|
committer | Jiri Olsa <Jiri Olsa jolsa@redhat.com> | 2011-04-05 17:35:56 +0200 |
commit | 252af820ecf406c7dac397bcb54f763883e1eb8f (patch) | |
tree | 8302abfb4dffe2aa46d200e5d09590fd2a091dda /src/config-flex.l | |
parent | 79381b3ed5b490054cb211d0374f4338ef9d5931 (diff) | |
download | latrace-252af820ecf406c7dac397bcb54f763883e1eb8f.tar.gz latrace-252af820ecf406c7dac397bcb54f763883e1eb8f.tar.xz latrace-252af820ecf406c7dac397bcb54f763883e1eb8f.zip |
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
Diffstat (limited to 'src/config-flex.l')
-rw-r--r-- | src/config-flex.l | 119 |
1 files changed, 119 insertions, 0 deletions
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 <olsajiri@gmail.com> + + 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 + <http://www.gnu.org/licenses/>. +*/ + +%option prefix="lt_config_" + +%{ + +#include <string.h> + +#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 + +%% + +<<EOF>> { return END; } +"\n" { NEW_LINE(); } +{comment} { ; } +. { ; } + +INCLUDE { BEGIN(include); return INCLUDE; } +<include>{filename} { RETURN_STR(FILENAME); } +<include>"\"" { return '"'; } +<include>\n { BEGIN(INITIAL); NEW_LINE(); } +<include>. { ; } + +OPTIONS { BEGIN(options); return OPTIONS; } +<options>HEADERS { return OPT_HEADERS; } +<options>INDENT_SYM { return OPT_INDENT_SYM; } +<options>PIPE { return OPT_PIPE; } +<options>TIMESTAMP { return OPT_TIMESTAMP; } +<options>FRAMESIZE { return OPT_FRAMESIZE; } +<options>FRAMESIZE_CHECK { return OPT_FRAMESIZE_CHECK; } +<options>HIDE_TID { return OPT_HIDE_TID; } +<options>FOLLOW_FORK { return OPT_FOLLOW_FORK; } +<options>FOLLOW_EXEC { return OPT_FOLLOW_EXEC; } +<options>DEMANGLE { return OPT_DEMANGLE; } +<options>BRACES { return OPT_BRACES; } +<options>ENABLE_ARGS { return OPT_ENABLE_ARGS; } +<options>DETAIL_ARGS { return OPT_DETAIL_ARGS; } + +<options>{bool} { RETURN_STR(BOOL); } +<options>{value} { RETURN_LONG(VALUE); } +<options>{filename} { RETURN_STR(FILENAME); } +<options>{comment} { ; } +<options>"}" { BEGIN(INITIAL); return '}'; } +<options>"{" { return '{'; } +<options>"=" { return '='; } +<options>"\"" { return '"'; } +<options>"\\" { ; } +<options>"\n" { NEW_LINE(); } +<options>. { ; } + +%% + +#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); +} |