comparison python/asmnodes.py @ 200:5e391d9a3381

Split off asm nodes
author Windel Bouwman
date Sun, 09 Jun 2013 16:06:49 +0200
parents
children d5debbfc0200
comparison
equal deleted inserted replaced
199:a690473b79e2 200:5e391d9a3381
1
2 """ Assembler AST nodes """
3
4 class ANode:
5 def __eq__(self, other):
6 return self.__repr__() == other.__repr__()
7
8 class ALabel(ANode):
9 def __init__(self, name):
10 self.name = name
11 def __repr__(self):
12 return '{0}:'.format(self.name)
13
14 class AInstruction(ANode):
15 def __init__(self, opcode, operands):
16 self.opcode = opcode
17 self.operands = operands
18 def __repr__(self):
19 ops = ', '.join(map(str, self.operands))
20 return '{0} {1}'.format(self.opcode, ops)
21
22 class AExpression(ANode):
23 def __add__(self, other):
24 assert isinstance(other, AExpression)
25 return ABinop('+', self, other)
26 def __mul__(self, other):
27 assert isinstance(other, AExpression)
28 return ABinop('*', self, other)
29
30 class ABinop(AExpression):
31 def __init__(self, op, arg1, arg2):
32 self.op = op
33 self.arg1 = arg1
34 self.arg2 = arg2
35 def __repr__(self):
36 return '{0} {1} {2}'.format(self.op, self.arg1, self.arg2)
37
38 class AUnop(AExpression):
39 def __init__(self, op, arg):
40 self.op = op
41 self.arg = arg
42 def __repr__(self):
43 return '{0} {1}'.format(self.op, self.arg)
44
45 class ASymbol(AExpression):
46 def __init__(self, name):
47 self.name = name
48 def __repr__(self):
49 return self.name
50
51 class ANumber(AExpression):
52 def __init__(self, n):
53 assert type(n) is int
54 self.n = n
55 def __repr__(self):
56 return '{0}'.format(self.n)
57