diff --git a/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java b/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java index 435c54c6af4745314e8760a2ec05a832e0e76f57..af30d9371b8fc258190a1b2765f066db18ab7fba 100644 --- a/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java +++ b/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java @@ -75,6 +75,38 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter return CG.getAltTransformElemTypes().get(term); } } + + private static String variablePrefixFromInternalType(String typeName) + { + if("null".equals(typeName)) + { + throw new IllegalArgumentException("Null values have no variable name"); + } + else if(typeName.startsWith("L")) + { + return "list"; + } + else + { + return typeName.toLowerCase(); + } + } + + private static String variableTypeFromInternalType(String typeName) + { + if("null".equals(typeName)) + { + throw new IllegalArgumentException("Null values have no variable type"); + } + else if(typeName.startsWith("L")) + { + return "LinkedList"; + } + else + { + return typeName; + } + } private void generateVariableDeclaration(Node term) throws IOException { String typeName = lookupInternalTypeName(term); @@ -90,7 +122,7 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter } else { - macros.apply(file, "ParserSimpleVariableDeclaration", new String[] {typeName, typeName.toLowerCase(), "" + position}); + macros.apply(file, "ParserSimpleVariableDeclaration", new String[] {typeName, variablePrefixFromInternalType(typeName), "" + position}); } } @@ -130,15 +162,7 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter } else { - if(type_name.startsWith("L")) - { - type_name = "list"; - } - else - { - type_name = type_name.toLowerCase(); - } - macros.apply(file, "ParserNewBodyListAdd", new String[] {type_name, "" + position}); + macros.apply(file, "ParserNewBodyListAdd", new String[] {variablePrefixFromInternalType(type_name), "" + position}); } } @@ -206,25 +230,15 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter } } - String type; - if(type_name.startsWith("L")) - { - type_name = "list"; - type = "LinkedList"; - } - else if(type_name.equals("null")) + if(type_name.equals("null")) { throw new RuntimeException("Simple term has null type - this should never happen"); } - else - { - type = type_name; - } macros.apply(file, "ParserSimpleTerm", new String[] { - type_name.toLowerCase(), ""+position, - type, ""+elemPosition, ""+positionMap + variablePrefixFromInternalType(type_name), ""+position, + variableTypeFromInternalType(type_name), ""+elemPosition, ""+positionMap } ); } @@ -297,7 +311,7 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter } else { - macros.apply(file, "ParserTypedLinkedListAdd", new String[] {"list", ""+listPosition, type_name.toLowerCase(), ""+ position}); + macros.apply(file, "ParserTypedLinkedListAdd", new String[] {"list", ""+listPosition, variablePrefixFromInternalType(type_name), ""+ position}); } } } @@ -318,15 +332,7 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter try { - if(type_name.startsWith("L")) - { - type_name = "list"; - } - else - { - type_name = type_name.toLowerCase(); - } - macros.apply(file, "ParserNewBodyNew", new String[] {type_name, ""+position, newAltName}); + macros.apply(file, "ParserNewBodyNew", new String[] {variablePrefixFromInternalType(type_name), ""+position, newAltName}); if(!params.isEmpty()) { @@ -343,15 +349,7 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter } else { - if(type_name.startsWith("L")) - { - type_name = "list"; - } - else - { - type_name = type_name.toLowerCase(); - } - macros.apply(file, "ParserNew&ListBodyParams", new String[] {isNotTheFirstParam+type_name, ""+position}); + macros.apply(file, "ParserNew&ListBodyParams", new String[] {isNotTheFirstParam + variablePrefixFromInternalType(type_name), ""+position}); } isNotTheFirstParam = ", ";