diff --git a/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java b/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java index 1c5390db620a1ba544f752e075d0a0bed0a7f09d..1e98fb0c9e05c6aaabd59ceae9b477c004483c99 100644 --- a/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java +++ b/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java @@ -410,8 +410,7 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter } } - @Override - public void outANewTerm(ANewTerm node) + private void generateNewTerm(Node node, AProdName prodName, List<PTerm> params) { String type_name; if(simpleTermTransformMap.get(node) != null) @@ -423,7 +422,7 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter type_name = CG.getAltTransformElemTypes().get(node); } int position = CG.getTermNumbers().get(node); - String newAltName = name((AProdName)node.getProdName()); + String newAltName = name(prodName); try { @@ -437,11 +436,11 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter } macros.apply(file, "ParserNewBodyNew", new String[] {type_name, ""+position, newAltName}); - if(node.getParams().size() > 0) + if(!params.isEmpty()) { String isNotTheFirstParam = ""; - for(PTerm term : node.getParams()) + for(PTerm term : params) { if(simpleTermTransformMap.get(term) != null) { @@ -484,75 +483,15 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter } @Override - public void outANewListTerm(ANewListTerm node) + public void outANewTerm(ANewTerm node) { - String type_name; - if(simpleTermTransformMap.get(node) != null) - { - type_name = simpleTermTransformMap.get(node); - } - else - { - type_name = CG.getAltTransformElemTypes().get(node); - } - int position = CG.getTermNumbers().get(node); - String newAltName = name((AProdName)node.getProdName()); - 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}); - - if(node.getParams().size() > 0) - { - String isNotTheFirstParam = ""; - - for(PTerm term : node.getParams()) - { - if(simpleTermTransformMap.get(term) != null) - { - type_name = simpleTermTransformMap.get(term); - } - else - { - type_name = CG.getAltTransformElemTypes().get(term); - } - position = CG.getTermNumbers().get(term); - - if(type_name.equals("null")) - { - macros.apply(file, "ParserNew&ListBodyParamsNull", new String[] {isNotTheFirstParam+"null"}); - } - 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}); - } + generateNewTerm(node, (AProdName)node.getProdName(), node.getParams()); + } - isNotTheFirstParam = ", "; - } - } - macros.apply(file, "ParserNewBodyNewTail"); - macros.apply(file, "ParserBraceClosing"); - } - catch(IOException e) - { - throw new RuntimeException("An error occured while writing to " + - new File(pkgDir, "TokenIndex.java").getAbsolutePath(), e); - } + @Override + public void outANewListTerm(ANewListTerm node) + { + generateNewTerm(node, (AProdName)node.getProdName(), node.getParams()); } public String name(AProdName node)