diff options
author | Rainer Gerhards <rgerhards@adiscon.com> | 2011-07-06 10:05:29 +0200 |
---|---|---|
committer | Rainer Gerhards <rgerhards@adiscon.com> | 2011-07-06 10:05:29 +0200 |
commit | 2081c264a3b3219ed4756e548ec9b122fae9328c (patch) | |
tree | 5d34b18c4db4c98a7f086d7d651141761029f6c0 /grammar | |
parent | f8e7c7e3656085bee11b1667f32828dfb4e3df06 (diff) | |
download | rsyslog-2081c264a3b3219ed4756e548ec9b122fae9328c.tar.gz rsyslog-2081c264a3b3219ed4756e548ec9b122fae9328c.tar.xz rsyslog-2081c264a3b3219ed4756e548ec9b122fae9328c.zip |
milestone: abstracted parser interface ...
so that both testdriver and other callers (rsyslog!) can use it
without changing the parser (this simplifies development).
Diffstat (limited to 'grammar')
-rw-r--r-- | grammar/grammar.y | 13 | ||||
-rw-r--r-- | grammar/parserif.h | 10 | ||||
-rw-r--r-- | grammar/testdriver.c | 30 |
3 files changed, 44 insertions, 9 deletions
diff --git a/grammar/grammar.y b/grammar/grammar.y index 43e0289a..428011c5 100644 --- a/grammar/grammar.y +++ b/grammar/grammar.y @@ -104,14 +104,11 @@ extern int yyerror(char*); * one by one. */ conf: /* empty (to end recursion) */ - | conf obj { dbgprintf("global:config: "); - cnfobjPrint($2); cnfobjDestruct($2); } - | conf rule { dbgprintf("global:rule processed\n"); - cnfrulePrint($2); } - | conf cfsysline { dbgprintf("global:cfsysline: %s\n", $2); } - | conf BSD_TAG_SELECTOR { dbgprintf("global:BSD tag '%s'\n", $2); } - | conf BSD_HOST_SELECTOR { dbgprintf("global:BSD host '%s'\n", $2); } - + | conf obj { cnfDoObj($2); } + | conf rule { cnfDoRule($2); } + | conf cfsysline { cnfDoCfsysline($2); } + | conf BSD_TAG_SELECTOR { cnfDoBSDTag($2); } + | conf BSD_HOST_SELECTOR { cnfDoBSDHost($2); } obj: BEGINOBJ nvlst ENDOBJ { $$ = cnfobjNew($1, $2); } | BEGIN_ACTION nvlst ENDOBJ { $$ = cnfobjNew(CNFOBJ_ACTION, $2); } cfsysline: CFSYSLINE { $$ = $1; } diff --git a/grammar/parserif.h b/grammar/parserif.h index b6986dd8..c88114c9 100644 --- a/grammar/parserif.h +++ b/grammar/parserif.h @@ -5,4 +5,14 @@ int yyparse(); int yydebug; void dbgprintf(char *fmt, ...) __attribute__((format(printf, 1, 2))); void parser_errmsg(char *fmt, ...) __attribute__((format(printf, 1, 2))); + +/* entry points to be called after the parser has processed the + * element in question. Actual processing must than be done inside + * these functions. + */ +void cnfDoObj(struct cnfobj *o); +void cnfDoRule(struct cnfrule *rule); +void cnfDoCfsysline(char *ln); +void cnfDoBSDTag(char *ln); +void cnfDoBSDHost(char *ln); #endif diff --git a/grammar/testdriver.c b/grammar/testdriver.c index 915b5942..9899dbd1 100644 --- a/grammar/testdriver.c +++ b/grammar/testdriver.c @@ -26,6 +26,7 @@ #include <stdlib.h> #include <stdarg.h> #include <libestr.h> +#include "utils.h" #include "parserif.h" extern int yylineno; @@ -57,6 +58,34 @@ dbgprintf(char *fmt, ...) va_end(ap); } +void cnfDoObj(struct cnfobj *o) +{ + dbgprintf("global:obj: "); + cnfobjPrint(o); + cnfobjDestruct(o); +} + +void cnfDoRule(struct cnfrule *rule) +{ + dbgprintf("global:rule processed\n"); + cnfrulePrint(rule); +} + +void cnfDoCfsysline(char *ln) +{ + dbgprintf("global:cfsysline: %s\n", ln); +} + +void cnfDoBSDTag(char *ln) +{ + dbgprintf("global:BSD tag: %s\n", ln); +} + +void cnfDoBSDHost(char *ln) +{ + dbgprintf("global:BSD host: %s\n", ln); +} + void cstrPrint(char *text, es_str_t *estr) { @@ -66,7 +95,6 @@ cstrPrint(char *text, es_str_t *estr) free(str); } - int main(int argc, char *argv[]) { |