OLD | NEW |
1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 """Generates a syntax tree from a Mojo IDL file.""" | 5 """Generates a syntax tree from a Mojo IDL file.""" |
6 | 6 |
7 import imp | 7 import imp |
8 import os.path | 8 import os.path |
9 import sys | 9 import sys |
10 | 10 |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
122 | enum | 122 | enum |
123 | const""" | 123 | const""" |
124 p[0] = p[1] | 124 p[0] = p[1] |
125 | 125 |
126 def p_attribute_section(self, p): | 126 def p_attribute_section(self, p): |
127 """attribute_section : LBRACKET attribute_list RBRACKET | 127 """attribute_section : LBRACKET attribute_list RBRACKET |
128 | """ | 128 | """ |
129 if len(p) > 3: | 129 if len(p) > 3: |
130 p[0] = p[2] | 130 p[0] = p[2] |
131 | 131 |
132 def p_attribute_list(self, p): | 132 def p_attribute_list_1(self, p): |
133 """attribute_list : attribute | 133 """attribute_list : """ |
134 | attribute COMMA attribute_list | 134 p[0] = ast.AttributeList() |
135 | """ | 135 |
136 if len(p) == 2: | 136 def p_attribute_list_2(self, p): |
137 p[0] = _ListFromConcat(p[1]) | 137 """attribute_list : nonempty_attribute_list""" |
138 elif len(p) > 3: | 138 p[0] = p[1] |
139 p[0] = _ListFromConcat(p[1], p[3]) | 139 |
| 140 def p_nonempty_attribute_list_1(self, p): |
| 141 """nonempty_attribute_list : attribute""" |
| 142 p[0] = ast.AttributeList(p[1]) |
| 143 |
| 144 def p_nonempty_attribute_list_2(self, p): |
| 145 """nonempty_attribute_list : nonempty_attribute_list COMMA attribute""" |
| 146 p[0] = p[1] |
| 147 p[0].Append(p[3]) |
140 | 148 |
141 def p_attribute(self, p): | 149 def p_attribute(self, p): |
142 """attribute : NAME EQUALS evaled_literal | 150 """attribute : NAME EQUALS evaled_literal |
143 | NAME EQUALS NAME""" | 151 | NAME EQUALS NAME""" |
144 p[0] = ('ATTRIBUTE', p[1], p[3]) | 152 p[0] = ast.Attribute(p[1], p[3], filename=self.filename, lineno=p.lineno(1)) |
145 | 153 |
146 def p_evaled_literal(self, p): | 154 def p_evaled_literal(self, p): |
147 """evaled_literal : literal""" | 155 """evaled_literal : literal""" |
148 # 'eval' the literal to strip the quotes. | 156 # 'eval' the literal to strip the quotes. |
149 p[0] = eval(p[1]) | 157 p[0] = eval(p[1]) |
150 | 158 |
151 def p_struct(self, p): | 159 def p_struct(self, p): |
152 """struct : attribute_section STRUCT NAME LBRACE struct_body RBRACE SEMI""" | 160 """struct : attribute_section STRUCT NAME LBRACE struct_body RBRACE SEMI""" |
153 p[0] = ('STRUCT', p[3], p[1], p[5]) | 161 p[0] = ('STRUCT', p[3], p[1], p[5]) |
154 | 162 |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
206 p[0] = ast.ParameterList(p[1]) | 214 p[0] = ast.ParameterList(p[1]) |
207 | 215 |
208 def p_nonempty_parameter_list_2(self, p): | 216 def p_nonempty_parameter_list_2(self, p): |
209 """nonempty_parameter_list : nonempty_parameter_list COMMA parameter""" | 217 """nonempty_parameter_list : nonempty_parameter_list COMMA parameter""" |
210 p[0] = p[1] | 218 p[0] = p[1] |
211 p[0].Append(p[3]) | 219 p[0].Append(p[3]) |
212 | 220 |
213 def p_parameter(self, p): | 221 def p_parameter(self, p): |
214 """parameter : typename NAME ordinal""" | 222 """parameter : typename NAME ordinal""" |
215 p[0] = ast.Parameter(p[1], p[2], p[3], | 223 p[0] = ast.Parameter(p[1], p[2], p[3], |
216 filename=self.filename, lineno=p.lineno(1)) | 224 filename=self.filename, lineno=p.lineno(2)) |
217 | 225 |
218 def p_typename(self, p): | 226 def p_typename(self, p): |
219 """typename : basictypename | 227 """typename : basictypename |
220 | array | 228 | array |
221 | fixed_array | 229 | fixed_array |
222 | interfacerequest""" | 230 | interfacerequest""" |
223 p[0] = p[1] | 231 p[0] = p[1] |
224 | 232 |
225 def p_basictypename(self, p): | 233 def p_basictypename(self, p): |
226 """basictypename : identifier | 234 """basictypename : identifier |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
348 | 356 |
349 def Parse(source, filename): | 357 def Parse(source, filename): |
350 lexer = Lexer(filename) | 358 lexer = Lexer(filename) |
351 parser = Parser(lexer, source, filename) | 359 parser = Parser(lexer, source, filename) |
352 | 360 |
353 lex.lex(object=lexer) | 361 lex.lex(object=lexer) |
354 yacc.yacc(module=parser, debug=0, write_tables=0) | 362 yacc.yacc(module=parser, debug=0, write_tables=0) |
355 | 363 |
356 tree = yacc.parse(source) | 364 tree = yacc.parse(source) |
357 return tree | 365 return tree |
OLD | NEW |