Chromium Code Reviews| 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 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 312 | NAME EQUALS identifier_wrapped""" | 312 | NAME EQUALS identifier_wrapped""" |
| 313 p[0] = ast.EnumValue(p[1], p[3] if len(p) == 4 else None, | 313 p[0] = ast.EnumValue(p[1], p[3] if len(p) == 4 else None, |
| 314 filename=self.filename, lineno=p.lineno(1)) | 314 filename=self.filename, lineno=p.lineno(1)) |
| 315 | 315 |
| 316 def p_const(self, p): | 316 def p_const(self, p): |
| 317 """const : CONST typename NAME EQUALS constant SEMI""" | 317 """const : CONST typename NAME EQUALS constant SEMI""" |
| 318 p[0] = ast.Const(p[3], p[2], p[5]) | 318 p[0] = ast.Const(p[3], p[2], p[5]) |
| 319 | 319 |
| 320 def p_constant(self, p): | 320 def p_constant(self, p): |
| 321 """constant : literal | 321 """constant : literal |
| 322 | identifier_wrapped""" | 322 | identifier_wrapped""" |
|
viettrungluu
2014/08/21 16:42:18
If you didn't add a lexer token for these, wouldn'
| |
| 323 p[0] = p[1] | 323 p[0] = p[1] |
| 324 | 324 |
| 325 def p_identifier_wrapped(self, p): | 325 def p_identifier_wrapped(self, p): |
| 326 """identifier_wrapped : identifier""" | 326 """identifier_wrapped : identifier""" |
| 327 p[0] = ('IDENTIFIER', p[1]) | 327 p[0] = ('IDENTIFIER', p[1]) |
| 328 | 328 |
| 329 # TODO(vtl): Make this produce a "wrapped" identifier (probably as an | 329 # TODO(vtl): Make this produce a "wrapped" identifier (probably as an |
| 330 # |ast.Identifier|, to be added) and get rid of identifier_wrapped. | 330 # |ast.Identifier|, to be added) and get rid of identifier_wrapped. |
| 331 def p_identifier(self, p): | 331 def p_identifier(self, p): |
| 332 """identifier : NAME | 332 """identifier : NAME |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 349 p[0] = ''.join(p[1:]) | 349 p[0] = ''.join(p[1:]) |
| 350 | 350 |
| 351 def p_int_const(self, p): | 351 def p_int_const(self, p): |
| 352 """int_const : INT_CONST_DEC | 352 """int_const : INT_CONST_DEC |
| 353 | INT_CONST_HEX""" | 353 | INT_CONST_HEX""" |
| 354 p[0] = p[1] | 354 p[0] = p[1] |
| 355 | 355 |
| 356 def p_float(self, p): | 356 def p_float(self, p): |
| 357 """float : FLOAT_CONST | 357 """float : FLOAT_CONST |
| 358 | PLUS FLOAT_CONST | 358 | PLUS FLOAT_CONST |
| 359 | MINUS FLOAT_CONST""" | 359 | MINUS FLOAT_CONST |
| 360 | FLOAT_BUILTIN""" | |
| 360 p[0] = ''.join(p[1:]) | 361 p[0] = ''.join(p[1:]) |
| 361 | 362 |
| 362 def p_error(self, e): | 363 def p_error(self, e): |
| 363 if e is None: | 364 if e is None: |
| 364 # Unexpected EOF. | 365 # Unexpected EOF. |
| 365 # TODO(vtl): Can we figure out what's missing? | 366 # TODO(vtl): Can we figure out what's missing? |
| 366 raise ParseError(self.filename, "Unexpected end of file") | 367 raise ParseError(self.filename, "Unexpected end of file") |
| 367 | 368 |
| 368 raise ParseError(self.filename, "Unexpected %r:" % e.value, lineno=e.lineno, | 369 raise ParseError(self.filename, "Unexpected %r:" % e.value, lineno=e.lineno, |
| 369 snippet=self._GetSnippet(e.lineno)) | 370 snippet=self._GetSnippet(e.lineno)) |
| 370 | 371 |
| 371 def _GetSnippet(self, lineno): | 372 def _GetSnippet(self, lineno): |
| 372 return self.source.split('\n')[lineno - 1] | 373 return self.source.split('\n')[lineno - 1] |
| 373 | 374 |
| 374 | 375 |
| 375 def Parse(source, filename): | 376 def Parse(source, filename): |
| 376 lexer = Lexer(filename) | 377 lexer = Lexer(filename) |
| 377 parser = Parser(lexer, source, filename) | 378 parser = Parser(lexer, source, filename) |
| 378 | 379 |
| 379 lex.lex(object=lexer) | 380 lex.lex(object=lexer) |
| 380 yacc.yacc(module=parser, debug=0, write_tables=0) | 381 yacc.yacc(module=parser, debug=0, write_tables=0) |
| 381 | 382 |
| 382 tree = yacc.parse(source) | 383 tree = yacc.parse(source) |
| 383 return tree | 384 return tree |
| OLD | NEW |