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

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

Issue 380023005: Mojo: Mojom: Add Import, ImportList, and Mojom AST types. (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 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 # then we name the functions |p_foo_bar_N| (for left-hand-side |foo_bar|), 79 # then we name the functions |p_foo_bar_N| (for left-hand-side |foo_bar|),
80 # where N is a number (numbered starting from 1). Note that using multiple 80 # where N is a number (numbered starting from 1). Note that using multiple
81 # functions is actually more efficient than having single functions handle 81 # functions is actually more efficient than having single functions handle
82 # multiple rules (and, e.g., distinguishing them by examining |len(p)|). 82 # multiple rules (and, e.g., distinguishing them by examining |len(p)|).
83 # 83 #
84 # It's also possible to have a function handling multiple rules with different 84 # It's also possible to have a function handling multiple rules with different
85 # left-hand-sides. We do not do this. 85 # left-hand-sides. We do not do this.
86 # 86 #
87 # See http://www.dabeaz.com/ply/ply.html#ply_nn25 for more details. 87 # See http://www.dabeaz.com/ply/ply.html#ply_nn25 for more details.
88 88
89 # TODO(vtl): Get rid of this ('MODULE', ...) stuff and replace it with an
90 # ast.Mojom node. (The ('IMPORT', ...) stuff is a hack until I do this and
91 # update translate.py.)
92 # TODO(vtl): Get rid of the braces in the module "statement". (Consider 89 # TODO(vtl): Get rid of the braces in the module "statement". (Consider
93 # renaming "module" -> "package".) 90 # renaming "module" -> "package".) Then we'll be able to have a single rule
94 def p_root(self, p): 91 # for root (by making module "optional").
95 """root : import_list module LBRACE definition_list RBRACE 92 def p_root_1(self, p):
96 | import_list definition_list""" 93 """root : import_list module LBRACE definition_list RBRACE"""
97 p[0] = [('IMPORT', import_statement.import_filename) \ 94 p[0] = ast.Mojom(p[2], p[1], p[4])
98 for import_statement in p[1]] 95
99 if len(p) == 6: 96 def p_root_2(self, p):
100 p[0].append(('MODULE', p[2].name, p[2].attribute_list, p[4])) 97 """root : import_list definition_list"""
101 else: 98 p[0] = ast.Mojom(None, p[1], p[2])
102 p[0].append(('MODULE', None, None, p[2]))
103 99
104 def p_import_list_1(self, p): 100 def p_import_list_1(self, p):
105 """import_list : """ 101 """import_list : """
106 p[0] = ast.ImportList() 102 p[0] = ast.ImportList()
107 103
108 def p_import_list_2(self, p): 104 def p_import_list_2(self, p):
109 """import_list : import_list import""" 105 """import_list : import_list import"""
110 p[0] = p[1] 106 p[0] = p[1]
111 p[0].Append(p[2]) 107 p[0].Append(p[2])
112 108
113 def p_import(self, p): 109 def p_import(self, p):
114 """import : IMPORT STRING_LITERAL""" 110 """import : IMPORT STRING_LITERAL"""
115 # 'eval' the literal to strip the quotes. 111 # 'eval' the literal to strip the quotes.
116 # TODO(vtl): This eval is dubious. We should unquote/unescape ourselves. 112 # TODO(vtl): This eval is dubious. We should unquote/unescape ourselves.
117 p[0] = ast.Import(eval(p[2])) 113 p[0] = ast.Import(eval(p[2]))
118 114
119 def p_module(self, p): 115 def p_module(self, p):
120 """module : attribute_section MODULE identifier_wrapped """ 116 """module : attribute_section MODULE identifier_wrapped """
121 p[0] = ast.Module(p[3], p[1], filename=self.filename, lineno=p.lineno(2)) 117 p[0] = ast.Module(p[3], p[1], filename=self.filename, lineno=p.lineno(2))
122 118
123 def p_definition_list(self, p): 119 def p_definition_list(self, p):
124 """definition_list : definition definition_list 120 """definition_list : definition definition_list
125 | """ 121 | """
126 if len(p) > 1: 122 if len(p) > 1:
127 p[0] = _ListFromConcat(p[1], p[2]) 123 p[0] = p[2]
124 p[0].insert(0, p[1])
125 else:
126 p[0] = []
128 127
129 def p_definition(self, p): 128 def p_definition(self, p):
130 """definition : struct 129 """definition : struct
131 | interface 130 | interface
132 | enum 131 | enum
133 | const""" 132 | const"""
134 p[0] = p[1] 133 p[0] = p[1]
135 134
136 def p_attribute_section_1(self, p): 135 def p_attribute_section_1(self, p):
137 """attribute_section : """ 136 """attribute_section : """
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
375 374
376 def Parse(source, filename): 375 def Parse(source, filename):
377 lexer = Lexer(filename) 376 lexer = Lexer(filename)
378 parser = Parser(lexer, source, filename) 377 parser = Parser(lexer, source, filename)
379 378
380 lex.lex(object=lexer) 379 lex.lex(object=lexer)
381 yacc.yacc(module=parser, debug=0, write_tables=0) 380 yacc.yacc(module=parser, debug=0, write_tables=0)
382 381
383 tree = yacc.parse(source) 382 tree = yacc.parse(source)
384 return tree 383 return tree
OLDNEW
« no previous file with comments | « mojo/public/tools/bindings/pylib/mojom/parse/ast.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