diff options
author | Andreas Nüßlein <nutz@unfoog.de> | 2009-05-15 20:42:19 +0200 |
---|---|---|
committer | Andreas Nüßlein <nutz@unfoog.de> | 2009-05-15 20:42:19 +0200 |
commit | 6d2b0eeb5018013fb8ba6e8c2e31d637cc04f72c (patch) | |
tree | 899110d5b4a35bd1ce7e146cc834ddbec48126c6 | |
parent | b50aea83018bb8d4084e7f0438a665b5c4f4ec09 (diff) | |
download | swppy-6d2b0eeb5018013fb8ba6e8c2e31d637cc04f72c.tar.gz swppy-6d2b0eeb5018013fb8ba6e8c2e31d637cc04f72c.tar.xz swppy-6d2b0eeb5018013fb8ba6e8c2e31d637cc04f72c.zip |
added Classes.py
-rw-r--r-- | Classes.py | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/Classes.py b/Classes.py new file mode 100644 index 0000000..c969395 --- /dev/null +++ b/Classes.py @@ -0,0 +1,141 @@ +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 Lexer: + +class Parser: + |