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 |