/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* This file is part of SableCC. *
* See the file "LICENSE" for copyright information and the *
* terms and conditions for copying, distribution and *
* modification of SableCC. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
package org.sablecc.sablecc;
import org.sablecc.sablecc.analysis.*;
import org.sablecc.sablecc.node.*;
import java.io.*;
@SuppressWarnings("rawtypes")
public class GenProds extends DepthFirstAdapter {
private MacroExpander macros;
private ResolveAstIds ast_ids;
private File pkgDir;
private String pkgName;
// private Map hiddenProds = new TypedTreeMap(
// StringComparator.instance,
// StringCast.instance,
// NodeCast.instance);
public GenProds(ResolveAstIds ast_ids) {
this.ast_ids = ast_ids;
try {
macros = new MacroExpander(
new InputStreamReader(
getClass().getResourceAsStream("productions.txt")));
} catch (IOException e) {
throw new RuntimeException("unable to open productions.txt.");
}
pkgDir = new File(ast_ids.astIds.pkgDir, "node");
pkgName = ast_ids.astIds.pkgName.equals("") ? "node" : ast_ids.astIds.pkgName + ".node";
if (!pkgDir.exists()) {
if (!pkgDir.mkdir()) {
throw new RuntimeException("Unable to create " + pkgDir.getAbsolutePath());
}
}
}
@Override
public void inAAstProd(AAstProd node) {
String name = (String) ast_ids.ast_names.get(node);
createProduction(name);
}
private void createProduction(String name) {
BufferedWriter file;
try {
file = new BufferedWriter(
new FileWriter(
new File(pkgDir, name + ".java")));
} catch (IOException e) {
throw new RuntimeException("Unable to create " + new File(pkgDir, name + ".java").getAbsolutePath());
}
try {
macros.apply(file, "Production", new String[]{pkgName, name});
} catch (IOException e) {
throw new RuntimeException("An error occured while writing to " +
new File(pkgDir, name + ".java").getAbsolutePath());
}
try {
file.close();
} catch (IOException e) {
}
}
/*
private void createAlternative(String name, String macro, String[] arg)
{
BufferedWriter file;
try
{
file = new BufferedWriter(
new FileWriter(
new File(pkgDir, name + ".java")));
}
catch(IOException e)
{
throw new RuntimeException("Unable to create " + new File(pkgDir, name + ".java").getAbsolutePath());
}
try
{
macros.apply(file, macro, arg);
}
catch(IOException e)
{
throw new RuntimeException("An error occured while writing to " +
new File(pkgDir, name + ".java").getAbsolutePath());
}
try
{
file.close();
}
catch(IOException e)
{}
}
*/
}