/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 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 ComputeSimpleTermPosition extends DepthFirstAdapter { String currentAlt; String currentProd; boolean processingParsedAlt; private ResolveIds ids; private int counter; public final Map positionsMap = new TypedHashMap( StringCast.instance, StringCast.instance); public final Map elems_position = new TypedHashMap( StringCast.instance, IntegerCast.instance); public ComputeSimpleTermPosition(ResolveIds ids) { this.ids = ids; } @Override public void inAProd(AProd node) { currentProd = ResolveIds.name(node.getId().getText()); ids.names.put(node, currentProd); } @Override public void inAAlt(AAlt node) { counter = 0; processingParsedAlt = true; if (node.getAltName() != null) { currentAlt = "A" + ResolveIds.name(node.getAltName().getText()) + currentProd; } else { currentAlt = "A" + currentProd; } ids.names.put(node, currentAlt); } @Override public void inAElem(AElem node) { if (processingParsedAlt) { String currentElemName; if (node.getElemName() != null) { currentElemName = currentAlt + "." + node.getElemName().getText(); } else { currentElemName = currentAlt + "." + node.getId().getText(); } elems_position.put(currentElemName, new Integer(++counter)); } if (node.getSpecifier() != null && node.getSpecifier() instanceof ATokenSpecifier) { return; } // String name = ResolveIds.name( node.getId().getText() ); String elemType = (String) ids.elemTypes.get(node); if (processingParsedAlt && elemType.startsWith("P")) { String elemName; if (node.getElemName() != null) { elemName = node.getElemName().getText(); } else { elemName = node.getId().getText(); } positionsMap.put(currentAlt + "." + elemName, elemType); } } @Override public void outAAlt(AAlt node) { processingParsedAlt = false; } }