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

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

Issue 268363003: Mojo: Add support for constants to the IDL compiler. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: JS export constants Created 6 years, 7 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 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 94
95 def p_definitions(self, p): 95 def p_definitions(self, p):
96 """definitions : definition definitions 96 """definitions : definition definitions
97 | """ 97 | """
98 if len(p) > 1: 98 if len(p) > 1:
99 p[0] = _ListFromConcat(p[1], p[2]) 99 p[0] = _ListFromConcat(p[1], p[2])
100 100
101 def p_definition(self, p): 101 def p_definition(self, p):
102 """definition : struct 102 """definition : struct
103 | interface 103 | interface
104 | enum""" 104 | enum
105 | const"""
105 p[0] = p[1] 106 p[0] = p[1]
106 107
107 def p_attribute_section(self, p): 108 def p_attribute_section(self, p):
108 """attribute_section : LBRACKET attributes RBRACKET 109 """attribute_section : LBRACKET attributes RBRACKET
109 | """ 110 | """
110 if len(p) > 3: 111 if len(p) > 3:
111 p[0] = p[2] 112 p[0] = p[2]
112 113
113 def p_attributes(self, p): 114 def p_attributes(self, p):
114 """attributes : attribute 115 """attributes : attribute
115 | attribute COMMA attributes 116 | attribute COMMA attributes
116 | """ 117 | """
117 if len(p) == 2: 118 if len(p) == 2:
118 p[0] = _ListFromConcat(p[1]) 119 p[0] = _ListFromConcat(p[1])
119 elif len(p) > 3: 120 elif len(p) > 3:
120 p[0] = _ListFromConcat(p[1], p[3]) 121 p[0] = _ListFromConcat(p[1], p[3])
121 122
122 def p_attribute(self, p): 123 def p_attribute(self, p):
123 """attribute : NAME EQUALS expression 124 """attribute : NAME EQUALS expression
124 | NAME EQUALS NAME""" 125 | NAME EQUALS NAME"""
125 p[0] = ('ATTRIBUTE', p[1], p[3]) 126 p[0] = ('ATTRIBUTE', p[1], p[3])
126 127
127 def p_struct(self, p): 128 def p_struct(self, p):
128 """struct : attribute_section STRUCT NAME LBRACE struct_body RBRACE SEMI""" 129 """struct : attribute_section STRUCT NAME LBRACE struct_body RBRACE SEMI"""
129 p[0] = ('STRUCT', p[3], p[1], p[5]) 130 p[0] = ('STRUCT', p[3], p[1], p[5])
130 131
131 def p_struct_body(self, p): 132 def p_struct_body(self, p):
132 """struct_body : field struct_body 133 """struct_body : field struct_body
133 | enum struct_body 134 | enum struct_body
135 | const struct_body
134 | """ 136 | """
135 if len(p) > 1: 137 if len(p) > 1:
136 p[0] = _ListFromConcat(p[1], p[2]) 138 p[0] = _ListFromConcat(p[1], p[2])
137 139
138 def p_field(self, p): 140 def p_field(self, p):
139 """field : typename NAME default ordinal SEMI""" 141 """field : typename NAME default ordinal SEMI"""
140 p[0] = ('FIELD', p[1], p[2], p[4], p[3]) 142 p[0] = ('FIELD', p[1], p[2], p[4], p[3])
141 143
142 def p_default(self, p): 144 def p_default(self, p):
143 """default : EQUALS expression 145 """default : EQUALS expression
144 | EQUALS expression_object 146 | EQUALS expression_object
145 | """ 147 | """
146 if len(p) > 2: 148 if len(p) > 2:
147 p[0] = p[2] 149 p[0] = p[2]
148 150
149 def p_interface(self, p): 151 def p_interface(self, p):
150 """interface : attribute_section INTERFACE NAME LBRACE interface_body \ 152 """interface : attribute_section INTERFACE NAME LBRACE interface_body \
151 RBRACE SEMI""" 153 RBRACE SEMI"""
152 p[0] = ('INTERFACE', p[3], p[1], p[5]) 154 p[0] = ('INTERFACE', p[3], p[1], p[5])
153 155
154 def p_interface_body(self, p): 156 def p_interface_body(self, p):
155 """interface_body : method interface_body 157 """interface_body : method interface_body
156 | enum interface_body 158 | enum interface_body
159 | const interface_body
157 | """ 160 | """
158 if len(p) > 1: 161 if len(p) > 1:
159 p[0] = _ListFromConcat(p[1], p[2]) 162 p[0] = _ListFromConcat(p[1], p[2])
160 163
161 def p_response(self, p): 164 def p_response(self, p):
162 """response : RESPONSE LPAREN parameters RPAREN 165 """response : RESPONSE LPAREN parameters RPAREN
163 | """ 166 | """
164 if len(p) > 3: 167 if len(p) > 3:
165 p[0] = p[3] 168 p[0] = p[3]
166 169
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 p[0] = _ListFromConcat(p[1], p[3]) 239 p[0] = _ListFromConcat(p[1], p[3])
237 240
238 def p_enum_field(self, p): 241 def p_enum_field(self, p):
239 """enum_field : NAME 242 """enum_field : NAME
240 | NAME EQUALS expression""" 243 | NAME EQUALS expression"""
241 if len(p) == 2: 244 if len(p) == 2:
242 p[0] = ('ENUM_FIELD', p[1], None) 245 p[0] = ('ENUM_FIELD', p[1], None)
243 else: 246 else:
244 p[0] = ('ENUM_FIELD', p[1], p[3]) 247 p[0] = ('ENUM_FIELD', p[1], p[3])
245 248
249 def p_const(self, p):
250 """const : CONST typename NAME EQUALS expression SEMI"""
251 p[0] = ('CONST', p[2], p[3], p[5])
252
246 ### Expressions ### 253 ### Expressions ###
247 254
248 def p_expression_object(self, p): 255 def p_expression_object(self, p):
249 """expression_object : expression_array 256 """expression_object : expression_array
250 | LBRACE expression_object_elements RBRACE """ 257 | LBRACE expression_object_elements RBRACE """
251 if len(p) < 3: 258 if len(p) < 3:
252 p[0] = p[1] 259 p[0] = p[1]
253 else: 260 else:
254 p[0] = ('OBJECT', p[2]) 261 p[0] = ('OBJECT', p[2])
255 262
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
352 359
353 def Parse(source, filename): 360 def Parse(source, filename):
354 lexer = Lexer(filename) 361 lexer = Lexer(filename)
355 parser = Parser(lexer, source, filename) 362 parser = Parser(lexer, source, filename)
356 363
357 lex.lex(object=lexer) 364 lex.lex(object=lexer)
358 yacc.yacc(module=parser, debug=0, write_tables=0) 365 yacc.yacc(module=parser, debug=0, write_tables=0)
359 366
360 tree = yacc.parse(source) 367 tree = yacc.parse(source)
361 return tree 368 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