15
15
public class GenProds extends DepthFirstAdapter
17
private MacroExpander macros;
18
private ResolveIds ids;
20
private String pkgName;
21
private Map hiddenProds = new TypedTreeMap(
22
StringComparator.instance,
26
public GenProds(ResolveIds ids)
32
macros = new MacroExpander(
33
new InputStreamReader(
34
getClass().getResourceAsStream("productions.txt")));
38
throw new RuntimeException("unable to open productions.txt.");
41
pkgDir = new File(ids.pkgDir, "node");
42
pkgName = ids.pkgName.equals("") ? "node" : ids.pkgName + ".node";
48
throw new RuntimeException("Unable to create " + pkgDir.getAbsolutePath());
53
public void inProd1(Prod1 node)
55
String name = (String) ids.names.get(node);
57
createProduction(name);
60
private void createProduction(String name)
66
file = new BufferedWriter(
68
new File(pkgDir, name + ".java")));
72
throw new RuntimeException("Unable to create " + new File(pkgDir, name + ".java").getAbsolutePath());
77
macros.apply(file, "Production", new String[] {pkgName, name});
81
throw new RuntimeException("An error occured while writing to " +
82
new File(pkgDir, name + ".java").getAbsolutePath());
94
public void inUnOp1(UnOp1 node)
96
if(node.getParent().getParent() instanceof Elem1)
98
Elem1 elem = (Elem1) node.getParent().getParent();
100
String name = (String) ids.elemTypes.get(elem);
102
if(hiddenProds.put("X" + name, elem) == null)
104
createProduction("X" + name);
108
"HiddenAlternative2",
109
new String[] {pkgName,
110
ids.pkgName.equals("") ? "analysis" : ids.pkgName + ".analysis",
114
GenAlts.nodeName(name),
115
GenAlts.nodeName("X" + name)});
119
"HiddenAlternative1",
120
new String[] {pkgName,
121
ids.pkgName.equals("") ? "analysis" : ids.pkgName + ".analysis",
125
GenAlts.nodeName(name)});
130
public void inUnOp3(UnOp3 node)
132
if(node.getParent().getParent() instanceof Elem1)
134
Elem1 elem = (Elem1) node.getParent().getParent();
136
String name = (String) ids.elemTypes.get(elem);
138
if(hiddenProds.put("X" + name, elem) == null)
140
createProduction("X" + name);
144
"HiddenAlternative2",
145
new String[] {pkgName,
146
ids.pkgName.equals("") ? "analysis" : ids.pkgName + ".analysis",
150
GenAlts.nodeName(name),
151
GenAlts.nodeName("X" + name)});
155
"HiddenAlternative1",
156
new String[] {pkgName,
157
ids.pkgName.equals("") ? "analysis" : ids.pkgName + ".analysis",
161
GenAlts.nodeName(name)});
166
private void createAlternative(String name, String macro, String[] arg)
172
file = new BufferedWriter(
174
new File(pkgDir, name + ".java")));
178
throw new RuntimeException("Unable to create " + new File(pkgDir, name + ".java").getAbsolutePath());
183
macros.apply(file, macro, arg);
187
throw new RuntimeException("An error occured while writing to " +
188
new File(pkgDir, name + ".java").getAbsolutePath());
17
private MacroExpander macros;
18
private ResolveIds ids;
20
private String pkgName;
21
private Map hiddenProds = new TypedTreeMap(
22
StringComparator.instance,
26
public GenProds(ResolveIds ids)
32
macros = new MacroExpander(
33
new InputStreamReader(
34
getClass().getResourceAsStream("productions.txt")));
38
throw new RuntimeException("unable to open productions.txt.");
41
pkgDir = new File(ids.pkgDir, "node");
42
pkgName = ids.pkgName.equals("") ? "node" : ids.pkgName + ".node";
48
throw new RuntimeException("Unable to create " + pkgDir.getAbsolutePath());
53
public void inAProd(AProd node)
55
String name = (String) ids.names.get(node);
57
createProduction(name);
60
private void createProduction(String name)
66
file = new BufferedWriter(
68
new File(pkgDir, name + ".java")));
72
throw new RuntimeException("Unable to create " + new File(pkgDir, name + ".java").getAbsolutePath());
77
macros.apply(file, "Production", new String[] {pkgName, name});
81
throw new RuntimeException("An error occured while writing to " +
82
new File(pkgDir, name + ".java").getAbsolutePath());
93
public void inAStarUnOp(AStarUnOp node)
95
if(node.parent() instanceof AElem)
97
AElem elem = (AElem) node.parent();
99
String name = (String) ids.elemTypes.get(elem);
101
if(hiddenProds.put("X" + name, elem) == null)
103
createProduction("X" + name);
107
"HiddenAlternative2",
108
new String[] {pkgName,
109
ids.pkgName.equals("") ? "analysis" : ids.pkgName + ".analysis",
113
GenAlts.nodeName(name),
114
GenAlts.nodeName("X" + name)});
118
"HiddenAlternative1",
119
new String[] {pkgName,
120
ids.pkgName.equals("") ? "analysis" : ids.pkgName + ".analysis",
124
GenAlts.nodeName(name)});
129
public void inAPlusUnOp(APlusUnOp node)
131
if(node.parent() instanceof AElem)
133
AElem elem = (AElem) node.parent();
135
String name = (String) ids.elemTypes.get(elem);
137
if(hiddenProds.put("X" + name, elem) == null)
139
createProduction("X" + name);
143
"HiddenAlternative2",
144
new String[] {pkgName,
145
ids.pkgName.equals("") ? "analysis" : ids.pkgName + ".analysis",
149
GenAlts.nodeName(name),
150
GenAlts.nodeName("X" + name)});
154
"HiddenAlternative1",
155
new String[] {pkgName,
156
ids.pkgName.equals("") ? "analysis" : ids.pkgName + ".analysis",
160
GenAlts.nodeName(name)});
165
private void createAlternative(String name, String macro, String[] arg)
171
file = new BufferedWriter(
173
new File(pkgDir, name + ".java")));
177
throw new RuntimeException("Unable to create " + new File(pkgDir, name + ".java").getAbsolutePath());
182
macros.apply(file, macro, arg);
186
throw new RuntimeException("An error occured while writing to " +
187
new File(pkgDir, name + ".java").getAbsolutePath());