An error occurred while loading the file. Please try again.
-
lire authored
1. 全局变量修复 2. 取模运算添加
df511aa9
package backend;
import backend.builder.generator.NaiveGenerator;
import backend.builder.generator.SimpleGenerator;
import backend.builder.generator.TempFunction;
import backend.builder.globalvar.GlobalTable;
import backend.builder.register.SimpleLinearScanAllocator;
import backend.exception.BackendExceptions;
import backend.exception.CannotFindJumpTargetLabel;
import backend.flowgraph.FlowGraph;
import backend.optimizer.peephole.PeepholeExecutor;
import ir.BeginFunc;
import ir.EndFunc;
import ir.ILine;
import ir.Quadruple;
import java.util.ArrayList;
import java.util.List;
/**
* @author lire
* @title: BackEnd
* @projectName CSC
* @description: TODO
* @date 2022/5/1712:54
*/
public class BackEnd {
public List<ILine> lines;
public GlobalTable gTable = new GlobalTable();
// public List<FlowGraph> functionLst = new ArrayList<>();
public List<TempFunction> functionLst = new ArrayList<>();
public BackEnd(List<ILine> lines) {
this.lines = lines;
}
public String generate() throws BackendExceptions {
List<ILine> localLines = new ArrayList<>();
boolean isGlobal = true;
for (ILine line : lines) {
System.out.println(line);
if (line instanceof BeginFunc) {
isGlobal = false;
}
if (line instanceof EndFunc) {
isGlobal = true;
var peepholeOptimizer = new PeepholeExecutor.PeepholeExecutorBuilder(localLines).build();
localLines = peepholeOptimizer.execute();
functionLst.add(new TempFunction(((EndFunc) line).getFuncName(), localLines));
localLines = new ArrayList<>();
}
if (line instanceof Quadruple)
gTable.GenerateItem((Quadruple) line, !isGlobal);
if (!isGlobal) {
localLines.add(line);
}
}
StringBuilder builder = new StringBuilder();
builder.append(".arch armv7ve\n");
builder.append(".arm\n");
gTable.createGlobalCode(builder);
builder.append(".global main\n");
builder.append(".section .text\n");
for (var func : functionLst) {
var generator = new NaiveGenerator(func, gTable, builder);
generator.emit();
}
return builder.toString();
}
7172
}