Skip to content
Snippets Groups Projects
Select Git revision
  • 70385e28c2c062d69722e4dba0a98ed4da89ebf9
  • develop default protected
  • 0.3.0
  • 0.2.1
  • 0.2.0
  • 0.1.0
6 results

build.gradle

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    BDefinitionsFinder.java 2.18 KiB
    package de.tla2b.translation;
    
    import de.be4.classicalb.core.parser.util.Utils;
    import de.tla2b.analysis.AbstractASTVisitor;
    import de.tla2b.analysis.BOperation;
    import de.tla2b.analysis.SpecAnalyser;
    import de.tla2b.global.TranslationGlobals;
    import tla2sany.semantic.*;
    import tlc2.tool.ToolGlobals;
    
    import java.util.HashSet;
    import java.util.Set;
    
    public class BDefinitionsFinder extends AbstractASTVisitor {
    	private final Set<OpDefNode> bDefinitionsSet = new HashSet<>();
    
    	public BDefinitionsFinder(SpecAnalyser specAnalyser) {
    		if (specAnalyser.getConfigFileEvaluator() != null) {
    			bDefinitionsSet.addAll(specAnalyser.getConfigFileEvaluator().getConstantOverrides().values());
    			bDefinitionsSet.addAll(specAnalyser.getConfigFileEvaluator().getOperatorOverrides().values());
    		}
    
    		for (BOperation op : specAnalyser.getBOperations()) {
    			visitExprNode(op.getNode());
    			for (OpApplNode opApplNode : op.getExistQuans()) {
    				ExprNode[] bdedQuantBounds = opApplNode.getBdedQuantBounds();
    				for (ExprNode exprNode : bdedQuantBounds) {
    					visitExprNode(exprNode);
    				}
    			}
    		}
    
    		if (specAnalyser.getInits() != null) {
    			for (int i = 0; i < specAnalyser.getInits().size(); i++) {
    				visitExprNode(specAnalyser.getInits().get(i));
    			}
    		}
    
    		for (AssumeNode assume : specAnalyser.getModuleNode().getAssumptions()) {
    			visitAssumeNode(assume);
    		}
    
    		bDefinitionsSet.addAll(specAnalyser.getInvariants());
    
    		for (OpDefNode opDef : specAnalyser.getModuleNode().getOpDefs()) {
    			String defName = opDef.getName().toString();
    			// GOAL, ANIMATION_FUNCTION, ANIMATION_IMGxx, SET_PREF_xxx, etc.
    			if (Utils.isProBSpecialDefinitionName(defName)) {
    				bDefinitionsSet.add(opDef);
    			}
    		}
    
    		Set<OpDefNode> temp = new HashSet<>(bDefinitionsSet);
    		for (OpDefNode opDefNode : temp) {
    			visitExprNode(opDefNode.getBody());
    		}
    
    	}
    
    	@Override
    	public void visitUserDefinedNode(OpApplNode n) {
    		OpDefNode def = (OpDefNode) n.getOperator();
    		if (bDefinitionsSet.add(def)) {
    			// visit body only once
    			visitExprNode(def.getBody());
    		}
    		for (ExprOrOpArgNode exprOrOpArgNode : n.getArgs()) {
    			visitExprOrOpArgNode(exprOrOpArgNode);
    		}
    	}