Spaces:
Runtime error
Runtime error
| class CodeGen: | |
| def generate_asm(self, tac_list): | |
| asm = [] | |
| for line in tac_list: | |
| parts = line.split() | |
| if not parts: | |
| continue | |
| # Handle PRINT: "PRINT t1" | |
| if parts[0] == 'PRINT': | |
| asm.append(f"LOAD {parts[1]}") | |
| asm.append("OUT") | |
| # Handle Simple Assignment: "a = 5" or "a = t1" | |
| elif len(parts) == 3 and parts[1] == '=': | |
| asm.append(f"LOAD {parts[2]}") | |
| asm.append(f"STORE {parts[0]}") | |
| # Handle Binary Operations: "t1 = a + b" | |
| elif len(parts) == 5 and parts[1] == '=': | |
| target = parts[0] | |
| left = parts[2] | |
| op_char = parts[3] | |
| right = parts[4] | |
| op_map = { | |
| '+': 'ADD', | |
| '-': 'SUB', | |
| '*': 'MUL', | |
| '/': 'DIV' | |
| } | |
| op_code = op_map.get(op_char, 'UNK') | |
| asm.append(f"LOAD {left}") | |
| asm.append(f"{op_code} {right}") | |
| asm.append(f"STORE {target}") | |
| # --- HIGH-FI ADDITION: Low-Level Peephole Optimizer Pass --- | |
| # Seamlessly filters out redundant instructions without touching your loop | |
| optimized_asm = [] | |
| for inst in asm: | |
| if inst.startswith("LOAD ") and optimized_asm: | |
| prev_inst = optimized_asm[-1] | |
| var_name = inst[5:] | |
| if prev_inst == f"STORE {var_name}": | |
| continue # Drops unneeded RAM reload cycle since it's already in CPU | |
| optimized_asm.append(inst) | |
| return optimized_asm |