From 97a6e9560b1c2924dc38bb26cddef8b7730ccd1e Mon Sep 17 00:00:00 2001 From: dgelessus <dgelessus@users.noreply.github.com> Date: Thu, 20 Jul 2023 22:22:27 +0200 Subject: [PATCH] Begin refactoring type handling in alternative code generation --- .../GenerateAlternativeCodeForParser.java | 82 +++++++++---------- 1 file changed, 40 insertions(+), 42 deletions(-) diff --git a/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java b/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java index 435c54c..af30d93 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 = ", "; -- GitLab