package uva.ql.interpreter.typecheck.depedency; import uva.ql.ast.expressions.*; import uva.ql.ast.expressions.literals.BooleanLiteral; import uva.ql.ast.expressions.literals.Identifier; import uva.ql.ast.expressions.literals.IntLiteral; import uva.ql.ast.expressions.literals.MoneyLiteral; import uva.ql.ast.expressions.literals.StringLiteral; import uva.ql.ast.expressions.logic.And; import uva.ql.ast.expressions.logic.Equal; import uva.ql.ast.expressions.logic.Greater; import uva.ql.ast.expressions.logic.Greater_Eq; import uva.ql.ast.expressions.logic.Less; import uva.ql.ast.expressions.logic.Less_Eq; import uva.ql.ast.expressions.logic.NotEqual; import uva.ql.ast.expressions.logic.Or; import uva.ql.ast.expressions.math.Addition; import uva.ql.ast.expressions.math.Division; import uva.ql.ast.expressions.math.Exponentiation; import uva.ql.ast.expressions.math.Multiplication; import uva.ql.ast.expressions.math.Substraction; import uva.ql.ast.visitor.ExpressionVisitor; public class DependencyExpressionVisitor implements ExpressionVisitor<Expression>{ private IdentifierSet identifierList = new IdentifierSet(); @Override public Expression visitBinaryExpression(BinaryExpression expression) { Expression left = expression.getLeftExpr(); Expression right = expression.getRightExpr(); if (left.isIdentifier()){ Identifier identifier = (Identifier)left; identifierList.putValue(identifier.getValue()); } if (right.isIdentifier()){ Identifier identifier = (Identifier)right; identifierList.putValue(identifier.getValue()); } left.accept(this); right.accept(this); return null; } public IdentifierSet getIdentifierSet(){ return this.identifierList; } @Override public Expression visitExpression(Expression expression) { this.identifierList = new IdentifierSet(); expression.accept(this); return null; } @Override public Expression visitExponentiation(Exponentiation exponentiation) { return this.visitBinaryExpression(exponentiation); } @Override public Expression visitAddition(Addition addition) { return this.visitBinaryExpression(addition); } @Override public Expression visitSubstraction(Substraction substraction) { return this.visitBinaryExpression(substraction); } @Override public Expression visitMultiplication(Multiplication multipllication) { return this.visitBinaryExpression(multipllication); } @Override public Expression visitDivision(Division division) { return this.visitBinaryExpression(division); } @Override public Expression visitAnd(And and) { return this.visitBinaryExpression(and); } @Override public Expression visitOr(Or or) { return this.visitBinaryExpression(or); } @Override public Expression visitEqual(Equal equal) { return this.visitBinaryExpression(equal); } @Override public Expression visitNotEqual(NotEqual notEqual) { return this.visitBinaryExpression(notEqual); } @Override public Expression visitGreaterEqual(Greater_Eq greaterEqual) { return this.visitBinaryExpression(greaterEqual); } @Override public Expression visitGreater(Greater greater) { return this.visitBinaryExpression(greater); } @Override public Expression visitLessEqual(Less_Eq lessEqual) { return this.visitBinaryExpression(lessEqual); } @Override public Expression visitLess(Less less) { return this.visitBinaryExpression(less); } @Override public Identifier visitIdentifier(Identifier identifier) { return identifier; } @Override public Expression visitBooleanLiteral(BooleanLiteral booleanLiteral) { // TODO Auto-generated method stub return null; } @Override public Expression visitMoneyLiteral(MoneyLiteral moneyLiteral) { // TODO Auto-generated method stub return null; } @Override public Expression visitIntLiteral(IntLiteral intLiteral) { // TODO Auto-generated method stub return null; } @Override public Expression visitStringLiteral(StringLiteral stringLiteral) { // TODO Auto-generated method stub return null; } }