OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright 2013 The Chromium Authors. All rights reserved. | 2 # Copyright 2013 The Chromium Authors. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 """Generates a syntax tree from a Mojo IDL file.""" | 6 """Generates a syntax tree from a Mojo IDL file.""" |
7 | 7 |
8 | 8 |
9 import sys | 9 import sys |
10 import os.path | 10 import os.path |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
93 | """ | 93 | """ |
94 if len(p) > 1: | 94 if len(p) > 1: |
95 p[0] = ListFromConcat(p[1], p[2]) | 95 p[0] = ListFromConcat(p[1], p[2]) |
96 | 96 |
97 def p_field(self, p): | 97 def p_field(self, p): |
98 """field : typename NAME default ordinal SEMI""" | 98 """field : typename NAME default ordinal SEMI""" |
99 p[0] = ('FIELD', p[1], p[2], p[4], p[3]) | 99 p[0] = ('FIELD', p[1], p[2], p[4], p[3]) |
100 | 100 |
101 def p_default(self, p): | 101 def p_default(self, p): |
102 """default : EQUALS expression | 102 """default : EQUALS expression |
103 | EQUALS expression_array | 103 | EQUALS expression_object |
104 | """ | 104 | """ |
105 if len(p) > 2: | 105 if len(p) > 2: |
106 p[0] = p[2] | 106 p[0] = p[2] |
107 | 107 |
108 def p_interface(self, p): | 108 def p_interface(self, p): |
109 """interface : attribute_section INTERFACE NAME LBRACE interface_body \ | 109 """interface : attribute_section INTERFACE NAME LBRACE interface_body \ |
110 RBRACE SEMI""" | 110 RBRACE SEMI""" |
111 p[0] = ('INTERFACE', p[3], p[1], p[5]) | 111 p[0] = ('INTERFACE', p[3], p[1], p[5]) |
112 | 112 |
113 def p_interface_body(self, p): | 113 def p_interface_body(self, p): |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
183 def p_enum_field(self, p): | 183 def p_enum_field(self, p): |
184 """enum_field : NAME | 184 """enum_field : NAME |
185 | NAME EQUALS expression""" | 185 | NAME EQUALS expression""" |
186 if len(p) == 2: | 186 if len(p) == 2: |
187 p[0] = ('ENUM_FIELD', p[1], None) | 187 p[0] = ('ENUM_FIELD', p[1], None) |
188 else: | 188 else: |
189 p[0] = ('ENUM_FIELD', p[1], p[3]) | 189 p[0] = ('ENUM_FIELD', p[1], p[3]) |
190 | 190 |
191 ### Expressions ### | 191 ### Expressions ### |
192 | 192 |
| 193 def p_expression_object(self, p): |
| 194 """expression_object : expression_array |
| 195 | LBRACE expression_object_elements RBRACE """ |
| 196 if len(p) < 3: |
| 197 p[0] = p[1] |
| 198 else: |
| 199 p[0] = ('OBJECT', p[2]) |
| 200 |
| 201 def p_expression_object_elements(self, p): |
| 202 """expression_object_elements : expression_object |
| 203 | expression_object COMMA expression_object_ele
ments |
| 204 | """ |
| 205 if len(p) == 2: |
| 206 p[0] = ListFromConcat(p[1]) |
| 207 elif len(p) > 3: |
| 208 p[0] = ListFromConcat(p[1], p[3]) |
| 209 |
193 def p_expression_array(self, p): | 210 def p_expression_array(self, p): |
194 """expression_array : expression | 211 """expression_array : expression |
195 | LBRACKET expression_array_elements RBRACKET """ | 212 | LBRACKET expression_array_elements RBRACKET """ |
196 if len(p) < 3: | 213 if len(p) < 3: |
197 p[0] = p[1] | 214 p[0] = p[1] |
198 else: | 215 else: |
199 p[0] = p[2] | 216 p[0] = ('ARRAY', p[2]) |
200 | 217 |
201 def p_expression_array_elements(self, p): | 218 def p_expression_array_elements(self, p): |
202 """expression_array_elements : expression | 219 """expression_array_elements : expression_object |
203 | expression COMMA expression_array_elements | 220 | expression_object COMMA expression_array_elem
ents |
204 | """ | 221 | """ |
205 if len(p) == 2: | 222 if len(p) == 2: |
206 p[0] = ListFromConcat(p[1]) | 223 p[0] = ListFromConcat(p[1]) |
207 elif len(p) > 3: | 224 elif len(p) > 3: |
208 p[0] = ListFromConcat(p[1], p[3]) | 225 p[0] = ListFromConcat(p[1], p[3]) |
209 | 226 |
210 def p_expression(self, p): | 227 def p_expression(self, p): |
211 """expression : conditional_expression""" | 228 """expression : conditional_expression""" |
212 p[0] = p[1] | 229 p[0] = p[1] |
213 | 230 |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
296 def Main(): | 313 def Main(): |
297 if len(sys.argv) < 2: | 314 if len(sys.argv) < 2: |
298 print("usage: %s filename" % (sys.argv[0])) | 315 print("usage: %s filename" % (sys.argv[0])) |
299 sys.exit(1) | 316 sys.exit(1) |
300 tree = Parse(filename=sys.argv[1]) | 317 tree = Parse(filename=sys.argv[1]) |
301 print(tree) | 318 print(tree) |
302 | 319 |
303 | 320 |
304 if __name__ == '__main__': | 321 if __name__ == '__main__': |
305 Main() | 322 Main() |
OLD | NEW |