Skip to content
Snippets Groups Projects
Commit 01ced8c9 authored by Jan Gruteser's avatar Jan Gruteser
Browse files

delete duplicate DefinitionCollector

parent c57c1f18
Branches
Tags
No related merge requests found
Pipeline #149807 passed
package de.tlc4b.analysis.transformation;
import java.util.Hashtable;
import de.be4.classicalb.core.parser.analysis.DepthFirstAdapter;
import de.be4.classicalb.core.parser.node.AConstraintsMachineClause;
import de.be4.classicalb.core.parser.node.ADefinitionsMachineClause;
import de.be4.classicalb.core.parser.node.AExpressionDefinitionDefinition;
import de.be4.classicalb.core.parser.node.AInitialisationMachineClause;
import de.be4.classicalb.core.parser.node.AInvariantMachineClause;
import de.be4.classicalb.core.parser.node.ALocalOperationsMachineClause;
import de.be4.classicalb.core.parser.node.AOperationsMachineClause;
import de.be4.classicalb.core.parser.node.APredicateDefinitionDefinition;
import de.be4.classicalb.core.parser.node.APropertiesMachineClause;
import de.be4.classicalb.core.parser.node.ASubstitutionDefinitionDefinition;
import de.be4.classicalb.core.parser.node.PDefinition;
import de.be4.classicalb.core.parser.node.Start;
/**
* This class only collects all Definitions of a Machine. Definitions of other
* files which are included are not contained.
*/
public class DefinitionCollector extends DepthFirstAdapter {
private final Hashtable<String, PDefinition> definitionsTable;
private ADefinitionsMachineClause definitionsMachineClause;
public Hashtable<String, PDefinition> getDefinitions() {
return new Hashtable<>(definitionsTable);
}
public ADefinitionsMachineClause getDefinitionsMachineClause() {
return this.definitionsMachineClause;
}
public DefinitionCollector(Start tree) {
definitionsTable = new Hashtable<>();
tree.apply(this);
}
@Override
public void inADefinitionsMachineClause(ADefinitionsMachineClause node) {
this.definitionsMachineClause = node;
}
@Override
public void caseAPredicateDefinitionDefinition(
APredicateDefinitionDefinition node) {
definitionsTable.put(node.getName().getText(), node);
}
@Override
public void caseASubstitutionDefinitionDefinition(
ASubstitutionDefinitionDefinition node) {
definitionsTable.put(node.getName().getText(), node);
}
@Override
public void caseAExpressionDefinitionDefinition(
AExpressionDefinitionDefinition node) {
definitionsTable.put(node.getName().getText(), node);
}
/***************************************************************************
* exclude large sections of a machine without machine references by doing
* nothing
*/
@Override
public void caseAConstraintsMachineClause(AConstraintsMachineClause node) {
}
@Override
public void caseAInvariantMachineClause(AInvariantMachineClause node) {
}
@Override
public void caseAOperationsMachineClause(AOperationsMachineClause node) {
}
@Override
public void caseAPropertiesMachineClause(APropertiesMachineClause node) {
}
@Override
public void caseAInitialisationMachineClause(
AInitialisationMachineClause node) {
}
@Override
public void caseALocalOperationsMachineClause(
ALocalOperationsMachineClause node) {
}
}
...@@ -4,7 +4,10 @@ import java.util.ArrayList; ...@@ -4,7 +4,10 @@ import java.util.ArrayList;
import java.util.Hashtable; import java.util.Hashtable;
import java.util.List; import java.util.List;
import de.be4.classicalb.core.parser.Definitions;
import de.be4.classicalb.core.parser.IDefinitions;
import de.be4.classicalb.core.parser.analysis.DepthFirstAdapter; import de.be4.classicalb.core.parser.analysis.DepthFirstAdapter;
import de.be4.classicalb.core.parser.analysis.checking.DefinitionCollector;
import de.be4.classicalb.core.parser.node.AAbstractMachineParseUnit; import de.be4.classicalb.core.parser.node.AAbstractMachineParseUnit;
import de.be4.classicalb.core.parser.node.ADefinitionExpression; import de.be4.classicalb.core.parser.node.ADefinitionExpression;
import de.be4.classicalb.core.parser.node.ADefinitionPredicate; import de.be4.classicalb.core.parser.node.ADefinitionPredicate;
...@@ -34,7 +37,7 @@ import de.tlc4b.analysis.StandardModules; ...@@ -34,7 +37,7 @@ import de.tlc4b.analysis.StandardModules;
*/ */
public class DefinitionsEliminator extends DepthFirstAdapter { public class DefinitionsEliminator extends DepthFirstAdapter {
private final Hashtable<String, PDefinition> definitionsTable; private final IDefinitions definitions = new Definitions();
private final ArrayList<Hashtable<String, PExpression>> contextStack; private final ArrayList<Hashtable<String, PExpression>> contextStack;
public static void eliminateDefinitions(Start start){ public static void eliminateDefinitions(Start start){
...@@ -42,8 +45,7 @@ public class DefinitionsEliminator extends DepthFirstAdapter { ...@@ -42,8 +45,7 @@ public class DefinitionsEliminator extends DepthFirstAdapter {
} }
private DefinitionsEliminator(Start node) { private DefinitionsEliminator(Start node) {
DefinitionCollector collector = new DefinitionCollector(node); new DefinitionCollector(definitions).collectDefinitions(node);
definitionsTable = collector.getDefinitions();
contextStack = new ArrayList<>(); contextStack = new ArrayList<>();
node.apply(this); node.apply(this);
} }
...@@ -113,7 +115,7 @@ public class DefinitionsEliminator extends DepthFirstAdapter { ...@@ -113,7 +115,7 @@ public class DefinitionsEliminator extends DepthFirstAdapter {
@Override @Override
public void caseADefinitionSubstitution(ADefinitionSubstitution node) { public void caseADefinitionSubstitution(ADefinitionSubstitution node) {
String name = node.getDefLiteral().getText(); String name = node.getDefLiteral().getText();
PDefinition def = definitionsTable.get(name); PDefinition def = definitions.getDefinition(name);
ASubstitutionDefinitionDefinition clone = (ASubstitutionDefinitionDefinition) def.clone(); ASubstitutionDefinitionDefinition clone = (ASubstitutionDefinitionDefinition) def.clone();
Hashtable<String, PExpression> context = new Hashtable<>(); Hashtable<String, PExpression> context = new Hashtable<>();
...@@ -144,7 +146,7 @@ public class DefinitionsEliminator extends DepthFirstAdapter { ...@@ -144,7 +146,7 @@ public class DefinitionsEliminator extends DepthFirstAdapter {
return; return;
} }
PDefinition def = definitionsTable.get(name); PDefinition def = definitions.getDefinition(name);
AExpressionDefinitionDefinition clone = (AExpressionDefinitionDefinition) def.clone(); AExpressionDefinitionDefinition clone = (AExpressionDefinitionDefinition) def.clone();
Hashtable<String, PExpression> context = new Hashtable<>(); Hashtable<String, PExpression> context = new Hashtable<>();
...@@ -164,7 +166,7 @@ public class DefinitionsEliminator extends DepthFirstAdapter { ...@@ -164,7 +166,7 @@ public class DefinitionsEliminator extends DepthFirstAdapter {
@Override @Override
public void caseADefinitionPredicate(ADefinitionPredicate node) { public void caseADefinitionPredicate(ADefinitionPredicate node) {
String name = node.getDefLiteral().getText(); String name = node.getDefLiteral().getText();
PDefinition def = definitionsTable.get(name); PDefinition def = definitions.getDefinition(name);
ArrayList<PExpression> arguments = new ArrayList<>(node.getParameters()); ArrayList<PExpression> arguments = new ArrayList<>(node.getParameters());
if (StandardModules.isKeywordInModuleExternalFunctions(name)) { if (StandardModules.isKeywordInModuleExternalFunctions(name)) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment