summaryrefslogtreecommitdiffstats
path: root/grammar/rscript.y
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();
}