class ParserError(Exception): '''Parse-related errors''' def __init__(self, ctx): super(ParserError, self).__init__('Parsing input failed') self.context = ctx def __str__(self): orig = super(ParserError, self).__str__() return '%s\n%s' % (orig, self.context.summary) # Lexer lexer_factory = LexerFactory() lexer_factory.add_ignore_token('SPACES', '\\s+'); lexer_factory.add_ignore_token('COMMENTS', '\\#.*?\\n'); lexer_factory.add_literal('TOKEN', 'token') lexer_factory.add_literal('KEYWORD', 'keyword') lexer_factory.add_literal('LITERAL', 'literal') lexer_factory.add_literal('IGNORE', 'ignore') lexer_factory.add_literal('NODE', 'node') lexer_factory.add_literal('LIST', 'list') lexer_factory.add_literal('SELECTION', 'selection') lexer_factory.add_literal('OPTIONAL', 'optional') lexer_factory.add_literal('REQUIRED', 'required') lexer_factory.add_literal('RULE', 'rule') lexer_factory.add_literal('START', 'start') lexer_factory.add_literal('PRECEDENCE', 'precedence') lexer_factory.add_literal('LEFT', 'left')
class ParserError(Exception): '''Parse-related errors''' def __init__(self, ctx): super(ParserError, self).__init__('Parsing input failed') self.context = ctx def __str__(self): orig = super(ParserError, self).__str__() return '%s\n%s' % (orig, self.context.summary) # Lexer lexer_factory = LexerFactory() lexer_factory.add_ignore_token('SPACES', '\s+'); lexer_factory.add_token('NAME', '[a-zA-Z_][a-zA-Z0-9]*') lexer_factory.add_token('NUMBER', '(0|[1-9][0-9]*)(\.[0-9]+)?([eE][+-]?[0-9]+)?') lexer_factory.add_literal('EQ', '=') lexer_factory.add_literal('ADD', '+') lexer_factory.add_literal('SUB', '-') lexer_factory.add_literal('MUL', '*') lexer_factory.add_literal('DIV', '/') lexer_factory.add_literal('POW', '^') lexer_factory.add_literal('COMMA', ',') lexer_factory.add_literal('LPAREN', '(') lexer_factory.add_literal('RPAREN', ')') lexer_factory.add_keyword('for'); lexer_factory.add_keyword('do'); lexer_factory.add_keyword('to');