Hydrogen-python/Optimizer/block.py
2025-06-12 17:27:14 +08:00

57 lines
1.3 KiB
Python

l = [
'=,1,_,t',
'=,5,_,t',
'=,2,_,_t2',
'=,4,_,_t1',
'+,4,_t2,_t3',
'-,_t2,_t3,_t1',
]
class FourTuple:
cnt =0
def __init__(self, a='_',b='_',c='_',d='_'):
self.a = a
self.b = b
self.c = c
self.d = d
self.cnt = FourTuple.cnt
FourTuple.cnt += 1
self.block_sign = set(['if','jmp','jmpf','el','ifend','while','fun','return','while','we','goto'])
def is_block_sign(self):
return self.a in self.block_sign
def __str__(self):
return f"({self.a} , {self.b} , {self.c} , {self.d})"
class BlockDivider:
def __init__(self,lst):
self.ans = []
self.l =[]
for i in lst:
k = i.split(',')
obj = FourTuple(k[0].strip(),k[1].strip(),k[2].strip(),k[3].strip())
self.l.append(obj)
# print(obj)
def run(self):
lst = []
for i in self.l:
lst.append(i)
if i.is_block_sign():
self.ans.append(lst)
lst = []
if lst:
self.ans.append(lst)
return self.ans
if __name__ == '__main__':
divider = BlockDivider(l)
ans = divider.run()
for i in ans:
for j in i:
print(j,end='\t')
print()