From a60881d9311645311c67db6870c0bde0fa1043e8 Mon Sep 17 00:00:00 2001 From: dgelessus <dgelessus@users.noreply.github.com> Date: Thu, 20 Jul 2023 21:31:35 +0200 Subject: [PATCH] Refactor code generation for simple terms --- .../GenerateAlternativeCodeForParser.java | 89 ++++--------------- 1 file changed, 16 insertions(+), 73 deletions(-) diff --git a/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java b/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java index 79eee43..d8ab8f0 100644 --- a/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java +++ b/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java @@ -168,27 +168,26 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter } } - @Override - public void inASimpleTerm(ASimpleTerm node) + private void generateSimpleTerm(Node node, TId id, TId simpleTermTail) { try { String type_name = lookupInternalTypeName(node); int position = CG.getTermNumbers().get(node).intValue(); - String termKey = currentAlt+"."+node.getId().getText(); + String termKey = currentAlt + "." + id.getText(); int elemPosition = CTP.elems_position.get(termKey); int positionMap = 0; - if(node.getSimpleTermTail() != null ) + if(simpleTermTail != null) { // FIXME This condition is always false, because listSimpleTermTransform contains ASimpleTerm/ASimpleListTerm and not String! Is it safe to remove this? - if( !listSimpleTermTransform.contains(node.getId().getText() ) ) + if(!listSimpleTermTransform.contains(id.getText())) { - String type = CTP.positionsMap.get( realcurrentAlt+"."+node.getId().getText() ); + String type = CTP.positionsMap.get(realcurrentAlt + "." + id.getText()); List<String> list = transformIds.getProdTransformIds().prod_transforms.get(type); - if( list.indexOf( node.getSimpleTermTail().getText() ) >= 0 ) + if(list.indexOf(simpleTermTail.getText()) >= 0) { - positionMap = list.indexOf( node.getSimpleTermTail().getText() ); + positionMap = list.indexOf(simpleTermTail.getText()); } } @@ -196,9 +195,9 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter { String type = simpleTermOrsimpleListTermTypes.get(node); List<String> list = transformIds.getProdTransformIds().prod_transforms.get(type); - if( list.indexOf( node.getSimpleTermTail().getText() ) >= 0 ) + if(list.indexOf(simpleTermTail.getText()) >= 0) { - positionMap = list.indexOf( node.getSimpleTermTail().getText() ); + positionMap = list.indexOf(simpleTermTail.getText()); } } } @@ -234,71 +233,15 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter } @Override - public void inASimpleListTerm(ASimpleListTerm node) + public void inASimpleTerm(ASimpleTerm node) { - try - { - String type_name = lookupInternalTypeName(node); - - String termKey = currentAlt+"."+node.getId().getText(); - int position = CG.getTermNumbers().get(node); - - int elemPosition = CTP.elems_position.get(termKey); - - int positionMap = 0; - - if(node.getSimpleTermTail() != null ) - { - // FIXME This condition is always false, because listSimpleTermTransform contains ASimpleTerm/ASimpleListTerm and not String! Is it safe to remove this? - if( !listSimpleTermTransform.contains(node.getId().getText()) ) - { - String type = CTP.positionsMap.get( realcurrentAlt+"."+node.getId().getText() ); - List<String> list = transformIds.getProdTransformIds().prod_transforms.get(type); - if( list.indexOf( node.getSimpleTermTail().getText() ) >= 0 ) - { - positionMap = list.indexOf( node.getSimpleTermTail().getText() ); - } - } - - if(simpleTermOrsimpleListTermTypes.get(node) != null) - { - String type = simpleTermOrsimpleListTermTypes.get(node); - List<String> list = transformIds.getProdTransformIds().prod_transforms.get(type); - if( list.indexOf( node.getSimpleTermTail().getText() ) >= 0 ) - { - positionMap = list.indexOf( node.getSimpleTermTail().getText() ); - } - } - } - - String type; - if(type_name.startsWith("L")) - { - type_name = "list"; - type = "LinkedList"; - } - else if(type_name.equals("null")) - { - type_name = "null"; - type = "Object"; - } - else - { - type = type_name; - } + generateSimpleTerm(node, node.getId(), node.getSimpleTermTail()); + } - macros.apply(file, "ParserSimpleTerm", new String[] - { - type_name.toLowerCase(), ""+position, - type, ""+elemPosition, ""+positionMap - } - ); - } - catch(IOException e) - { - throw new RuntimeException("An error occured while writing to " + - new File(pkgDir, "Parser.java").getAbsolutePath(), e); - } + @Override + public void inASimpleListTerm(ASimpleListTerm node) + { + generateSimpleTerm(node, node.getId(), node.getSimpleTermTail()); } @Override -- GitLab