package qlProject.auxiliary_expression_visitors;
import java.util.HashSet;
import java.util.Set;
import qlProject.ast.expression.BinaryExpression;
import qlProject.ast.expression.IExpressionVisitor;
import qlProject.ast.expression.Id;
import qlProject.ast.expression.ParenthesisExpr;
import qlProject.ast.expression.StringExpr.ConcatenationExpr;
import qlProject.ast.expression.StringExpr.StringLiteral;
import qlProject.ast.expression.arithmeticExpr.AdditionExpr;
import qlProject.ast.expression.arithmeticExpr.DivisionExpr;
import qlProject.ast.expression.arithmeticExpr.IntLiteral;
import qlProject.ast.expression.arithmeticExpr.MultiplicationExpr;
import qlProject.ast.expression.arithmeticExpr.NegationExpr;
import qlProject.ast.expression.arithmeticExpr.SubtractionExpr;
import qlProject.ast.expression.booleanExpr.BoolLiteral;
import qlProject.ast.expression.booleanExpr.comparisonExpression.BiggerEqExpr;
import qlProject.ast.expression.booleanExpr.comparisonExpression.BiggerThanExpr;
import qlProject.ast.expression.booleanExpr.comparisonExpression.EqualExpr;
import qlProject.ast.expression.booleanExpr.comparisonExpression.SmallerEqExpr;
import qlProject.ast.expression.booleanExpr.comparisonExpression.SmallerThanExpr;
import qlProject.ast.expression.booleanExpr.comparisonExpression.UnequalExpr;
import qlProject.ast.expression.booleanExpr.logicalExpression.AndExpr;
import qlProject.ast.expression.booleanExpr.logicalExpression.NotExpr;
import qlProject.ast.expression.booleanExpr.logicalExpression.OrExpr;
public class VariablesCollectionVisitor implements IExpressionVisitor{
@Override
public Set<String> visit(NotExpr expr) {
return (Set<String>) expr.getSubExpression().accept(this);
}
@Override
public Set<String> visit(BoolLiteral boolLiteral) {
return new HashSet<String>();
}
@Override
public Set<String> visit(IntLiteral intLiteral) {
return new HashSet<String>();
}
@Override
public Set<String> visit(Id id) {
Set<String> vars = new HashSet<String>();
vars.add(id.getIdString());
return vars;
}
@Override
public Set<String> visit(StringLiteral stringLiteral) {
return new HashSet<String>();
}
@Override
public Set<String> visit(BiggerThanExpr expr) {
return visitBinarySubExprs(expr);
}
@Override
public Set<String> visit(BiggerEqExpr expr) {
return visitBinarySubExprs(expr);
}
@Override
public Set<String> visit(SmallerThanExpr expr) {
return visitBinarySubExprs(expr);
}
@Override
public Set<String> visit(SmallerEqExpr expr) {
return visitBinarySubExprs(expr);
}
@Override
public Set<String> visit(EqualExpr expr) {
return visitBinarySubExprs(expr);
}
@Override
public Set<String> visit(UnequalExpr expr) {
return visitBinarySubExprs(expr);
}
@Override
public Set<String> visit(ConcatenationExpr expr) {
return visitBinarySubExprs(expr);
}
@Override
public Set<String> visit(OrExpr expr) {
return visitBinarySubExprs(expr);
}
@Override
public Set<String> visit(AndExpr expr) {
return visitBinarySubExprs(expr);
}
@Override
public Set<String> visit(AdditionExpr expr) {
return visitBinarySubExprs(expr);
}
@Override
public Set<String> visit(DivisionExpr expr) {
return visitBinarySubExprs(expr);
}
@Override
public Set<String> visit(MultiplicationExpr expr) {
return visitBinarySubExprs(expr);
}
@Override
public Set<String> visit(SubtractionExpr expr) {
return visitBinarySubExprs(expr);
}
public Set<String> visitBinarySubExprs(BinaryExpression expr){
Set<String> vars = new HashSet<String>();
vars.addAll((Set<String>)expr.getLeft().accept(this));
vars.addAll((Set<String>)expr.getRight().accept(this));
return vars;}
@Override
public Set<String> visit(NegationExpr expr) {
return (Set<String>) expr.getSubExpression().accept(this);
}
@Override
public Set<String> visit(ParenthesisExpr e) {
return (Set<String>)(e.getSubExpression().accept(this));
}
}