Mercurial > lcfOS
view python/asmnodes.py @ 280:02385f62f250
Rework from str interface to Instruction interface
author | Windel Bouwman |
---|---|
date | Sat, 02 Nov 2013 10:03:26 +0100 |
parents | 83781bd10fdb |
children |
line wrap: on
line source
""" 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)