diff --git a/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java b/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java index ee69c03467621bbd03f391e310962535b925e412..f4ee02adf340d902c999a329a5b32ac83df9b20c 100644 --- a/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java +++ b/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java @@ -92,6 +92,11 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter } } + private String getVariableName(Node term) + { + return getVariableName(lookupInternalTypeName(term), CG.getTermNumbers().get(term)); + } + private static String variableTypeFromInternalType(String typeName) { if("null".equals(typeName)) @@ -110,11 +115,10 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter private void generateVariableDeclaration(Node term) throws IOException { String typeName = lookupInternalTypeName(term); - int position = CG.getTermNumbers().get(term); if(typeName.startsWith("L")) { - macros.apply(file, "ParserListVariableDeclaration", new String[] {getVariableName(typeName, position)}); + macros.apply(file, "ParserListVariableDeclaration", new String[] {getVariableName(term)}); } else if(typeName.equals("null")) { @@ -122,7 +126,7 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter } else { - macros.apply(file, "ParserSimpleVariableDeclaration", new String[] {typeName, getVariableName(typeName, position)}); + macros.apply(file, "ParserSimpleVariableDeclaration", new String[] {typeName, getVariableName(term)}); } } @@ -146,17 +150,11 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter @Override public void outAAltTransform(AAltTransform node) { - int position; - try { for(PTerm term : node.getTerms()) { - String type_name = lookupInternalTypeName(term); - - position = CG.getTermNumbers().get(term); - - macros.apply(file, "ParserNewBodyListAdd", new String[] {getVariableName(type_name, position)}); + macros.apply(file, "ParserNewBodyListAdd", new String[] {getVariableName(term)}); } if (popCount > 0) { // The nodeArrayList variables are numbered starting at 1, so the first popped variable has the number popCount and not popCount-1. @@ -193,7 +191,6 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter try { String type_name = lookupInternalTypeName(node); - int position = CG.getTermNumbers().get(node).intValue(); String termKey = currentAlt + "." + id.getText(); int elemPosition = CTP.elems_position.get(termKey); int positionMap = 0; @@ -229,7 +226,7 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter macros.apply(file, "ParserSimpleTerm", new String[] { - getVariableName(type_name, position), + getVariableName(node), variableTypeFromInternalType(type_name), ""+elemPosition, ""+positionMap } ); @@ -288,23 +285,19 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter { try { - String listTypeName = lookupInternalTypeName(node); - int listPosition = CG.getTermNumbers().get(node); - for(PListTerm listTerm : node.getListTerms()) { String type_name = lookupInternalTypeName(listTerm); - int position = CG.getTermNumbers().get(listTerm); if(!type_name.equals("null")) { if(type_name.startsWith("L")) { - macros.apply(file, "ParserTypedLinkedListAddAll", new String[] {getVariableName(listTypeName, listPosition), getVariableName(type_name, position)}); + macros.apply(file, "ParserTypedLinkedListAddAll", new String[] {getVariableName(node), getVariableName(listTerm)}); } else { - macros.apply(file, "ParserTypedLinkedListAdd", new String[] {getVariableName(listTypeName, listPosition), getVariableName(type_name, position)}); + macros.apply(file, "ParserTypedLinkedListAdd", new String[] {getVariableName(node), getVariableName(listTerm)}); } } } @@ -319,13 +312,11 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter private void generateNewTerm(Node node, AProdName prodName, List<PTerm> params) { - String type_name = lookupInternalTypeName(node); - int position = CG.getTermNumbers().get(node); String newAltName = name(prodName); try { - macros.apply(file, "ParserNewBodyNew", new String[] {getVariableName(type_name, position), newAltName}); + macros.apply(file, "ParserNewBodyNew", new String[] {getVariableName(node), newAltName}); if(!params.isEmpty()) { @@ -333,10 +324,7 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter for(PTerm term : params) { - type_name = lookupInternalTypeName(term); - position = CG.getTermNumbers().get(term); - - macros.apply(file, "ParserNewBodyParam", new String[] {isNotTheFirstParam + getVariableName(type_name, position)}); + macros.apply(file, "ParserNewBodyParam", new String[] {isNotTheFirstParam + getVariableName(term)}); isNotTheFirstParam = ", "; }