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
Loading
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;
import java.util.Hashtable;
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.checking.DefinitionCollector;
import de.be4.classicalb.core.parser.node.AAbstractMachineParseUnit;
import de.be4.classicalb.core.parser.node.ADefinitionExpression;
import de.be4.classicalb.core.parser.node.ADefinitionPredicate;
......@@ -34,7 +37,7 @@ import de.tlc4b.analysis.StandardModules;
*/
public class DefinitionsEliminator extends DepthFirstAdapter {
private final Hashtable<String, PDefinition> definitionsTable;
private final IDefinitions definitions = new Definitions();
private final ArrayList<Hashtable<String, PExpression>> contextStack;
public static void eliminateDefinitions(Start start){
......@@ -42,8 +45,7 @@ public class DefinitionsEliminator extends DepthFirstAdapter {
}
private DefinitionsEliminator(Start node) {
DefinitionCollector collector = new DefinitionCollector(node);
definitionsTable = collector.getDefinitions();
new DefinitionCollector(definitions).collectDefinitions(node);
contextStack = new ArrayList<>();
node.apply(this);
}
......@@ -113,7 +115,7 @@ public class DefinitionsEliminator extends DepthFirstAdapter {
@Override
public void caseADefinitionSubstitution(ADefinitionSubstitution node) {
String name = node.getDefLiteral().getText();
PDefinition def = definitionsTable.get(name);
PDefinition def = definitions.getDefinition(name);
ASubstitutionDefinitionDefinition clone = (ASubstitutionDefinitionDefinition) def.clone();
Hashtable<String, PExpression> context = new Hashtable<>();
......@@ -144,7 +146,7 @@ public class DefinitionsEliminator extends DepthFirstAdapter {
return;
}
PDefinition def = definitionsTable.get(name);
PDefinition def = definitions.getDefinition(name);
AExpressionDefinitionDefinition clone = (AExpressionDefinitionDefinition) def.clone();
Hashtable<String, PExpression> context = new Hashtable<>();
......@@ -164,7 +166,7 @@ public class DefinitionsEliminator extends DepthFirstAdapter {
@Override
public void caseADefinitionPredicate(ADefinitionPredicate node) {
String name = node.getDefLiteral().getText();
PDefinition def = definitionsTable.get(name);
PDefinition def = definitions.getDefinition(name);
ArrayList<PExpression> arguments = new ArrayList<>(node.getParameters());
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