view python/asmnodes.py @ 222:c3f1ce8b638f

Fixup of parser
author Windel Bouwman
date Tue, 09 Jul 2013 17:36:31 +0200
parents 6c6bf8890d8a
children 1c7364bd74c7
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)