ValueList list = new ValueList(programs.length); for (int i = 0; i < programs.length; i++){
list.add(i, new SeqValue(programs[i].replace(".simple", "")));
}
Value result = new SeqValue(list); return result;
} catch (NullPointerException e){
Console.out.println("Null"); returnnew SeqValue("");
}
}
public Value parseSimpleProgram(Value filename) throws Exception { returnnew Simple.ASTParse().Parse(new QuoteValue("PP"), new SeqValue(PROGRAMS_DIR+File.separatorChar+stringOf(filename)+".simple"));
}
// Not tested public Value writeProgram(Value filename, Value contents){ // Create the dir for generated files
File generatedDir = new File(GENERATED_DIR); if (!generatedDir.exists()){ boolean res = generatedDir.mkdirs(); if (!res){
Console.err.println("Couldnt create generated dir"); returnnew BooleanValue(false);
}
}
public Value compileProgram(Value path){
Value result;
String strPath = stringOf(path)+".java";
ProcessBuilder pb = new ProcessBuilder("javac", strPath).directory(new File(GENERATED_DIR)); try {
Process p = pb.start(); int retCode = p.waitFor();
closeProcess(p);
result = new BooleanValue(true);
} catch (IOException e){
Console.err.println(e.getMessage());
result = new BooleanValue(false);
} catch (InterruptedException e){
Console.err.println(e.getMessage());
result = new BooleanValue(false);
}
return result;
}
public Value runProgram(Value path){
Value result;
String strPath = stringOf(path);
ProcessBuilder pb = new ProcessBuilder("java", strPath).directory(new File(GENERATED_DIR)); try {
Process p = pb.start(); int retCode = p.waitFor();
closeProcess(p);
result = new IntegerValue(retCode);
} catch (IOException e){
Console.err.println(e.getMessage());
result = new BooleanValue(false);
} catch (InterruptedException e){
Console.err.println(e.getMessage());
result = new BooleanValue(false);
} return result;
}
// We need this because the toString of the Value converts special // characters back to their quoted form. privatestatic String stringOf(Value val) {
StringBuilder s = new StringBuilder();
val = val.deref();
if (val instanceof SeqValue) {
SeqValue sv = (SeqValue) val;
for (Value v : sv.values) {
v = v.deref();
if (v instanceof CharacterValue) {
CharacterValue cv = (CharacterValue) v;
s.append(cv.unicode);
} else {
s.append("?");
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.