package de.gaalop.codegenGapp;
import de.gaalop.CodeGenerator;
import de.gaalop.OutputFile;
import de.gaalop.cfg.ControlFlowGraph;
import de.gaalop.gapp.visitor.PrettyPrint;
import java.nio.charset.Charset;
import java.util.Collections;
import java.util.Set;
/**
* Implements a code generator for gapp members,
* which lists all GAPP members in a graph in a pretty-printed format
* @author Christian Steinmetz
*/
public class GAPPCodeGenerator implements CodeGenerator {
@Override
public Set<OutputFile> generate(ControlFlowGraph in) {
String code = generateCode(in);
String filename = generateFilename(in);
OutputFile sourceFile = new OutputFile(filename, code, Charset.forName("UTF-8"));
return Collections.singleton(sourceFile);
}
private String generateFilename(ControlFlowGraph in) {
String filename = "gaalop.gapp";
if (in.getSource() != null) {
filename = in.getSource().getName();
int lastDotIndex = filename.lastIndexOf('.');
if (lastDotIndex != -1) {
filename = filename.substring(0, lastDotIndex);
}
filename += ".gapp";
}
return filename;
}
/**
* Generates source code for a control dataflow graph.
*
* @param in The graph that should be used for code generation
* @return The genereated code
*/
private String generateCode(ControlFlowGraph in) {
PrettyPrint printer = new PrettyPrint();
in.accept(printer);
return printer.getResultString();
}
}