/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* 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.util.Map;
@SuppressWarnings({"rawtypes", "unchecked"})
public class ConstructParserGenerationDatas extends DepthFirstAdapter {
private ResolveIds ids;
private int currentAlt;
// private boolean processingAst;
private String currentProd;
private Map alts;
public ConstructParserGenerationDatas(ResolveIds ids, Map alts) {
this.ids = ids;
this.alts = alts;
}
@Override
public void caseAAst(AAst node) {
}
@Override
public void caseAProd(AProd node) {
currentProd = (String) ids.names.get(node);
AAlt[] alts = (AAlt[]) node.getAlts().toArray(new AAlt[0]);
for (int i = 0; i < alts.length; i++) {
alts[i].apply(this);
}
}
@Override
public void caseAAlt(AAlt node) {
currentAlt = Grammar.addProduction(currentProd, (String) ids.names.get(node));
alts.put(ids.names.get(node), node);
AElem[] temp = (AElem[]) node.getElems().toArray(new AElem[0]);
for (int i = 0; i < temp.length; i++) {
temp[i].apply(this);
}
}
@Override
public void caseAElem(AElem node) {
String name = ResolveIds.name(node.getId().getText());
if (node.getSpecifier() != null) {
if (node.getSpecifier() instanceof ATokenSpecifier) {
ids.elemTypes.put(node, "T" + name);
} else {
ids.elemTypes.put(node, "P" + name);
}
} else {
Object token = ids.tokens.get("T" + name);
// Object production = ids.prods.get("P" + name);
if (token != null) {
ids.elemTypes.put(node, "T" + name);
} else {
ids.elemTypes.put(node, "P" + name);
}
}
name = (String) ids.elemTypes.get(node);
Grammar.addSymbolToProduction(name, currentAlt);
}
}