/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* 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 Transitions extends DepthFirstAdapter {
public final Map tokenStates = new TypedHashMap(
NodeCast.instance,
NoCast.instance);
private String state;
private String transition;
private Map map;
@Override
public void caseAStateList(AStateList node) {
inAStateList(node);
if (node.getId() != null) {
node.getId().apply(this);
}
if (node.getTransition() != null) {
node.getTransition().apply(this);
}
outAStateList(node); // We moved this...
{
Object temp[] = node.getStateLists().toArray();
for (int i = 0; i < temp.length; i++) {
((PStateListTail) temp[i]).apply(this);
}
}
}
@Override
public void inATokenDef(ATokenDef node) {
map = new TypedTreeMap(
StringComparator.instance,
StringCast.instance,
StringCast.instance);
}
@Override
public void inAStateList(AStateList node) {
state = transition = node.getId().getText().toUpperCase();
}
@Override
public void inAStateListTail(AStateListTail node) {
state = transition = node.getId().getText().toUpperCase();
}
@Override
public void outATransition(ATransition node) {
transition = node.getId().getText().toUpperCase();
}
@Override
public void outAStateList(AStateList node) {
map.put(state, transition);
}
@Override
public void outAStateListTail(AStateListTail node) {
map.put(state, transition);
}
@Override
public void outATokenDef(ATokenDef node) {
tokenStates.put(node, map);
}
}