-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdumpview.y
73 lines (57 loc) · 1.5 KB
/
dumpview.y
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
%{
#include <stdio.h>
#include <stdlib.h>
#include "dumpview.h"
#define YYDEBUG 1
%}
%union {
struct item *i;
struct item_list *il;
struct param *p;
struct param_list *pl;
char *s;
char f;
int n;
}
%token <n> NUMBER
%token <f> FORMAT
%token <s> NAME
%token <s> REF
%type <i> item sl_item pl_item plf_item bl_item
%type <il> itemlist
%type <p> param num_param ref_param
%type <pl> paramlist
%%
mainlist : /* nothing */
| mainlist itemlist { process_item_list ($2, NULL); }
;
itemlist : item { $$ = new_item_list ($1, NULL); }
| item itemlist { $$ = new_item_list ($1, $2); }
;
item : sl_item { $$ = $1; }
| pl_item { $$ = $1; }
| plf_item { $$ = $1; }
| bl_item { $$ = $1; }
;
paramlist : '{' param '}' { $$ = new_param_list (NULL, $2); }
| '{' paramlist ',' param '}' { $$ = new_param_list ($2, $4); }
;
param : num_param { $$ = $1; }
| ref_param { $$ = $1; }
;
num_param : FORMAT ':' NUMBER { $$ = new_num_param ($1, $3); }
;
ref_param : FORMAT ':' REF { $$ = new_ref_param ($1, $3); }
;
bl_item : '[' NAME itemlist ']' { $$ = new_bl_item ($2, NULL, $3); }
| '[' NAME paramlist itemlist ']' { $$ = new_bl_item ($2, $3, $4); }
;
pl_item : NAME paramlist { $$ = new_pl_item ($1, $2); }
;
sl_item : '!' NAME { $$ = new_sl_item ($2); }
;
plf_item : '&' NAME paramlist { $$ = new_plf_item ($2, $3, '&'); }
| '-' NAME paramlist { $$ = new_plf_item ($2, $3, '-'); }
| '$' paramlist { $$ = new_plf_item (NULL, $2, '$'); }
;
%%