Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(217)

Side by Side Diff: mojo/public/tools/bindings/pylib/mojom/parse/parser.py

Issue 398553002: Mojo: Mojom: Add AST types for struct and struct body. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
162 | NAME EQUALS NAME""" 162 | NAME EQUALS NAME"""
163 p[0] = ast.Attribute(p[1], p[3], filename=self.filename, lineno=p.lineno(1)) 163 p[0] = ast.Attribute(p[1], p[3], filename=self.filename, lineno=p.lineno(1))
164 164
165 def p_evaled_literal(self, p): 165 def p_evaled_literal(self, p):
166 """evaled_literal : literal""" 166 """evaled_literal : literal"""
167 # 'eval' the literal to strip the quotes. 167 # 'eval' the literal to strip the quotes.
168 p[0] = eval(p[1]) 168 p[0] = eval(p[1])
169 169
170 def p_struct(self, p): 170 def p_struct(self, p):
171 """struct : attribute_section STRUCT NAME LBRACE struct_body RBRACE SEMI""" 171 """struct : attribute_section STRUCT NAME LBRACE struct_body RBRACE SEMI"""
172 p[0] = ('STRUCT', p[3], p[1], p[5]) 172 p[0] = ast.Struct(p[3], p[1], p[5])
173 173
174 def p_struct_body(self, p): 174 def p_struct_body_1(self, p):
175 """struct_body : field struct_body 175 """struct_body : """
176 | enum struct_body 176 p[0] = ast.StructBody()
177 | const struct_body
178 | """
179 if len(p) > 1:
180 p[0] = _ListFromConcat(p[1], p[2])
181 177
182 def p_field(self, p): 178 def p_struct_body_2(self, p):
183 """field : typename NAME ordinal default SEMI""" 179 """struct_body : struct_body const
180 | struct_body enum
181 | struct_body struct_field"""
182 p[0] = p[1]
183 p[0].Append(p[2])
184
185 def p_struct_field(self, p):
186 """struct_field : typename NAME ordinal default SEMI"""
184 p[0] = ast.StructField(p[2], p[3], p[1], p[4]) 187 p[0] = ast.StructField(p[2], p[3], p[1], p[4])
185 188
186 def p_default_1(self, p): 189 def p_default_1(self, p):
187 """default : """ 190 """default : """
188 p[0] = None 191 p[0] = None
189 192
190 def p_default_2(self, p): 193 def p_default_2(self, p):
191 """default : EQUALS constant""" 194 """default : EQUALS constant"""
192 p[0] = p[2] 195 p[0] = p[2]
193 196
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
377 380
378 def Parse(source, filename): 381 def Parse(source, filename):
379 lexer = Lexer(filename) 382 lexer = Lexer(filename)
380 parser = Parser(lexer, source, filename) 383 parser = Parser(lexer, source, filename)
381 384
382 lex.lex(object=lexer) 385 lex.lex(object=lexer)
383 yacc.yacc(module=parser, debug=0, write_tables=0) 386 yacc.yacc(module=parser, debug=0, write_tables=0)
384 387
385 tree = yacc.parse(source) 388 tree = yacc.parse(source)
386 return tree 389 return tree
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698