// ino.module.MyCompilerAPI.8570.package 
package mycompiler;
// ino.end

// ino.module.MyCompilerAPI.8570.import 
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Vector;
import mycompiler.myexception.CTypeReconstructionException;
import mycompiler.myexception.JVMCodeException;
import mycompiler.myparser.JavaParser;
import mycompiler.mytypereconstruction.TypeinferenceResultSet;
// ino.end

// ino.class.MyCompilerAPI.21328.description type=javadoc
/**
 * Schnittstellen-Klasse zum Compiler. Diese Klasse soll der
 * IDE als Compiler-API zum Kompilieren einer Quellcode-Datei
 * dienen und stellt somit die Schnittstelle zur Studienarbeit
 * von Markus Melzer (Eclipse-Plugin) dar.
 * @author Jörg Bäuerle
 * @version $Date: 2013/09/09 11:04:24 $
 */
// ino.end
// ino.class.MyCompilerAPI.21328.declaration 
public interface MyCompilerAPI
// ino.end
// ino.class.MyCompilerAPI.21328.body
{
    
    // ino.method.init.21331.decldescription type=javadoc
    /**
     * Author: Jörg Bäuerle<br/>
     * Initialisiert den Compiler
     */
    // ino.end
    // ino.method.init.21331.declaration 
    public void init();
    // ino.end
    
    // ino.method.parse.21334.decldescription type=javadoc
    /**
     * Author: Jörg Bäuerle<br/>
     * Parst eine Quellcodedatei und baut den abstrakten Syntaxbaum auf.
     * @param file Die Quellcode-Datei
     * @throws FileNotFoundException Wenn die Quellcode-Datei nicht existiert.
     * @throws IOException Wenn was schief läuft.
     * @throws JavaParser.yyException Wenn ein Fehler beim Parsen auftritt.
     */
    // ino.end
    // ino.method.parse.21334.declaration 
    public void parse(File file)
    throws FileNotFoundException, IOException, JavaParser.yyException;
    // ino.end

    // ino.method.parse.21337.decldescription type=javadoc
    /**
     * Author: Jörg Bäuerle<br/>
     * Parst einen String und baut den abstrakten Syntaxbaum auf.
     * @param srcCode Der zu parsende Quellcode
     * @throws IOException Wenn was schief läuft.
     * @throws JavaParser.yyException Wenn ein Fehler beim Parsen auftritt.
     */
    // ino.end
    // ino.method.parse.21337.declaration 
    public void parse(String srcCode)
    throws IOException, JavaParser.yyException;
    // ino.end

    // ino.method.typeReconstruction.21340.decldescription type=javadoc
    /**
     * Author: Jörg Bäuerle<br/>
     * Ruft den Typrekonstruktionsalgorithmus auf.
     * @return Die Menge aller möglichen Typkombinationen
     * @throws NullPointerException Wenn noch kein abstrakter Syntaxbaum vorhanden     
     * ist. @throws CTypeReconstructionException Wenn ein Fehler bei der               
     * Typrekonstruktion auftritt. 
     */
    // ino.end
    // ino.method.typeReconstruction.21340.declaration 
    public Vector<TypeinferenceResultSet> typeReconstruction()
    throws NullPointerException, CTypeReconstructionException;
    // ino.end

    // ino.method.getSyntaxTree.21343.decldescription type=javadoc
    /**
     * Author: Jörg Bäuerle<br/>
     * Liefert den geparsten Syntaxbaum zurück.
     * @return Die Syntaxbäume
     * @throws NullPointerException Wenn noch kein Syntaxbaum berechnet worden ist.
     */
    // ino.end
    // ino.method.getSyntaxTree.21343.declaration 
    public SourceFile getSyntaxTree()
    throws NullPointerException;
    // ino.end
    
    // ino.method.codeGeneration.21346.decldescription type=javadoc
    /**
     * Author: Jörg Bäuerle<br/>
     * Generiert den Bytecode und das Class-File für den Syntaxbaum.
     * @param syntaxTree Der Syntaxbaum
     * @throws NullPointerException Wenn noch kein abstrakter Syntaxbaum vorhanden     
     * ist. @throws JVMCodeException 
     */
    // ino.end
    // ino.method.codeGeneration.21346.declaration 
    public void codeGeneration()
    throws NullPointerException, JVMCodeException;
    // ino.end
    
    // ino.method.setOutputDir.21349.decldescription type=javadoc
    /**
     * Author: Juergen Schmiing <br>
     * Legt das Ausgabeverzeichnis fuer die class-Files fest.
     */
    // ino.end
    // ino.method.setOutputDir.21349.declaration 
    public void setOutputDir(String dir);
    // ino.end
    
    // ino.method.getOutputDir.21352.decldescription type=javadoc
    /**
     * Author: Juergen Schmiing <br>
     * Gibt das Ausgabeverzeichnis fuer die class-Files zurueck.
     */
    // ino.end
    // ino.method.getOutputDir.21352.declaration 
    public String getOutputDir();
    // ino.end

    /**
     * Parst zusammenhängende JavaKlassen in verschiedenen Dateien.
     * @param filenames - Eine Liste von Quellcodedateien, welche gseparst werden sollen
     */
	public void parse(Vector<String> filenames);
    
}
// ino.end