-
Notifications
You must be signed in to change notification settings - Fork 2
/
json-gram.ll
87 lines (77 loc) · 909 Bytes
/
json-gram.ll
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
75
76
77
78
79
80
81
82
83
84
85
86
87
start : value END
@{
return(parse_return_success);
}@
;
object : OC
@{
push_object();
}@
o-pairs CC
;
o-pairs : pairs
|
;
pairs : pair pairs-p
;
pairs-p : COMMA pair pairs-p
|
;
pair : STRING
@{
push_string(lex_value);
}@
COLON value
@{
value_t value = pop();
const char *name = pop().string;
add_object(name, value);
}@
;
array : OS
@{
push_array();
}@
o-values CS
;
o-values: values
|
;
values : value
@{
value_t value = pop();
add_array(value);
}@
values-p
;
values-p: COMMA value
@{
value_t value = pop();
add_array(value);
}@
values-p
|
;
value : STRING
@{
push_string(lex_value);
}@
| NUMBER
@{
push_number(strtod(lex_value, NULL));
}@
| object
| array
| TRUE_TOKEN
@{
push_bool(true);
}@
| FALSE_TOKEN
@{
push_bool(false);
}@
| NULL_TOKEN
@{
push_null();
}@
;