Skip to content
Snippets Groups Projects
Commit cdf48979 authored by dgelessus's avatar dgelessus
Browse files

Merge branch 'develop'

parents fb99eb6c c7717343
Branches
Tags 3.4.0
No related merge requests found
Pipeline #86829 passed
Showing
with 730 additions and 698 deletions
...@@ -5,3 +5,7 @@ indent_style = space ...@@ -5,3 +5,7 @@ indent_style = space
indent_size = 2 indent_size = 2
charset = utf-8 charset = utf-8
insert_final_newline = true insert_final_newline = true
[*.{sablecc3,txt}]
indent_size = 4
trim_trailing_whitespace = true
...@@ -17,7 +17,11 @@ before_script: ...@@ -17,7 +17,11 @@ before_script:
tests: tests:
stage: test stage: test
script: ./gradlew ${GRADLE_OPTIONS} check script:
# We don't have proper tests for SableCC, so as a minimal test, run SableCC on itself twice.
# If this succeeds, we at least know that it's not completely broken.
- ./gradlew ${GRADLE_OPTIONS} regenerateParser
- ./gradlew ${GRADLE_OPTIONS} regenerateParser
tests:jdk-11: tests:jdk-11:
extends: tests extends: tests
......
...@@ -6,7 +6,7 @@ apply plugin: 'signing' ...@@ -6,7 +6,7 @@ apply plugin: 'signing'
allprojects { allprojects {
project.group = 'de.hhu.stups' project.group = 'de.hhu.stups'
project.version = '3.3.3' project.version = '3.4.0'
project.ext.isSnapshot = project.version.endsWith("-SNAPSHOT") project.ext.isSnapshot = project.version.endsWith("-SNAPSHOT")
ext."signing.secretKeyRingFile" = rootProject.file("secring.gpg").absolutePath ext."signing.secretKeyRingFile" = rootProject.file("secring.gpg").absolutePath
...@@ -20,6 +20,10 @@ repositories { ...@@ -20,6 +20,10 @@ repositories {
mavenCentral() mavenCentral()
} }
dependencies {
implementation(project(":sablecc-runtime"))
}
java { java {
sourceCompatibility = JavaVersion.VERSION_1_7 sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7 targetCompatibility = JavaVersion.VERSION_1_7
...@@ -39,6 +43,52 @@ processResources { ...@@ -39,6 +43,52 @@ processResources {
} }
} }
// Run this task to regenerate the SableCC parser using itself.
// The generated files are checked into Git,
// to avoid bootstrapping problems,
// so normally you do not need to run this task to build the parser.
// If you change something in the parser generator or templates that affects the output,
// please run this task manually and commit the updated generated files.
tasks.register("regenerateParser", JavaExec) {
final sableCCGrammar = file("src/main/sablecc/sablecc-3x.sablecc3")
final outputDirs = [
"src/main/java/org/sablecc/sablecc/analysis",
"src/main/java/org/sablecc/sablecc/lexer",
"src/main/java/org/sablecc/sablecc/node",
"src/main/java/org/sablecc/sablecc/parser",
"src/main/resources/org/sablecc/sablecc/lexer",
"src/main/resources/org/sablecc/sablecc/parser",
].collect {file(it)}
inputs.file(sableCCGrammar)
outputs.dir(temporaryDir)
outputs.dirs(outputDirs)
doFirst {
delete(temporaryDir)
mkdir(temporaryDir)
}
classpath(sourceSets.main.runtimeClasspath)
mainClass = application.mainClass
args = ["-d", temporaryDir, sableCCGrammar]
doLast {
delete(outputDirs)
// Split the generated files - the .dat files go into resources, the .java files go into java.
copy {
from(temporaryDir)
into("src/main/java")
exclude("**/*.dat")
}
copy {
from(temporaryDir)
into("src/main/resources")
include("**/*.dat")
}
}
}
jar { jar {
manifest { manifest {
attributes([ attributes([
......
...@@ -10,30 +10,24 @@ public class PositionedNode { ...@@ -10,30 +10,24 @@ public class PositionedNode {
private SourcePosition startPos; private SourcePosition startPos;
private SourcePosition endPos; private SourcePosition endPos;
public SourcePosition getStartPos() { public PositionedNode(final SourcePosition startPos, final SourcePosition endPos) {
/* this.startPos = startPos;
* Special treatment for tokens because they don't get a position in the this.endPos = endPos;
* PositionAspect
*/
if (this instanceof IToken) {
final IToken token = (IToken) this;
return new SourcePosition(token.getLine(), token.getPos());
} }
return startPos; public PositionedNode() {
this(null, null);
} }
public SourcePosition getEndPos() { public PositionedNode(final PositionedNode node) {
/* this(node.startPos, node.endPos);
* Special treatment for tokens because they don't get a position in the }
* PositionAspect
*/ public SourcePosition getStartPos() {
if (this instanceof IToken) { return startPos;
final IToken token = (IToken) this;
return new SourcePosition(token.getLine(), token.getPos()
+ token.getText().length());
} }
public SourcePosition getEndPos() {
return endPos; return endPos;
} }
......
...@@ -7,9 +7,8 @@ ...@@ -7,9 +7,8 @@
package org.sablecc.sablecc; package org.sablecc.sablecc;
import org.sablecc.sablecc.analysis.*; import org.sablecc.sablecc.analysis.DepthFirstAdapter;
import org.sablecc.sablecc.node.*; import org.sablecc.sablecc.node.Start;
import java.util.*;
public class AcceptStates extends DepthFirstAdapter public class AcceptStates extends DepthFirstAdapter
{ {
...@@ -24,11 +23,11 @@ public class AcceptStates extends DepthFirstAdapter ...@@ -24,11 +23,11 @@ public class AcceptStates extends DepthFirstAdapter
this.stateName = stateName; this.stateName = stateName;
} }
@Override
public void caseStart(Start node) public void caseStart(Start node)
{ {
for(int i = 0; i < dfa.states.size(); i++) for(DFA.State state : dfa.states)
{ {
DFA.State state = (DFA.State) dfa.states.elementAt(i);
state.accept = -1; state.accept = -1;
int accept = -1; int accept = -1;
......
...@@ -7,10 +7,11 @@ ...@@ -7,10 +7,11 @@
package org.sablecc.sablecc; package org.sablecc.sablecc;
import org.sablecc.sablecc.analysis.*; import java.util.LinkedList;
import java.util.List;
import org.sablecc.sablecc.analysis.DepthFirstAdapter;
import org.sablecc.sablecc.node.*; import org.sablecc.sablecc.node.*;
import java.util.*;
import java.io.*;
/* /*
* AddAstProductions * AddAstProductions
...@@ -26,16 +27,17 @@ import java.io.*; ...@@ -26,16 +27,17 @@ import java.io.*;
public class AddAstProductions extends DepthFirstAdapter public class AddAstProductions extends DepthFirstAdapter
{ {
LinkedList listAstProd = new TypedLinkedList(); List<PAstProd> listAstProd = new LinkedList<>();
private boolean firstAlt; private boolean firstAlt;
public AddAstProductions() public AddAstProductions()
{} {}
@Override
public void caseAProd(AProd node) public void caseAProd(AProd node)
{ {
firstAlt = true; firstAlt = true;
listOfAstAlts = new TypedLinkedList(); listOfAstAlts = new LinkedList<>();
/* /*
* Here, we assume that if there is no Abstract Syntax Tree Section specified * Here, we assume that if there is no Abstract Syntax Tree Section specified
...@@ -46,27 +48,29 @@ public class AddAstProductions extends DepthFirstAdapter ...@@ -46,27 +48,29 @@ public class AddAstProductions extends DepthFirstAdapter
error(node.getArrow()); error(node.getArrow());
} }
Object []list_alt = (Object[]) node.getAlts().toArray(); PAlt[] list_alt = node.getAlts().toArray(new PAlt[0]);
for(int i=0; i<list_alt.length; i++) for (PAlt alt : list_alt) {
{ alt.apply(this);
((PAlt)list_alt[i]).apply(this);
} }
AAstProd astProd = new AAstProd(new TId(node.getId().getText()), listOfAstAlts); AAstProd astProd = new AAstProd(new TId(node.getId().getText()), listOfAstAlts);
listAstProd.add(astProd); listAstProd.add(astProd);
} }
@Override
public void outAGrammar(AGrammar node) public void outAGrammar(AGrammar node)
{ {
node.setAst(new AAst(listAstProd)); node.setAst(new AAst(listAstProd));
} }
@Override
public void inAAlt(AAlt node) public void inAAlt(AAlt node)
{ {
listElems = new TypedLinkedList(); listElems = new LinkedList<>();
processingParsedAlt = true; processingParsedAlt = true;
} }
@Override
public void inAAltTransform(AAltTransform node) public void inAAltTransform(AAltTransform node)
{ {
if(node.getLBrace() != null) if(node.getLBrace() != null)
...@@ -75,9 +79,10 @@ public class AddAstProductions extends DepthFirstAdapter ...@@ -75,9 +79,10 @@ public class AddAstProductions extends DepthFirstAdapter
} }
} }
@Override
public void outAAlt(AAlt node) public void outAAlt(AAlt node)
{ {
TId aAltname = node.getAltName() == null ? null : (TId)node.getAltName().clone(); TId aAltname = node.getAltName() == null ? null : node.getAltName().clone();
AAstAlt astAlt = new AAstAlt(aAltname, listElems); AAstAlt astAlt = new AAstAlt(aAltname, listElems);
listOfAstAlts.add(astAlt); listOfAstAlts.add(astAlt);
...@@ -86,17 +91,17 @@ public class AddAstProductions extends DepthFirstAdapter ...@@ -86,17 +91,17 @@ public class AddAstProductions extends DepthFirstAdapter
boolean processingParsedAlt; boolean processingParsedAlt;
@Override
public void inAElem(AElem node) public void inAElem(AElem node)
{ {
if(processingParsedAlt) if(processingParsedAlt)
{ {
AElem tmp = (AElem)node.clone(); listElems.add(node.clone());
listElems.add(tmp);
} }
} }
LinkedList listElems; List<PElem> listElems;
LinkedList listOfAstAlts; List<PAstAlt> listOfAstAlts;
public void error(Token token) public void error(Token token)
{ {
......
...@@ -7,10 +7,10 @@ ...@@ -7,10 +7,10 @@
package org.sablecc.sablecc; package org.sablecc.sablecc;
import org.sablecc.sablecc.analysis.*; import java.util.LinkedList;
import org.sablecc.sablecc.analysis.DepthFirstAdapter;
import org.sablecc.sablecc.node.*; import org.sablecc.sablecc.node.*;
import java.util.*;
import java.io.*;
/* /*
* AddEventualEmptyTransformationToProductions * AddEventualEmptyTransformationToProductions
...@@ -38,9 +38,10 @@ public class AddEventualEmptyTransformationToProductions extends DepthFirstAdapt ...@@ -38,9 +38,10 @@ public class AddEventualEmptyTransformationToProductions extends DepthFirstAdapt
this.ast_ids = ast_ids; this.ast_ids = ast_ids;
} }
@Override
public void inAProd(AProd node) public void inAProd(AProd node)
{ {
currentProd = (String)ids.names.get(node); currentProd = ids.names.get(node);
/* If there is no transformation specified for the production /* If there is no transformation specified for the production
* and there is no AST production which has the same name as the current * and there is no AST production which has the same name as the current
...@@ -49,21 +50,22 @@ public class AddEventualEmptyTransformationToProductions extends DepthFirstAdapt ...@@ -49,21 +50,22 @@ public class AddEventualEmptyTransformationToProductions extends DepthFirstAdapt
if(node.getArrow() == null && ast_ids.ast_prods.get(currentProd) == null ) if(node.getArrow() == null && ast_ids.ast_prods.get(currentProd) == null )
{ {
node.setArrow(new TArrow(node.getId().getLine(), node.getId().getPos()+node.getId().getText().length() )); node.setArrow(new TArrow(node.getId().getLine(), node.getId().getPos()+node.getId().getText().length() ));
node.setProdTransform(new LinkedList()); node.setProdTransform(new LinkedList<PElem>());
AAlt []alts = (AAlt[]) node.getAlts().toArray(new AAlt[0]); PAlt[] alts = node.getAlts().toArray(new PAlt[0]);
for(int i=0; i<alts.length; i++) for(PAlt alt : alts)
{ {
alts[i].apply( new DepthFirstAdapter() alt.apply( new DepthFirstAdapter()
{ {
@Override
public void inAAlt(AAlt node) public void inAAlt(AAlt node)
{ {
if(node.getAltTransform() != null && ((AAltTransform)node.getAltTransform()).getTerms().size() > 0) if(node.getAltTransform() != null && ((AAltTransform)node.getAltTransform()).getTerms().size() > 0)
{ {
error(((AAltTransform)node.getAltTransform()).getLBrace()); error(((AAltTransform)node.getAltTransform()).getLBrace());
} }
node.setAltTransform( new AAltTransform(new TLBrace(), new LinkedList(), new TRBrace()) ); node.setAltTransform( new AAltTransform(new TLBrace(), new LinkedList<PTerm>(), new TRBrace()) );
} }
} }
); );
......
...@@ -7,10 +7,11 @@ ...@@ -7,10 +7,11 @@
package org.sablecc.sablecc; package org.sablecc.sablecc;
import org.sablecc.sablecc.analysis.*; import java.util.LinkedList;
import java.util.List;
import org.sablecc.sablecc.analysis.DepthFirstAdapter;
import org.sablecc.sablecc.node.*; import org.sablecc.sablecc.node.*;
import java.util.*;
import java.io.*;
/* /*
* AddProdTransformAndAltTransform * AddProdTransformAndAltTransform
...@@ -30,6 +31,7 @@ public class AddProdTransformAndAltTransform extends DepthFirstAdapter ...@@ -30,6 +31,7 @@ public class AddProdTransformAndAltTransform extends DepthFirstAdapter
private String currentProdId; private String currentProdId;
private String currentAlt; private String currentAlt;
@Override
public void inAProd(final AProd production) public void inAProd(final AProd production)
{ {
currentProdId = production.getId().getText(); currentProdId = production.getId().getText();
...@@ -37,22 +39,22 @@ public class AddProdTransformAndAltTransform extends DepthFirstAdapter ...@@ -37,22 +39,22 @@ public class AddProdTransformAndAltTransform extends DepthFirstAdapter
if(production.getArrow() == null) if(production.getArrow() == null)
{ {
AElem elem = new AElem(null, new AProductionSpecifier(), new TId(currentProdId), null); AElem elem = new AElem(null, new AProductionSpecifier(), new TId(currentProdId), null);
LinkedList listOfProdTransformElem = new LinkedList(); List<PElem> listOfProdTransformElem = new LinkedList<>();
listOfProdTransformElem.add(elem); listOfProdTransformElem.add(elem);
production.setProdTransform(listOfProdTransformElem); production.setProdTransform(listOfProdTransformElem);
production.setArrow(new TArrow()); production.setArrow(new TArrow());
} }
} }
private int i; private List<PTerm> list;
private LinkedList list;
@Override
public void inAAlt(AAlt alt) public void inAAlt(AAlt alt)
{ {
if(alt.getAltTransform() == null) if(alt.getAltTransform() == null)
{ {
currentAlt = currentProdId; currentAlt = currentProdId;
list = new LinkedList(); list = new LinkedList<>();
AProdName aProdName = new AProdName(new TId(currentProdId), null); AProdName aProdName = new AProdName(new TId(currentProdId), null);
if(alt.getAltName() != null) if(alt.getAltName() != null)
...@@ -62,12 +64,13 @@ public class AddProdTransformAndAltTransform extends DepthFirstAdapter ...@@ -62,12 +64,13 @@ public class AddProdTransformAndAltTransform extends DepthFirstAdapter
if( alt.getElems().size() > 0 ) if( alt.getElems().size() > 0 )
{ {
Object temp[] = alt.getElems().toArray(); PElem[] temp = alt.getElems().toArray(new PElem[0]);
for(i = 0; i < temp.length; i++) for(PElem e : temp)
{ {
((PElem) temp[i]).apply(new DepthFirstAdapter() e.apply(new DepthFirstAdapter()
{ {
@Override
public void caseAElem(AElem elem) public void caseAElem(AElem elem)
{ {
PTerm term; PTerm term;
...@@ -87,7 +90,7 @@ public class AddProdTransformAndAltTransform extends DepthFirstAdapter ...@@ -87,7 +90,7 @@ public class AddProdTransformAndAltTransform extends DepthFirstAdapter
if( (elem.getUnOp() != null) && if( (elem.getUnOp() != null) &&
( (elem.getUnOp() instanceof AStarUnOp) || (elem.getUnOp() instanceof APlusUnOp) ) ) ( (elem.getUnOp() instanceof AStarUnOp) || (elem.getUnOp() instanceof APlusUnOp) ) )
{ {
LinkedList listP = new LinkedList(); List<PListTerm> listP = new LinkedList<>();
if( !elemNameExplicitelySpecified && (elem.getSpecifier()!= null) ) if( !elemNameExplicitelySpecified && (elem.getSpecifier()!= null) )
{ {
if(elem.getSpecifier() instanceof ATokenSpecifier) if(elem.getSpecifier() instanceof ATokenSpecifier)
...@@ -135,7 +138,7 @@ public class AddProdTransformAndAltTransform extends DepthFirstAdapter ...@@ -135,7 +138,7 @@ public class AddProdTransformAndAltTransform extends DepthFirstAdapter
} }
ANewTerm newTerm = new ANewTerm(aProdName, new TLPar(), list); ANewTerm newTerm = new ANewTerm(aProdName, new TLPar(), list);
LinkedList lst = new LinkedList(); List<PTerm> lst = new LinkedList<>();
lst.add(newTerm); lst.add(newTerm);
alt.setAltTransform(new AAltTransform(new TLBrace(), lst, new TRBrace())); alt.setAltTransform(new AAltTransform(new TLBrace(), lst, new TRBrace()));
......
...@@ -7,27 +7,28 @@ ...@@ -7,27 +7,28 @@
package org.sablecc.sablecc; package org.sablecc.sablecc;
import java.util.*; import java.util.List;
import org.sablecc.sablecc.analysis.*; import java.util.Map;
import org.sablecc.sablecc.analysis.DepthFirstAdapter;
import org.sablecc.sablecc.node.*; import org.sablecc.sablecc.node.*;
import java.io.*;
public class AltTransformAdapter extends DepthFirstAdapter public class AltTransformAdapter extends DepthFirstAdapter
{ {
ResolveAltIds altIds; ResolveAltIds altIds;
String currentNewAltName; String currentNewAltName;
private Map isElementIsAlist; private Map<String, String> isElementIsAlist;
private LinkedList listSimpleTermTransform; private List<Node> listSimpleTermTransform;
private Map simpleTermTransform; private Map<Node, String> simpleTermTransform;
private Map simpleTermOrsimpleListTermTypes; private Map<Node, String> simpleTermOrsimpleListTermTypes;
AltTransformAdapter(Map simpleTermTransform, AltTransformAdapter(Map<Node, String> simpleTermTransform,
LinkedList listSimpleTermTransform, List<Node> listSimpleTermTransform,
String currentNewAltName, String currentNewAltName,
ResolveAltIds altIds, Map isElementIsAlist, ResolveAltIds altIds, Map<String, String> isElementIsAlist,
Map simpleTermOrsimpleListTermTypes) Map<Node, String> simpleTermOrsimpleListTermTypes)
{ {
this.currentNewAltName = currentNewAltName; this.currentNewAltName = currentNewAltName;
this.altIds = altIds; this.altIds = altIds;
...@@ -37,12 +38,13 @@ public class AltTransformAdapter extends DepthFirstAdapter ...@@ -37,12 +38,13 @@ public class AltTransformAdapter extends DepthFirstAdapter
this.simpleTermOrsimpleListTermTypes = simpleTermOrsimpleListTermTypes; this.simpleTermOrsimpleListTermTypes = simpleTermOrsimpleListTermTypes;
} }
@Override
public void inASimpleTerm(ASimpleTerm node) public void inASimpleTerm(ASimpleTerm node)
{ {
String name = node.getId().getText(); String name = node.getId().getText();
if( !((LinkedList)altIds.alts_elems.get(currentNewAltName)).contains(name) && if( !altIds.alts_elems.get(currentNewAltName).contains(name) &&
!((LinkedList)altIds.alts_elems.get(currentNewAltName)).contains("$"+name) ) !altIds.alts_elems.get(currentNewAltName).contains("$"+name) )
{ {
node.replaceBy( new ANullTerm() ); node.replaceBy( new ANullTerm() );
} }
...@@ -56,30 +58,31 @@ public class AltTransformAdapter extends DepthFirstAdapter ...@@ -56,30 +58,31 @@ public class AltTransformAdapter extends DepthFirstAdapter
} }
else else
{ {
simpleTermTail = new TId( (String)isElementIsAlist.get(currentNewAltName+name) ); simpleTermTail = new TId(isElementIsAlist.get(currentNewAltName+name));
} }
ASimpleTerm asimpleTerm = new ASimpleTerm( node.getSpecifier(), node.getId(), simpleTermTail); ASimpleTerm asimpleTerm = new ASimpleTerm( node.getSpecifier(), node.getId(), simpleTermTail);
if(simpleTermOrsimpleListTermTypes.get(node) != null) if(simpleTermOrsimpleListTermTypes.get(node) != null)
{ {
simpleTermOrsimpleListTermTypes.put(asimpleTerm, (String)simpleTermOrsimpleListTermTypes.get(node)); simpleTermOrsimpleListTermTypes.put(asimpleTerm, simpleTermOrsimpleListTermTypes.get(node));
} }
node.replaceBy(asimpleTerm); node.replaceBy(asimpleTerm);
simpleTermTransform.put(asimpleTerm, "L"+ResolveIds.name((String)isElementIsAlist.get(currentNewAltName+name)) ); simpleTermTransform.put(asimpleTerm, "L"+ResolveIds.name(isElementIsAlist.get(currentNewAltName+name)) );
//Terms are added here only if they were implicitely transformed //Terms are added here only if they were implicitely transformed
listSimpleTermTransform.add( asimpleTerm ); listSimpleTermTransform.add( asimpleTerm );
} }
} }
@Override
public void inASimpleListTerm(ASimpleListTerm node) public void inASimpleListTerm(ASimpleListTerm node)
{ {
String name = node.getId().getText(); String name = node.getId().getText();
if( !((LinkedList)altIds.alts_elems.get(currentNewAltName)).contains(name) && if( !altIds.alts_elems.get(currentNewAltName).contains(name) &&
!((LinkedList)altIds.alts_elems.get(currentNewAltName)).contains("$"+name) ) !altIds.alts_elems.get(currentNewAltName).contains("$"+name) )
{ {
node.replaceBy( null ); node.replaceBy( null );
} }
...@@ -93,28 +96,29 @@ public class AltTransformAdapter extends DepthFirstAdapter ...@@ -93,28 +96,29 @@ public class AltTransformAdapter extends DepthFirstAdapter
} }
else else
{ {
simpleTermTail = new TId((String)isElementIsAlist.get(currentNewAltName+name)); simpleTermTail = new TId(isElementIsAlist.get(currentNewAltName+name));
} }
TId tid; TId tid;
tid = ( ((LinkedList)altIds.alts_elems_list_elemName.get(currentNewAltName)).contains(name) ? tid = ( altIds.alts_elems_list_elemName.get(currentNewAltName).contains(name) ?
node.getId() : new TId( "$" + node.getId().getText() ) ); node.getId() : new TId( "$" + node.getId().getText() ) );
ASimpleListTerm asimpleListTerm = new ASimpleListTerm( node.getSpecifier(), tid, simpleTermTail); ASimpleListTerm asimpleListTerm = new ASimpleListTerm( node.getSpecifier(), tid, simpleTermTail);
if(simpleTermOrsimpleListTermTypes.get(node) != null) if(simpleTermOrsimpleListTermTypes.get(node) != null)
{ {
simpleTermOrsimpleListTermTypes.put(asimpleListTerm, (String)simpleTermOrsimpleListTermTypes.get(node)); simpleTermOrsimpleListTermTypes.put(asimpleListTerm, simpleTermOrsimpleListTermTypes.get(node));
} }
node.replaceBy(asimpleListTerm); node.replaceBy(asimpleListTerm);
simpleTermTransform.put(asimpleListTerm, "L"+ResolveIds.name((String)isElementIsAlist.get(currentNewAltName+name) )); simpleTermTransform.put(asimpleListTerm, "L"+ResolveIds.name(isElementIsAlist.get(currentNewAltName+name)));
//Terms are added here only if they were implicitely transformed //Terms are added here only if they were implicitely transformed
listSimpleTermTransform.add( asimpleListTerm ); listSimpleTermTransform.add( asimpleListTerm );
} }
} }
@Override
public void outAListTerm(AListTerm node) public void outAListTerm(AListTerm node)
{ {
if( (node.getListTerms() != null) && (node.getListTerms().size() > 0) ) if( (node.getListTerms() != null) && (node.getListTerms().size() > 0) )
...@@ -123,7 +127,7 @@ public class AltTransformAdapter extends DepthFirstAdapter ...@@ -123,7 +127,7 @@ public class AltTransformAdapter extends DepthFirstAdapter
if(simpleTermTransform.get(temp[0]) != null) if(simpleTermTransform.get(temp[0]) != null)
{ {
String firstTermType = (String)simpleTermTransform.get(temp[0]); String firstTermType = simpleTermTransform.get(temp[0]);
if(firstTermType != null) if(firstTermType != null)
{ {
......
...@@ -7,15 +7,15 @@ ...@@ -7,15 +7,15 @@
package org.sablecc.sablecc; package org.sablecc.sablecc;
import org.sablecc.sablecc.analysis.*; import java.util.HashMap;
import java.util.Map;
import org.sablecc.sablecc.analysis.DepthFirstAdapter;
import org.sablecc.sablecc.node.*; import org.sablecc.sablecc.node.*;
import java.util.*;
import java.io.*;
public class AlternativeElementTypes extends DepthFirstAdapter public class AlternativeElementTypes extends DepthFirstAdapter
{ {
private Map altElemTypes = new TypedHashMap(StringCast.instance, private Map<String, String> altElemTypes = new HashMap<>();
StringCast.instance);
private ResolveIds ids; private ResolveIds ids;
private String currentAlt; private String currentAlt;
...@@ -25,36 +25,40 @@ public class AlternativeElementTypes extends DepthFirstAdapter ...@@ -25,36 +25,40 @@ public class AlternativeElementTypes extends DepthFirstAdapter
this.ids = ids; this.ids = ids;
} }
public Map getMapOfAltElemType() public Map<String, String> getMapOfAltElemType()
{ {
return altElemTypes; return altElemTypes;
} }
@Override
public void caseAAst(AAst node) public void caseAAst(AAst node)
{} {}
@Override
public void caseAProd(final AProd production) public void caseAProd(final AProd production)
{ {
Object []temp = production.getAlts().toArray(); PAlt[] temp = production.getAlts().toArray(new PAlt[0]);
for(int i = 0; i<temp.length; i++) for(PAlt alt : temp)
{ {
((PAlt)temp[i]).apply(this); alt.apply(this);
} }
} }
@Override
public void caseAAlt(AAlt node) public void caseAAlt(AAlt node)
{ {
currentAlt = (String)ids.names.get(node); currentAlt = ids.names.get(node);
Object []temp = node.getElems().toArray(); PElem[] temp = node.getElems().toArray(new PElem[0]);
for(int i = 0; i<temp.length; i++) for(PElem elem : temp)
{ {
((PElem)temp[i]).apply(this); elem.apply(this);
} }
} }
@Override
public void inAElem(AElem node) public void inAElem(AElem node)
{ {
String elemType = (String)ids.elemTypes.get(node); String elemType = ids.elemTypes.get(node);
if(node.getElemName() != null) if(node.getElemName() != null)
{ {
......
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* This file is part of SableCC. *
* See the file "LICENSE" for copyright information and the *
* terms and conditions for copying, distribution and *
* modification of SableCC. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
package org.sablecc.sablecc;
import java.util.*;
public class BooleanCast implements Cast
{
public final static BooleanCast instance = new BooleanCast();
private BooleanCast()
{}
public Object cast(Object o)
{
return (Boolean) o;
}
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* This file is part of SableCC. *
* See the file "LICENSE" for copyright information and the *
* terms and conditions for copying, distribution and *
* modification of SableCC. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
package org.sablecc.sablecc;
public interface Cast
{
Object cast(Object o);
}
...@@ -7,33 +7,34 @@ ...@@ -7,33 +7,34 @@
package org.sablecc.sablecc; package org.sablecc.sablecc;
import java.util.*; import java.util.ArrayList;
import java.util.Enumeration; import java.util.Collection;
import java.util.Vector; import java.util.List;
public class CharSet implements Cloneable public class CharSet implements Cloneable
{ {
private final Vector intervals = new Vector(0); private final List<Interval> intervals = new ArrayList<>();
public CharSet(char c) public CharSet(char c)
{ {
intervals.addElement(new Interval(c, c)); intervals.add(new Interval(c, c));
} }
public CharSet(char start, char end) public CharSet(char start, char end)
{ {
intervals.addElement(new Interval(start, end)); intervals.add(new Interval(start, end));
} }
private CharSet(Vector intervals) private CharSet(Collection<Interval> intervals)
{ {
for(Enumeration e = intervals.elements(); e.hasMoreElements();) for(Interval i : intervals)
{ {
this.intervals.addElement(((Interval) e.nextElement()).clone()); this.intervals.add(i.clone());
} }
} }
public Object clone() @Override
public CharSet clone()
{ {
return new CharSet(intervals); return new CharSet(intervals);
} }
...@@ -47,9 +48,9 @@ public class CharSet implements Cloneable ...@@ -47,9 +48,9 @@ public class CharSet implements Cloneable
while(high >= low) while(high >= low)
{ {
int middle = (high + low) / 2; int middle = (high + low) >>> 1;
interval2 = (Interval) intervals.elementAt(middle); interval2 = intervals.get(middle);
if(interval1.start <= interval2.end) if(interval1.start <= interval2.end)
{ {
...@@ -70,40 +71,38 @@ public class CharSet implements Cloneable ...@@ -70,40 +71,38 @@ public class CharSet implements Cloneable
return result; return result;
} }
private void remove private void remove(Interval interval)
(Interval interval)
{ {
intervals.removeElement(interval); intervals.remove(interval);
} }
private void add private void add(Interval interval)
(Interval interval)
{ {
for(int i = 0; i < intervals.size(); i++) for(int i = 0; i < intervals.size(); i++)
{ {
Interval iv = (Interval) intervals.elementAt(i); Interval iv = intervals.get(i);
if(iv.start > interval.start) if(iv.start > interval.start)
{ {
intervals.insertElementAt(interval, i); intervals.add(i, interval);
return; return;
} }
} }
intervals.addElement(interval); intervals.add(interval);
} }
public CharSet union(CharSet chars) public CharSet union(CharSet chars)
{ {
CharSet result = (CharSet) clone(); CharSet result = clone();
Interval interval; Interval interval;
Interval largeInterval; Interval largeInterval;
Interval overlap; Interval overlap;
for(Enumeration e = chars.intervals.elements(); e.hasMoreElements();) for(Interval i : chars.intervals)
{ {
interval = (Interval) ((Interval) e.nextElement()).clone(); interval = i.clone();
do do
{ {
...@@ -129,14 +128,14 @@ public class CharSet implements Cloneable ...@@ -129,14 +128,14 @@ public class CharSet implements Cloneable
public CharSet diff(CharSet chars) public CharSet diff(CharSet chars)
{ {
CharSet result = (CharSet) clone(); CharSet result = clone();
Interval interval; Interval interval;
Interval overlap; Interval overlap;
for(Enumeration e = chars.intervals.elements(); e.hasMoreElements();) for(Interval i : chars.intervals)
{ {
interval = (Interval) ((Interval) e.nextElement()).clone(); interval = i.clone();
do do
{ {
...@@ -160,16 +159,19 @@ public class CharSet implements Cloneable ...@@ -160,16 +159,19 @@ public class CharSet implements Cloneable
return result; return result;
} }
@Override
public String toString() public String toString()
{ {
StringBuffer result = new StringBuffer(); StringBuilder result = new StringBuilder();
for(Enumeration e = intervals.elements(); e.hasMoreElements();) for(Interval i : intervals)
{ {
result.append("[" + e.nextElement() + "] "); result.append("[");
result.append(i);
result.append("] ");
} }
return "" + result; return result.toString();
} }
public static class Interval implements Cloneable public static class Interval implements Cloneable
...@@ -180,7 +182,8 @@ public class CharSet implements Cloneable ...@@ -180,7 +182,8 @@ public class CharSet implements Cloneable
this.end = end; this.end = end;
} }
public Object clone() @Override
public Interval clone()
{ {
return new Interval(start, end); return new Interval(start, end);
} }
...@@ -195,6 +198,7 @@ public class CharSet implements Cloneable ...@@ -195,6 +198,7 @@ public class CharSet implements Cloneable
return "" + ((int) c); return "" + ((int) c);
} }
@Override
public String toString() public String toString()
{ {
if(start < end) if(start < end)
...@@ -210,17 +214,4 @@ public class CharSet implements Cloneable ...@@ -210,17 +214,4 @@ public class CharSet implements Cloneable
public char start; public char start;
public char end; public char end;
} }
public static class IntervalCast implements Cast
{
public final static IntervalCast instance = new IntervalCast();
private IntervalCast()
{}
public Object cast(Object o)
{
return (Interval) o;
}
}
} }
...@@ -19,10 +19,11 @@ ...@@ -19,10 +19,11 @@
package org.sablecc.sablecc; package org.sablecc.sablecc;
import org.sablecc.sablecc.analysis.*; import java.util.HashMap;
import java.util.Map;
import org.sablecc.sablecc.analysis.DepthFirstAdapter;
import org.sablecc.sablecc.node.*; import org.sablecc.sablecc.node.*;
import java.util.*;
import java.io.*;
public class ComputeCGNomenclature extends DepthFirstAdapter public class ComputeCGNomenclature extends DepthFirstAdapter
{ {
...@@ -31,14 +32,11 @@ public class ComputeCGNomenclature extends DepthFirstAdapter ...@@ -31,14 +32,11 @@ public class ComputeCGNomenclature extends DepthFirstAdapter
private int counter; private int counter;
private ResolveIds ids; private ResolveIds ids;
private ResolveProdTransformIds prodTransformIds; private ResolveProdTransformIds prodTransformIds;
private Map altElemTypes; private Map<String, String> altElemTypes;
private final Map altTransformElemTypes = new TypedHashMap( private final Map<Node, String> altTransformElemTypes = new HashMap<>();
NodeCast.instance,
StringCast.instance);
private final Map termNumbers = new TypedHashMap(NodeCast.instance, private final Map<Node, Integer> termNumbers = new HashMap<>();
IntegerCast.instance);
public ComputeCGNomenclature(ResolveIds ids, ResolveProdTransformIds prodTransformIds) public ComputeCGNomenclature(ResolveIds ids, ResolveProdTransformIds prodTransformIds)
{ {
...@@ -46,31 +44,33 @@ public class ComputeCGNomenclature extends DepthFirstAdapter ...@@ -46,31 +44,33 @@ public class ComputeCGNomenclature extends DepthFirstAdapter
this.prodTransformIds = prodTransformIds; this.prodTransformIds = prodTransformIds;
} }
public void setAltElemTypes(Map aMap) public void setAltElemTypes(Map<String, String> aMap)
{ {
this.altElemTypes = aMap; this.altElemTypes = aMap;
} }
public Map getAltTransformElemTypes() public Map<Node, String> getAltTransformElemTypes()
{ {
return altTransformElemTypes; return altTransformElemTypes;
} }
public Map getTermNumbers() public Map<Node, Integer> getTermNumbers()
{ {
return termNumbers; return termNumbers;
} }
@Override
public void caseAProd(final AProd production) public void caseAProd(final AProd production)
{ {
currentProd = "P" + ids.name(production.getId().getText()); currentProd = "P" + ResolveIds.name(production.getId().getText());
Object []temp = production.getAlts().toArray(); PAlt[] temp = production.getAlts().toArray(new PAlt[0]);
for(int i = 0; i<temp.length; i++) for(PAlt alt : temp)
{ {
((PAlt)temp[i]).apply(this); alt.apply(this);
} }
} }
@Override
public void inAAlt(AAlt nodeAlt) public void inAAlt(AAlt nodeAlt)
{ {
counter = 0; counter = 0;
...@@ -78,7 +78,7 @@ public class ComputeCGNomenclature extends DepthFirstAdapter ...@@ -78,7 +78,7 @@ public class ComputeCGNomenclature extends DepthFirstAdapter
if(nodeAlt.getAltName() != null) if(nodeAlt.getAltName() != null)
{ {
currentAlt = "A"+ currentAlt = "A"+
ids.name( nodeAlt.getAltName().getText() )+ ResolveIds.name( nodeAlt.getAltName().getText() )+
currentProd.substring(1); currentProd.substring(1);
} }
else else
...@@ -89,12 +89,14 @@ public class ComputeCGNomenclature extends DepthFirstAdapter ...@@ -89,12 +89,14 @@ public class ComputeCGNomenclature extends DepthFirstAdapter
counter = 0; counter = 0;
} }
@Override
public void caseAAst(AAst node) public void caseAAst(AAst node)
{} {}
@Override
public void inAElem(AElem node) public void inAElem(AElem node)
{ {
String elemType = (String)ids.elemTypes.get(node); String elemType = ids.elemTypes.get(node);
if(node.getElemName() != null) if(node.getElemName() != null)
{ {
...@@ -102,31 +104,34 @@ public class ComputeCGNomenclature extends DepthFirstAdapter ...@@ -102,31 +104,34 @@ public class ComputeCGNomenclature extends DepthFirstAdapter
} }
} }
@Override
public void inANewTerm(ANewTerm node) public void inANewTerm(ANewTerm node)
{ {
AProdName aProdName = (AProdName)node.getProdName(); AProdName aProdName = (AProdName)node.getProdName();
String type = "P" + ids.name(aProdName.getId().getText()); String type = "P" + ResolveIds.name(aProdName.getId().getText());
altTransformElemTypes.put(node, type); altTransformElemTypes.put(node, type);
termNumbers.put(node, new Integer(++counter)); termNumbers.put(node, ++counter);
} }
@Override
public void inANewListTerm(ANewListTerm node) public void inANewListTerm(ANewListTerm node)
{ {
AProdName aProdName = (AProdName)node.getProdName(); AProdName aProdName = (AProdName)node.getProdName();
String type = "P" + ids.name(aProdName.getId().getText()); String type = "P" + ResolveIds.name(aProdName.getId().getText());
altTransformElemTypes.put(node, type); altTransformElemTypes.put(node, type);
termNumbers.put(node, new Integer(++counter)); termNumbers.put(node, ++counter);
} }
@Override
public void outAListTerm(AListTerm node) public void outAListTerm(AListTerm node)
{ {
if( node.getListTerms().size() > 0 ) if( node.getListTerms().size() > 0 )
{ {
Object[] temp = node.getListTerms().toArray(); PListTerm[] temp = node.getListTerms().toArray(new PListTerm[0]);
String firstTermType = (String)altTransformElemTypes.get(temp[0]); String firstTermType = altTransformElemTypes.get(temp[0]);
if(firstTermType != null) if(firstTermType != null)
{ {
...@@ -144,13 +149,14 @@ public class ComputeCGNomenclature extends DepthFirstAdapter ...@@ -144,13 +149,14 @@ public class ComputeCGNomenclature extends DepthFirstAdapter
{ {
altTransformElemTypes.put(node, "Lnull"); altTransformElemTypes.put(node, "Lnull");
} }
termNumbers.put(node, new Integer(++counter)); termNumbers.put(node, ++counter);
} }
@Override
public void caseASimpleTerm(ASimpleTerm node) public void caseASimpleTerm(ASimpleTerm node)
{ {
String name; String name;
String elemType = (String) this.altElemTypes.get( currentAlt+"."+node.getId().getText() ); String elemType = this.altElemTypes.get( currentAlt+"."+node.getId().getText() );
if(node.getSimpleTermTail() == null) if(node.getSimpleTermTail() == null)
{ {
...@@ -158,13 +164,13 @@ public class ComputeCGNomenclature extends DepthFirstAdapter ...@@ -158,13 +164,13 @@ public class ComputeCGNomenclature extends DepthFirstAdapter
if(name.startsWith("P") ) if(name.startsWith("P") )
{ {
//add termtail to the simpleterm //add termtail to the simpleterm
node.setSimpleTermTail( (TId)node.getId().clone() ); node.setSimpleTermTail(node.getId().clone());
} }
} }
else else
{ {
String termTail = node.getSimpleTermTail().getText(); String termTail = node.getSimpleTermTail().getText();
name = (String)prodTransformIds.prodTransformElemTypesString.get(elemType+"."+termTail); name = prodTransformIds.prodTransformElemTypesString.get(elemType+"."+termTail);
} }
if(name.endsWith("?")) if(name.endsWith("?"))
...@@ -173,7 +179,7 @@ public class ComputeCGNomenclature extends DepthFirstAdapter ...@@ -173,7 +179,7 @@ public class ComputeCGNomenclature extends DepthFirstAdapter
} }
altTransformElemTypes.put(node, name); altTransformElemTypes.put(node, name);
termNumbers.put(node, new Integer(++counter)); termNumbers.put(node, ++counter);
} }
/* /*
...@@ -235,16 +241,18 @@ public class ComputeCGNomenclature extends DepthFirstAdapter ...@@ -235,16 +241,18 @@ public class ComputeCGNomenclature extends DepthFirstAdapter
termNumbers.put(node, new Integer(++counter)); termNumbers.put(node, new Integer(++counter));
} }
*/ */
@Override
public void caseANullTerm(ANullTerm node) public void caseANullTerm(ANullTerm node)
{ {
altTransformElemTypes.put(node, "null"); altTransformElemTypes.put(node, "null");
termNumbers.put(node, new Integer(++counter)); termNumbers.put(node, ++counter);
} }
@Override
public void caseASimpleListTerm(ASimpleListTerm node) public void caseASimpleListTerm(ASimpleListTerm node)
{ {
String name; String name;
String elemType = (String)altElemTypes.get( currentAlt+"."+node.getId().getText() ); String elemType = altElemTypes.get( currentAlt+"."+node.getId().getText() );
if(node.getSimpleTermTail() == null) if(node.getSimpleTermTail() == null)
{ {
...@@ -252,13 +260,13 @@ public class ComputeCGNomenclature extends DepthFirstAdapter ...@@ -252,13 +260,13 @@ public class ComputeCGNomenclature extends DepthFirstAdapter
if( name.startsWith("P") ) if( name.startsWith("P") )
{ {
//add termtail to the simpleterm //add termtail to the simpleterm
node.setSimpleTermTail( (TId)node.getId().clone() ); node.setSimpleTermTail(node.getId().clone());
} }
} }
else else
{ {
String termTail = node.getSimpleTermTail().getText(); String termTail = node.getSimpleTermTail().getText();
name = (String)prodTransformIds.prodTransformElemTypesString.get(elemType+"."+termTail); name = prodTransformIds.prodTransformElemTypesString.get(elemType+"."+termTail);
} }
if(name.endsWith("?")) if(name.endsWith("?"))
...@@ -266,7 +274,7 @@ public class ComputeCGNomenclature extends DepthFirstAdapter ...@@ -266,7 +274,7 @@ public class ComputeCGNomenclature extends DepthFirstAdapter
name = name.substring(0, name.length()-1); name = name.substring(0, name.length()-1);
} }
altTransformElemTypes.put(node, name); altTransformElemTypes.put(node, name);
termNumbers.put(node, new Integer(++counter)); termNumbers.put(node, ++counter);
} }
/* /*
public void caseASimpleListTerm(ASimpleListTerm node) public void caseASimpleListTerm(ASimpleListTerm node)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment