public K externalParse(String parser, String value, Sort startSymbol, Source source, CompiledDefinition compiledDef) {
List<String> tokens = new ArrayList<>(Arrays.asList(parser.split(" ")));
tokens.add(value);
Map<String, String> environment = new HashMap<>();
environment.put("KRUN_SORT", startSymbol.toString());
environment.put("KRUN_COMPILED_DEF", files.resolveDefinitionDirectory(".").getAbsolutePath());
RunProcess.ProcessOutput output = RunProcess.execute(environment, files.getProcessBuilder(), tokens.toArray(new String[tokens.size()]));
if (output.exitCode != 0) {
throw new ParseFailedException(new KException(KException.ExceptionType.ERROR, KException.KExceptionGroup.CRITICAL, "Parser returned a non-zero exit code: "
+ output.exitCode + "\nStdout:\n" + new String(output.stdout) + "\nStderr:\n" + new String(output.stderr)));
}
byte[] kast = output.stdout != null ? output.stdout : new byte[0];
if (BinaryParser.isBinaryKast(kast)) {
return BinaryParser.parse(kast);
} else {
return KoreParser.parse(new String(kast), source);
}
}
}