OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright 2013 The Chromium Authors. All rights reserved. | 2 # Copyright 2013 The Chromium Authors. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 """Generates a syntax tree from a Mojo IDL file.""" | 6 """Generates a syntax tree from a Mojo IDL file.""" |
7 | 7 |
8 | 8 |
9 import sys | 9 import sys |
10 import os.path | 10 import os.path |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
49 eof=False): | 49 eof=False): |
50 self.filename = filename | 50 self.filename = filename |
51 self.lineno = lineno | 51 self.lineno = lineno |
52 self.snippet = snippet | 52 self.snippet = snippet |
53 self.bad_char = bad_char | 53 self.bad_char = bad_char |
54 self.eof = eof | 54 self.eof = eof |
55 | 55 |
56 def __str__(self): | 56 def __str__(self): |
57 return "%s: Error: Unexpected end of file" % self.filename if self.eof \ | 57 return "%s: Error: Unexpected end of file" % self.filename if self.eof \ |
58 else "%s:%d: Error: Unexpected %r:\n%s" % ( | 58 else "%s:%d: Error: Unexpected %r:\n%s" % ( |
59 self.filename, self.lineno + 1, self.bad_char, self.snippet) | 59 self.filename, self.lineno, self.bad_char, self.snippet) |
60 | 60 |
61 def __repr__(self): | 61 def __repr__(self): |
62 return str(self) | 62 return str(self) |
63 | 63 |
64 | 64 |
65 class Parser(object): | 65 class Parser(object): |
66 | 66 |
67 def __init__(self, lexer, source, filename): | 67 def __init__(self, lexer, source, filename): |
68 self.tokens = lexer.tokens | 68 self.tokens = lexer.tokens |
69 self.source = source | 69 self.source = source |
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
327 | CHAR_CONST | 327 | CHAR_CONST |
328 | STRING_LITERAL""" | 328 | STRING_LITERAL""" |
329 p[0] = _ListFromConcat(*p[1:]) | 329 p[0] = _ListFromConcat(*p[1:]) |
330 | 330 |
331 def p_error(self, e): | 331 def p_error(self, e): |
332 if e is None: | 332 if e is None: |
333 # Unexpected EOF. | 333 # Unexpected EOF. |
334 # TODO(vtl): Can we figure out what's missing? | 334 # TODO(vtl): Can we figure out what's missing? |
335 raise ParseError(self.filename, eof=True) | 335 raise ParseError(self.filename, eof=True) |
336 | 336 |
337 lineno = e.lineno + 1 | 337 snippet = self.source.split('\n')[e.lineno - 1] |
338 snippet = self.source.split('\n')[lineno] | 338 raise ParseError(self.filename, lineno=e.lineno, snippet=snippet, |
339 raise ParseError(self.filename, lineno=lineno, snippet=snippet, | |
340 bad_char=e.value) | 339 bad_char=e.value) |
341 | 340 |
342 | 341 |
343 def Parse(source, filename): | 342 def Parse(source, filename): |
344 lexer = Lexer(filename) | 343 lexer = Lexer(filename) |
345 parser = Parser(lexer, source, filename) | 344 parser = Parser(lexer, source, filename) |
346 | 345 |
347 lex.lex(object=lexer) | 346 lex.lex(object=lexer) |
348 yacc.yacc(module=parser, debug=0, write_tables=0) | 347 yacc.yacc(module=parser, debug=0, write_tables=0) |
349 | 348 |
(...skipping 13 matching lines...) Expand all Loading... |
363 print Parse(f.read(), filename) | 362 print Parse(f.read(), filename) |
364 except ParseError, e: | 363 except ParseError, e: |
365 print e | 364 print e |
366 return 1 | 365 return 1 |
367 | 366 |
368 return 0 | 367 return 0 |
369 | 368 |
370 | 369 |
371 if __name__ == '__main__': | 370 if __name__ == '__main__': |
372 sys.exit(main(sys.argv)) | 371 sys.exit(main(sys.argv)) |
OLD | NEW |