summaryrefslogblamecommitdiffstats
path: root/Classes.py
blob: f144e77c2f3e04ccf4f532c59df92435a4482cf4 (plain) (tree)





































































































































                                                                        
                            
 
 

                       
 


                                       
 
                               
class KlassType:
    def __init__(self, name):
        self.name = name

    def __str__(self):
        return self.name

    def __repr__(self):
        return "<KlassType: %s>" % self

KlassType.CONST    = KlassType("const")
KlassType.VAR      = KlassType("var")
KlassType.FUNCNAME = KlassTupe("function name")

class OperatorType:
    def __init__(self, name):
        self.name = name

    def __str__(self):
        return self.name

    def __repr__(self):
        return "<OperatorType: %s>" % self

OperatorType.EQ  = OperatorType("==")
OperatorType.NE  = OperatorType("!=")
OperatorType.GE  = OperatorType(">=")
OperatorType.LE  = OperatorType("<=")
OperatorType.GT  = OperatorType(">")
OperatorType.LT  = OperatorType("<")
OperatorType.ADD = OperatorType("+")
OperatorType.SUB = OperatorType("-")
OperatorType.MUL = OperatorType("*")
OperatorType.DIV = OperatorType("/")
OperatorType.MOD = OperatorType("%")
OperatorType.AND = OperatorType("&&")
OperatorType.OR  = OperatorType("||")

class TokenType:
    def __init__(self, name):
        self.name = name

    def __str__(self):
        return self.name

    def __repr__(self):
        return "<TokenType: %s>" % self

TokenType.FUN      = TokenType("fun")
TokenType.IDENT    = TokenType("identifier")
TokenType.LBRAK    = TokenType("[")
TokenType.RBRAK    = TokenType("]")
TokenType.LPAREN   = TokenType("(")
TokenType.RPAREN   = TokenType(")")
TokenType.NEWLINE  = TokenType("newline")
TokenType.IF       = TokenType("if")
TokenType.TAB      = TokenType("tab")
TokenType.OPERATOR = TokenType("operator")
TokenType.NUMBER   = TokenType("number")
TokenType.RETURN   = TokenType("return")
TokenType.END      = TokenType("end")

class NonTerminalType:
    def __init__(self, name):
        self.name = name

    def __str__(self):
        return self.name

    def __repr__(self):
        return "<NonTerminalType: %s>" % self

NonTerminalType.FACTOR            = NonTerminalType("factor")
NonTerminalType.TERM              = NonTerminalType("term")
NonTerminalType.SIMPLE_EXPRESSION = NonTerminalType("simple_expression")
NonTerminalType.EXPRESSION        = NonTerminalType("expression")
NonTerminalType.IDENT_LIST        = NonTerminalType("ident_list")
NonTerminalType.EXPRESSION_LIST   = NonTerminalType("expression_list")
NonTerminalType.PROGRAM           = NonTerminalType("program")
NonTerminalType.FUNCTION          = NonTerminalType("function")
NonTerminalType.STATEMENT         = NonTerminalType("statement")
NonTerminalType.STATEMENTS        = NonTerminalType("statements")
NonTerminalType.IF_STATEMENT      = NonTerminalType("if_statement")
NonTerminalType.WHILE_STATEMENT   = NonTerminalType("while_statement")
NonTerminalType.RETURN_STATEMENT  = NonTerminalType("return_statement")
NonTerminalType.ASSIGNMENT        = NonTerminalType("assignment")
NonTerminalType.FUNCTION_CALL     = NonTerminalType("function_call")

class NonTerminal:
    # bsp: <FUNCTION, Zwischencode>
    def __init__(self,type,code=None):
        self.type = type
        self.code = code

class Token:
    # bsp: <identifier,0>
    def __init__(self,type,value=None):
        self.type = type
        self.value = value

class Tokenlist:
    tokenlist = []

    def __init__(self,source):
        self.source = source

    def getNextToken(self):
        #... irgendwann..
        return tokenlist.next()

    def getValue(self,key)
        # ... blublub
        return somevalue

class Symbol:
    name = None
    value = None
    type = None # int, string,..
    klass = None # const, var, functionName

    def __init__(self, name):
        self.name = name

class ParseTree:
    def __init__(self, root):
        self.root = root

class ParseTreeNode:
    children = []
    value = None # Token oder NonTerminal

    def __init__(self, value):
        self.value = value

class ThreeAddressCodeToken:


class ThreeAddressCode:
    codelist = []

    # returns code or -1 if end of list
    getNextCode():
        return someCode

###############################