blob: 5bd8f0f9247e2106fa3569ceb590fca690ff1e2e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
%{
#include <stdio.h>
#include <libestr.h>
#include "utils.h"
#define YYDEBUG 1
%}
%union {
char *s;
es_str_t *estr;
enum cnfobjType objType;
struct cnfobj *obj;
struct nvlst *nvlst;
}
%token <estr> NAME
%token <estr> VALUE
%token <objType> BEGINOBJ
%token ENDOBJ
%token <s> CFSYSLINE
%token BEGIN_ACTION
%token <s> LEGACY_ACTION
%token <s> PRIFILT
%token <s> PROPFILT
%type <nvlst> nv nvlst
%type <obj> obj
%type <s> actlst
%type <s> act
%%
conf: /* empty (to end recursion) */
| obj conf
| cfsysline conf
| rule conf
obj: BEGINOBJ nvlst ENDOBJ { $$ = cnfobjNew($1, $2);
cnfobjPrint($$);
cnfobjDestruct($$);
}
obj: BEGIN_ACTION nvlst ENDOBJ { struct cnfobj *t = cnfobjNew(CNFOBJ_ACTION, $2);
cnfobjPrint(t);
cnfobjDestruct(t);
printf("XXXX: this is an new-style action!\n");
}
cfsysline: CFSYSLINE { printf("XXXX: processing CFSYSLINE: %s\n", $1);
}
nvlst: { $$ = NULL; }
| nvlst nv { $2->next = $1; $$ = $2; }
nv: NAME '=' VALUE { $$ = nvlstNew($1, $3); }
rule: PRIFILT actlst { printf("PRIFILT: %s\n", $1); free($1); }
| PROPFILT actlst
actlst: act { printf("action (end actlst) %s\n", $1);$$=$1; }
| actlst '&' act { printf("in actionlist %s\n", $3); }
act: BEGIN_ACTION nvlst ENDOBJ { $$ = "obj"; }
| LEGACY_ACTION { printf("legacy action: '%s'\n", $1);
/*free($1);*/
$$ = $1;}
%%
int yyerror(char *s)
{
printf("yyerror called: %s\n", s);
}
int main()
{
yydebug = 0;
return yyparse();
}
|