diff --git a/src/Compiler.java b/src/Compiler.java index e007f402d852f0a343cdeade8fc910bc57aa8cfe..cfc680779d2d9b8ab8dde31241b47f81a8e018b9 100644 --- a/src/Compiler.java +++ b/src/Compiler.java @@ -41,10 +41,10 @@ public class Compiler System.out.println("[BUILD C3A] "); buildC3a(); -/* + System.out.println("[BUILD PRE NASM] "); buildPreNasm(); - System.out.println("[BUILD FLOW GRAPH] "); +/* System.out.println("[BUILD FLOW GRAPH] "); buildFg(); System.out.println("[SOLVE FLOW GRAPH]"); solveFg(); diff --git a/src/nasm/C3a2nasm.java b/src/nasm/C3a2nasm.java index de33f5cf53abc9f77d42922fa678d27e59974e96..9e9dce58a7b565f0519f04a9bb6dea5bf570c20c 100644 --- a/src/nasm/C3a2nasm.java +++ b/src/nasm/C3a2nasm.java @@ -29,30 +29,104 @@ public class C3a2nasm implements C3aVisitor <NasmOperand> { public Nasm getNasm(){return nasm;} - public NasmOperand visit(C3a c3a){return null;} - public NasmOperand visit(C3aInstAdd inst){return null;} - public NasmOperand visit(C3aInstCall inst){return null;} - public NasmOperand visit(C3aInstFBegin inst){return null;} + public NasmOperand visit(C3a c3a){ + c3a.affiche("caca"); + for (C3aInst c3aInst : c3a.listeInst) { + c3aInst.accept(this); + System.out.println(c3aInst.getClass()); + } + nasm.affichePreNasm("caca"); + return null; + } + public NasmOperand visit(C3aInstAdd inst){ + NasmOperand label = (inst.label != null) ? + inst.label.accept(this) + : null; + nasm.ajouteInst(new NasmMov(label, + inst.result.accept(this), + inst.op1.accept(this), "")); + nasm.ajouteInst(new NasmAdd(null, + inst.result.accept(this), + inst.op2.accept(this), "")); + return null; + } + + public NasmOperand visit(C3aInstCall inst){ + NasmOperand address = (inst.label != null) ? + inst.label.accept(this) + : null; + nasm.ajouteInst(new NasmCall(null, address, "")); + return null; + } + public NasmOperand visit(C3aInstFBegin inst){ + + + return null; + } public NasmOperand visit(C3aInst inst){return null;} public NasmOperand visit(C3aInstJumpIfLess inst){return null;} - public NasmOperand visit(C3aInstMult inst){return null;} + public NasmOperand visit(C3aInstMult inst){ + NasmOperand label = (inst.label != null) ? + inst.label.accept(this) + : null; + nasm.ajouteInst(new NasmMov(label, + inst.result.accept(this), + inst.op1.accept(this), "")); + nasm.ajouteInst(new NasmMul(null, + inst.result.accept(this), + inst.op2.accept(this), "")); + return null; + } public NasmOperand visit(C3aInstRead inst){return null;} - public NasmOperand visit(C3aInstSub inst){return null;} + public NasmOperand visit(C3aInstSub inst){ + NasmOperand label = (inst.label != null) ? + inst.label.accept(this) + : null; + nasm.ajouteInst(new NasmMov(label, + inst.result.accept(this), + inst.op1.accept(this), "")); + nasm.ajouteInst(new NasmSub(null, + inst.result.accept(this), + inst.op2.accept(this), "")); + return null; + } public NasmOperand visit(C3aInstAffect inst){return null;} - public NasmOperand visit(C3aInstDiv inst){return null;} - public NasmOperand visit(C3aInstFEnd inst){return null;} + public NasmOperand visit(C3aInstDiv inst){ + NasmOperand label = (inst.label != null) ? + inst.label.accept(this) + : null; + nasm.ajouteInst(new NasmMov(label, + inst.result.accept(this), + inst.op1.accept(this), "")); + nasm.ajouteInst(new NasmDiv(null, + inst.result.accept(this), + "")); + return null; + } + public NasmOperand visit(C3aInstFEnd inst){ + + return null; + } public NasmOperand visit(C3aInstJumpIfEqual inst){return null;} public NasmOperand visit(C3aInstJumpIfNotEqual inst){return null;} public NasmOperand visit(C3aInstJump inst){return null;} public NasmOperand visit(C3aInstParam inst){return null;} public NasmOperand visit(C3aInstReturn inst){return null;} - public NasmOperand visit(C3aInstWrite inst){return null;} - public NasmOperand visit(C3aInstStop inst){return null;} + public NasmOperand visit(C3aInstWrite inst){ + + return null; + } + public NasmOperand visit(C3aInstStop inst){ + + return null; + } public NasmOperand visit(C3aConstant oper){return null;} public NasmOperand visit(C3aBooleanConstant oper){return null;} public NasmOperand visit(C3aLabel oper){return null;} - public NasmOperand visit(C3aTemp oper){return null;} + public NasmOperand visit(C3aTemp oper){ + return null; + } public NasmOperand visit(C3aVar oper){return null;} public NasmOperand visit(C3aFunction oper){return null;}