| 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 |