Exemplo n.º 1
0
lexer_factory.add_literal('VERSION', 'version')
lexer_factory.add_literal('EMAIL', 'email')
lexer_factory.add_literal('SEMICOLON', ';')
lexer_factory.add_literal('COLON', ',')
lexer_factory.add_literal('MINUS', '-')
lexer_factory.add_literal('EQ', '=')
lexer_factory.add_literal('PERIOD', '.')
lexer_factory.add_literal('COMMA', ':')
lexer_factory.add_literal('LCURLY', '{')
lexer_factory.add_literal('RCURLY', '}')
lexer_factory.add_literal('LPAREN', '(')
lexer_factory.add_literal('RPAREN', ')')
lexer_factory.add_literal('PRECSYM', '%prec')
lexer_factory.add_literal('ERRSYM', '%error')
lexer_factory.add_literal('WARNSYM', '%warning')
lexer_factory.add_token('ID', '[a-zA-Z_][a-zA-Z0-9_]*')
lexer_factory.add_token('STRING', '\'([^\'\\\\]+|\\\\.)*\'')
lexer_factory.add_token('INTEGER', '[+-]?(0|[1-9][0-9]*)')
Lexer = lexer_factory.create_class()

# AST nodes
metainfo = ast.Metainfo()

AlpScript_properties = (
    ('head', ast.REQUIRED),
    ('body', ast.REQUIRED),
)
AlpScript_info = ast.Info('AlpScript', AlpScript_properties)
AlpScript = AlpScript_info.get_class(metainfo)

AlpHead_properties = (
Exemplo n.º 2
0
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');
lexer_factory.add_keyword('step');
lexer_factory.add_keyword('def');