summaryrefslogtreecommitdiffstats
path: root/grammar
diff options
context:
space:
mode:
authorRainer Gerhards <rgerhards@adiscon.com>2011-07-06 10:05:29 +0200
committerRainer Gerhards <rgerhards@adiscon.com>2011-07-06 10:05:29 +0200
commit2081c264a3b3219ed4756e548ec9b122fae9328c (patch)
tree5d34b18c4db4c98a7f086d7d651141761029f6c0 /grammar
parentf8e7c7e3656085bee11b1667f32828dfb4e3df06 (diff)
downloadrsyslog-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.y13
-rw-r--r--grammar/parserif.h10
-rw-r--r--grammar/testdriver.c30
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[])
{