| 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 | """ | 104 | """ |
| 104 if len(p) > 2: | 105 if len(p) > 2: |
| 105 p[0] = p[2] | 106 p[0] = p[2] |
| 106 | 107 |
| 107 def p_interface(self, p): | 108 def p_interface(self, p): |
| 108 """interface : attribute_section INTERFACE NAME LBRACE interface_body \ | 109 """interface : attribute_section INTERFACE NAME LBRACE interface_body \ |
| 109 RBRACE SEMI""" | 110 RBRACE SEMI""" |
| 110 p[0] = ('INTERFACE', p[3], p[1], p[5]) | 111 p[0] = ('INTERFACE', p[3], p[1], p[5]) |
| 111 | 112 |
| 112 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... |
| 182 def p_enum_field(self, p): | 183 def p_enum_field(self, p): |
| 183 """enum_field : NAME | 184 """enum_field : NAME |
| 184 | NAME EQUALS expression""" | 185 | NAME EQUALS expression""" |
| 185 if len(p) == 2: | 186 if len(p) == 2: |
| 186 p[0] = ('ENUM_FIELD', p[1], None) | 187 p[0] = ('ENUM_FIELD', p[1], None) |
| 187 else: | 188 else: |
| 188 p[0] = ('ENUM_FIELD', p[1], p[3]) | 189 p[0] = ('ENUM_FIELD', p[1], p[3]) |
| 189 | 190 |
| 190 ### Expressions ### | 191 ### Expressions ### |
| 191 | 192 |
| 193 def p_expression_array(self, p): |
| 194 """expression_array : expression |
| 195 | LBRACKET expression_array_elements RBRACKET """ |
| 196 if len(p) < 3: |
| 197 p[0] = p[1] |
| 198 else: |
| 199 p[0] = p[2] |
| 200 |
| 201 def p_expression_array_elements(self, p): |
| 202 """expression_array_elements : expression |
| 203 | expression COMMA expression_array_elements |
| 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 |
| 192 def p_expression(self, p): | 210 def p_expression(self, p): |
| 193 """expression : conditional_expression""" | 211 """expression : conditional_expression""" |
| 194 p[0] = p[1] | 212 p[0] = p[1] |
| 195 | 213 |
| 196 def p_conditional_expression(self, p): | 214 def p_conditional_expression(self, p): |
| 197 """conditional_expression : binary_expression | 215 """conditional_expression : binary_expression |
| 198 | binary_expression CONDOP expression COLON \ | 216 | binary_expression CONDOP expression COLON \ |
| 199 conditional_expression""" | 217 conditional_expression""" |
| 200 # Just pass the arguments through. I don't think it's possible to preserve | 218 # Just pass the arguments through. I don't think it's possible to preserve |
| 201 # the spaces of the original, so just put a single space between them. | 219 # the spaces of the original, so just put a single space between them. |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 279 def Main(): | 297 def Main(): |
| 280 if len(sys.argv) < 2: | 298 if len(sys.argv) < 2: |
| 281 print("usage: %s filename" % (sys.argv[0])) | 299 print("usage: %s filename" % (sys.argv[0])) |
| 282 sys.exit(1) | 300 sys.exit(1) |
| 283 tree = Parse(filename=sys.argv[1]) | 301 tree = Parse(filename=sys.argv[1]) |
| 284 print(tree) | 302 print(tree) |
| 285 | 303 |
| 286 | 304 |
| 287 if __name__ == '__main__': | 305 if __name__ == '__main__': |
| 288 Main() | 306 Main() |
| OLD | NEW |