# -*- coding: utf-8 -*- # date: 20 Mai 2009 class Tag(object): __slots__ = ["name"] def __init__(self, name): self.name = name def __str__(self): return self.name def __repr__(self): return "" % self # lexer tokens Tag.NUMBER = Tag("NUMBER") Tag.TRUE = Tag("TRUE") Tag.FALSE = Tag("FALSE") Tag.IDENT = Tag("IDENT") Tag.WHILE = Tag("WHILE") Tag.IF = Tag("IF") Tag.ELSE = Tag("ELSE") Tag.END = Tag("END") Tag.LBRAK = Tag("LBRAK") Tag.RBRAK = Tag("RBRAK") Tag.LPAREN = Tag("LPAREN") Tag.RPAREN = Tag("RPAREN") Tag.NEWLINE = Tag("NEWLINE") Tag.COMMA = Tag("COMMA") Tag.FUN = Tag("FUN") Tag.ASSIGNMENT = Tag("ASSIGNMENT") Tag.RETURN = Tag("RETURN") Tag.OPERATOR = Tag("OPERATOR") # parser tokens Tag.BOOL = Tag("BOOL") Tag.JOIN = Tag("JOIN") Tag.EQUALITY = Tag("EQUALITY") Tag.RELATION = Tag("RELATION") Tag.EXPRESSION = Tag("EXPRESSION") Tag.TERM = Tag("TERM") Tag.UNARY = Tag("UNARY") Tag.FACTOR = Tag("FACTOR") Tag.IDENT = Tag("IDENT") Tag.EXPRESSION = Tag("EXPRESSION") Tag.PROGRAM = Tag("PROGRAM") Tag.FUNCTION = Tag("FUNCTION") Tag.STATEMENT = Tag("STATEMENT") Tag.STATEMENTS = Tag("STATEMENTS") Tag.IF = Tag("IF") Tag.WHILE = Tag("WHILE") Tag.RETURN = Tag("RETURN") Tag.ASSIGN = Tag("ASSIGN") Tag.FUNCTION = Tag("FUNCTION") class Token(object): __slots__ = ["tag"] def __init__(self, tag): self.tag = tag def __repr__(self): return "" % self.tag class LeafToken(Token): __slots__ = ["value"] def __init__(self, tag, value = None): Token.__init__(self, tag) self.value = value def __repr__(self): if self.value: return "" % (self.tag, self.value.__str__()) return "" % self.tag class NodeToken(Token): pass