Mercurial > lcfOS
diff python/ppci/asmnodes.py @ 334:6f4753202b9a
Added more recipes
author | Windel Bouwman |
---|---|
date | Thu, 13 Feb 2014 22:02:08 +0100 |
parents | python/asmnodes.py@83781bd10fdb |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/python/ppci/asmnodes.py Thu Feb 13 22:02:08 2014 +0100 @@ -0,0 +1,59 @@ + +""" Assembler AST nodes """ + +class ANode: + def __eq__(self, other): + return self.__repr__() == other.__repr__() + +class ALabel(ANode): + def __init__(self, name): + self.name = name + def __repr__(self): + return '{0}:'.format(self.name) + + +class AInstruction(ANode): + def __init__(self, mnemonic, operands): + self.mnemonic = mnemonic + self.operands = operands + def __repr__(self): + ops = ', '.join(map(str, self.operands)) + return '{0} {1}'.format(self.mnemonic, ops) + +class AExpression(ANode): + def __add__(self, other): + assert isinstance(other, AExpression) + return ABinop('+', self, other) + def __mul__(self, other): + assert isinstance(other, AExpression) + return ABinop('*', self, other) + +class ABinop(AExpression): + def __init__(self, op, arg1, arg2): + self.op = op + self.arg1 = arg1 + self.arg2 = arg2 + def __repr__(self): + return '{0} {1} {2}'.format(self.op, self.arg1, self.arg2) + +class AUnop(AExpression): + def __init__(self, operation, arg): + self.operation = operation + self.arg = arg + def __repr__(self): + return '{0} {1}'.format(self.operation, self.arg) + +class ASymbol(AExpression): + def __init__(self, name): + self.name = name + def __repr__(self): + return self.name + +class ANumber(AExpression): + def __init__(self, n): + assert type(n) is int + self.n = n + self.number = n + def __repr__(self): + return '{0}'.format(self.n) +