/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package compiler;

import API.Instruction;
import IntermediaryCode.Code;

/**
 *
 * @author Eugenio
 * @param
 */
public interface IvannosysTargetArch {

    public void Init();

    public IvannosysTargetArch SetTAC(Code tac);

    public IvannosysTargetArch Compile();

    public IvannosysTargetArch Format();

    // Export gera a representacao fisica do codigo
    // Sua funcao é gerar o(s) arquivo(s) de saida
    public IvannosysTargetArch Export();
    // Metodos de traduzir tac para target

    public void Prolog(String id) throws Exception;

    public void Epilog(String id) throws Exception;

    public void TranslateLabel(Instruction inst) throws Exception;

    public void TranslateAssign(Instruction inst) throws Exception;

    public void TranslateJump(Instruction inst) throws Exception;

    public void TranslateCall(Instruction inst) throws Exception;

    public void TranslateReturn(Instruction inst) throws Exception;

    public void TranslatePushParam(Instruction inst) throws Exception;

    public void TranslatePushReturn(Instruction inst) throws Exception;

    public void TranslatePopReturn(Instruction inst) throws Exception;

    public void TranslatePopParam(Instruction inst) throws Exception;

    public void TranslateBranch(Instruction inst) throws Exception;

    public void TranslateUnary(Instruction inst) throws Exception;

    public void TranslateIndexedAssignment(Instruction inst) throws Exception;

    public void TranslateCopy(Instruction inst) throws Exception;

    public void TranslatePointerAssignment(Instruction inst) throws Exception;

}
