-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathjsonlite.y
More file actions
120 lines (101 loc) · 1.89 KB
/
jsonlite.y
File metadata and controls
120 lines (101 loc) · 1.89 KB
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
%token-table
%define api.pure
/*%define lr.type canonical-lr*/
%locations
%verbose
%debug
%code top {
#import <Foundation/Foundation.h>
}
%code {
#import "lex-scanner.h"
extern void yyerror (YYLTYPE *locp, yyscan_t scanner, id * result, NSError ** error, char const *msg);
#define YY_USER_ACTION yylloc->first_line = yylloc->last_line = yylineno; yylloc->first_column = yycolumn; yycolumn += yyleng; yylloc->last_column = yycolumn ;
}
%param { void * scanner }
%parse-param { id * result }
%parse-param { NSError ** error }
%token <string> STRING
%token <number> INTEGER
%token <number> REAL
%token <number> BOOLEAN
%token <object> NULLVALUE
%type <object> file
%type <object> object
%type <string> string
%type <object> value
%type <number> number
%type <mutableArray> array
%type <mutableArray> value_list
%type <mutableDictionary> key_value_list
%union {
NSMutableData * mutableData ;
NSObject * object ;
NSString * string ;
NSNumber * number ;
NSMutableArray * mutableArray ;
NSMutableDictionary * mutableDictionary ;
}
%%
file: object
{
*result = $1 ;
}
| array
{
*result = $1 ;
}
;
key_value_list: /* empty */
{
$$ = [ NSMutableDictionary dictionary ] ;
}
| key_value_list string ':' value
{
[ $1 setObject:$4 forKey:$2 ] ;
}
| key_value_list ',' string ':' value
{
[ $1 setObject:$5 forKey:$3 ] ;
}
| key_value_list ','
{
$$ = $1 ;
}
;
object: '{' key_value_list '}'
{
$$ = $2 ;
}
;
array: '[' value_list ']'
{
$$ = $2 ;
}
;
value_list: /* empty */
{ $$ = [ NSMutableArray array ] ; }
| value_list value
{ [ $$ addObject:$2 ] ; }
| value_list ',' value
{ [ $$ addObject:$3 ] ; }
| value_list ','
{
$$ = $1 ;
}
;
string: STRING
;
value: BOOLEAN
| STRING
| number
| NULLVALUE
| object
| array
{
$$ = $1 ;
}
;
number: INTEGER
| REAL
;