package de.gaalop.algebra; import de.gaalop.cfg.AssignmentNode; import de.gaalop.cfg.EmptyControlFlowVisitor; import de.gaalop.cfg.ExpressionStatement; import de.gaalop.cfg.StoreResultNode; import de.gaalop.dfg.EmptyExpressionVisitor; import de.gaalop.dfg.ExpressionVisitor; import de.gaalop.dfg.MultivectorComponent; import de.gaalop.dfg.Variable; import java.util.HashSet; /** * Collects all variables in control flow graph * @author Christian Steinmetz */ public class VariableCollector extends EmptyControlFlowVisitor { private HashSet<String> variables = new HashSet<String>(); public HashSet<String> getVariables() { return variables; } private ExpressionVisitor expressionVisitor = new EmptyExpressionVisitor() { @Override public void visit(MultivectorComponent node) { variables.add(node.getName()); } @Override public void visit(Variable node) { variables.add(node.getName()); } }; @Override public void visit(AssignmentNode node) { node.getVariable().accept(expressionVisitor); node.getValue().accept(expressionVisitor); super.visit(node); } @Override public void visit(ExpressionStatement node) { node.getExpression().accept(expressionVisitor); super.visit(node); } @Override public void visit(StoreResultNode node) { node.getValue().accept(expressionVisitor); super.visit(node); } }