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

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

Issue 799113004: Update mojo sdk to rev 59145288bae55b0fce4276b017df6a1117bcf00f (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: add mojo's ply to checklicenses whitelist Created 6 years 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
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
11 def _GetDirAbove(dirname): 11 def _GetDirAbove(dirname):
12 """Returns the directory "above" this file containing |dirname| (which must 12 """Returns the directory "above" this file containing |dirname| (which must
13 also be "above" this file).""" 13 also be "above" this file)."""
14 path = os.path.abspath(__file__) 14 path = os.path.abspath(__file__)
15 while True: 15 while True:
16 path, tail = os.path.split(path) 16 path, tail = os.path.split(path)
17 assert tail 17 assert tail
18 if tail == dirname: 18 if tail == dirname:
19 return path 19 return path
20 20
21 try: 21 try:
22 imp.find_module("ply") 22 imp.find_module("ply")
23 except ImportError: 23 except ImportError:
24 sys.path.append(os.path.join(_GetDirAbove("mojo"), "third_party")) 24 sys.path.append(os.path.join(_GetDirAbove("public"), "public/third_party"))
25 from ply import lex 25 from ply import lex
26 from ply import yacc 26 from ply import yacc
27 27
28 from ..error import Error 28 from ..error import Error
29 from . import ast 29 from . import ast
30 from .lexer import Lexer 30 from .lexer import Lexer
31 31
32 32
33 _MAX_ORDINAL_VALUE = 0xffffffff 33 _MAX_ORDINAL_VALUE = 0xffffffff
34 _MAX_ARRAY_SIZE = 0xffffffff 34 _MAX_ARRAY_SIZE = 0xffffffff
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 # 'eval' the literal to strip the quotes. 107 # 'eval' the literal to strip the quotes.
108 # TODO(vtl): This eval is dubious. We should unquote/unescape ourselves. 108 # TODO(vtl): This eval is dubious. We should unquote/unescape ourselves.
109 p[0] = ast.Import(eval(p[2]), filename=self.filename, lineno=p.lineno(2)) 109 p[0] = ast.Import(eval(p[2]), filename=self.filename, lineno=p.lineno(2))
110 110
111 def p_module(self, p): 111 def p_module(self, p):
112 """module : attribute_section MODULE identifier_wrapped SEMI""" 112 """module : attribute_section MODULE identifier_wrapped SEMI"""
113 p[0] = ast.Module(p[3], p[1], filename=self.filename, lineno=p.lineno(2)) 113 p[0] = ast.Module(p[3], p[1], filename=self.filename, lineno=p.lineno(2))
114 114
115 def p_definition(self, p): 115 def p_definition(self, p):
116 """definition : struct 116 """definition : struct
117 | union
117 | interface 118 | interface
118 | enum 119 | enum
119 | const""" 120 | const"""
120 p[0] = p[1] 121 p[0] = p[1]
121 122
122 def p_attribute_section_1(self, p): 123 def p_attribute_section_1(self, p):
123 """attribute_section : """ 124 """attribute_section : """
124 p[0] = None 125 p[0] = None
125 126
126 def p_attribute_section_2(self, p): 127 def p_attribute_section_2(self, p):
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 """struct_body : struct_body const 167 """struct_body : struct_body const
167 | struct_body enum 168 | struct_body enum
168 | struct_body struct_field""" 169 | struct_body struct_field"""
169 p[0] = p[1] 170 p[0] = p[1]
170 p[0].Append(p[2]) 171 p[0].Append(p[2])
171 172
172 def p_struct_field(self, p): 173 def p_struct_field(self, p):
173 """struct_field : typename NAME ordinal default SEMI""" 174 """struct_field : typename NAME ordinal default SEMI"""
174 p[0] = ast.StructField(p[2], p[3], p[1], p[4]) 175 p[0] = ast.StructField(p[2], p[3], p[1], p[4])
175 176
177 def p_union(self, p):
178 """union : UNION NAME LBRACE union_body RBRACE SEMI"""
179 p[0] = ast.Union(p[2], p[4])
180
181 def p_union_body_1(self, p):
182 """union_body : """
183 p[0] = ast.UnionBody()
184
185 def p_union_body_2(self, p):
186 """union_body : union_body union_field"""
187 p[0] = p[1]
188 p[1].Append(p[2])
189
190 def p_union_field(self, p):
191 """union_field : typename NAME ordinal SEMI"""
192 p[0] = ast.UnionField(p[2], p[3], p[1])
193
176 def p_default_1(self, p): 194 def p_default_1(self, p):
177 """default : """ 195 """default : """
178 p[0] = None 196 p[0] = None
179 197
180 def p_default_2(self, p): 198 def p_default_2(self, p):
181 """default : EQUALS constant""" 199 """default : EQUALS constant"""
182 p[0] = p[2] 200 p[0] = p[2]
183 201
184 def p_interface(self, p): 202 def p_interface(self, p):
185 """interface : attribute_section INTERFACE NAME LBRACE interface_body \ 203 """interface : attribute_section INTERFACE NAME LBRACE interface_body \
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
385 403
386 def Parse(source, filename): 404 def Parse(source, filename):
387 lexer = Lexer(filename) 405 lexer = Lexer(filename)
388 parser = Parser(lexer, source, filename) 406 parser = Parser(lexer, source, filename)
389 407
390 lex.lex(object=lexer) 408 lex.lex(object=lexer)
391 yacc.yacc(module=parser, debug=0, write_tables=0) 409 yacc.yacc(module=parser, debug=0, write_tables=0)
392 410
393 tree = yacc.parse(source) 411 tree = yacc.parse(source)
394 return tree 412 return tree
OLDNEW
« no previous file with comments | « mojo/public/tools/bindings/pylib/mojom/parse/lexer.py ('k') | mojo/public/tools/bindings/pylib/mojom/parse/translate.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698