Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
9c06f4a
added ExpressionVisitor and BaseExpressionVisitor; added Expression.a…
chrstphlbr Mar 15, 2024
399480e
started reworking the ExpressionVisitor to return the potetnially tra…
chrstphlbr Mar 15, 2024
b8d86ad
complete switch to new Expression.accept signature with ExpressionVis…
chrstphlbr Mar 18, 2024
5282bba
removed abstract calsses from ExpressionVisitor
chrstphlbr Mar 18, 2024
ca7c6a5
implemented BaseExpressionVisitor based on new ExpressionVisitor<T> i…
chrstphlbr Mar 18, 2024
db81119
fixed bug in BaseExpressionVisitor; added tests for BaseExpressionVis…
chrstphlbr Mar 19, 2024
66ea983
added tests for ArithmeticOperationExpressions
chrstphlbr Mar 20, 2024
fa2910a
added tests for ConditionOperationExpressions and fixed bugs in the p…
chrstphlbr Mar 20, 2024
8738732
added more tests and fixed a bug
chrstphlbr Mar 21, 2024
3956b33
added more details for to FilterOperation visitor test
chrstphlbr Mar 22, 2024
8786845
finished visitListOperationExpression method
chrstphlbr Apr 9, 2024
04a6607
minor refactoring
chrstphlbr Apr 9, 2024
e6555bc
added tests for remaining ListOperationExpressions
chrstphlbr Apr 9, 2024
25539af
added all list operation tests
chrstphlbr Apr 9, 2024
4ebd90b
added logical operation tests
chrstphlbr Apr 9, 2024
549ee36
added predefined operations (ChainOperationExpression) tests (wip)
chrstphlbr Apr 9, 2024
bf35326
finished predefined operations tests
chrstphlbr Apr 9, 2024
5beb811
added relational operation tests
chrstphlbr Apr 9, 2024
7a87f02
added tests for utility operations (wip)
chrstphlbr Apr 9, 2024
091e505
removed sout statement
chrstphlbr Apr 10, 2024
9db8778
refined BaseExpressionVisitor to always return new instances
chrstphlbr Apr 10, 2024
4ef2df6
finished tests for utility operations
chrstphlbr Apr 10, 2024
092db9d
keep grouping parentheses (LeftPriority and RightPriority) as part of…
chrstphlbr Apr 16, 2024
801ebde
fixed bugs in BaseExpressionVisitor, ConditionOperationExpression, an…
chrstphlbr Apr 19, 2024
9fa7614
implemented distinct function on lists and added corresponding visito…
chrstphlbr Apr 22, 2024
37359c0
added support for boolean literals and boolean variables in logical e…
chrstphlbr Apr 25, 2024
4f53ed4
fixed bug in support for boolean literals and variables support in Lo…
chrstphlbr Apr 26, 2024
44f3ec8
added support for boolean literals and boolean variables in IF/THEN/ELSE
chrstphlbr Apr 26, 2024
68f31e7
added ENDIF to toString of IF
chrstphlbr Apr 26, 2024
58f2482
keep DefOperations in the parsed expression and support AssugnOperati…
chrstphlbr Apr 26, 2024
7e1200c
implemented correct DefOperation::toString
chrstphlbr Apr 26, 2024
839309f
fixed bug where context/operand was not printed for variables after v…
chrstphlbr Apr 26, 2024
1fa933f
added to BaseExpressionVisitorTest assertions that ensure that the re…
chrstphlbr Apr 29, 2024
d9c4545
fixed bug when there is a def after an ExpressionSeparator
chrstphlbr Apr 30, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,083 changes: 1,083 additions & 0 deletions src/main/java/org/dvare/expression/BaseExpressionVisitor.java

Large diffs are not rendered by default.

4 changes: 4 additions & 0 deletions src/main/java/org/dvare/expression/BooleanExpression.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,10 @@ public LiteralExpression interpret(InstancesBinding instancesBinding) throws Int
return new BooleanLiteral(value);
}

@Override
public <T> T accept(ExpressionVisitor<T> v) {
return v.visit(this);
}

public String getName() {
return name;
Expand Down
1 change: 1 addition & 0 deletions src/main/java/org/dvare/expression/Expression.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ public LiteralExpression<?> interpret(InstancesBinding instancesBinding) throws
return new BooleanLiteral(false);
}

public abstract <T> T accept(ExpressionVisitor<T> v);
}


Expand Down
193 changes: 193 additions & 0 deletions src/main/java/org/dvare/expression/ExpressionVisitor.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,193 @@
package org.dvare.expression;

import org.dvare.expression.datatype.*;
import org.dvare.expression.literal.*;
import org.dvare.expression.operation.*;
import org.dvare.expression.operation.aggregation.*;
import org.dvare.expression.operation.arithmetic.*;
import org.dvare.expression.operation.flow.*;
import org.dvare.expression.operation.list.*;
import org.dvare.expression.operation.logical.And;
import org.dvare.expression.operation.logical.Implies;
import org.dvare.expression.operation.logical.Not;
import org.dvare.expression.operation.logical.OR;
import org.dvare.expression.operation.predefined.*;
import org.dvare.expression.operation.relational.*;
import org.dvare.expression.operation.utility.*;
import org.dvare.expression.veriable.*;

public interface ExpressionVisitor<T> {
// basic
T visit(FunctionExpression f);
T visit(NamedExpression n);
T visit(BooleanExpression b);

// datatype
T visit(BooleanListType bl);
T visit(BooleanType b);
T visit(DateListType dl);
T visit(DateTimeListType dtl);
T visit(ListType l);
T visit(DateTimeType dt);
T visit(DateType d);
T visit(FloatListType fl);
T visit(FloatType f);
T visit(IntegerListType il);
T visit(IntegerType i);
T visit(NullType n);
T visit(PairListType pl);
T visit(PairType p);
T visit(RegexType r);
T visit(SimpleDateListType sdl);
T visit(SimpleDateType sd);
T visit(StringListType sl);
T visit(StringType s);
T visit(TripleListType tl);
T visit(TripleType t);

// literal
T visit(BooleanLiteral b);
T visit(DateLiteral d);
T visit(DateTimeLiteral dt);
T visit(FloatLiteral f);
T visit(IntegerLiteral i);
T visit(ListLiteral l);
T visit(NullLiteral<?> n);
T visit(PairLiteral p);
T visit(RegexLiteral r);
T visit(SimpleDateLiteral sd);
T visit(StringLiteral s);
T visit(TripleLiteral t);

// variable
T visit(BooleanVariable b);
T visit(DateTimeVariable dt);
T visit(DateVariable d);
T visit(FloatVariable f);
T visit(IntegerVariable i);
T visit(ListVariable l);
T visit(PairVariable p);
T visit(RegexVariable r);
T visit(SimpleDateVariable sd);
T visit(StringVariable s);
T visit(TripleVariable t);

// operation
T visit(AssignOperationExpression a);
T visit(CompositeOperationExpression c);
T visit(IterationOperationExpression i);
T visit(ListLiteralOperationENDExpression lle);
T visit(ListLiteralOperationExpression ll);

// aggregation
T visit(Maximum m);
T visit(Mean m);
T visit(Median m);
T visit(Minimum m);
T visit(Mode m);
T visit(Sum s);

// arithmetic
T visit(Add a);
T visit(Divide d);
T visit(Max m);
T visit(Min m);
T visit(Multiply m);
T visit(Power p);
T visit(Subtract s);

// flow
T visit(ELSE e);
T visit(ENDIF e);
T visit(IF i);
T visit(TernaryOperation t);
T visit(THEN t);

// list
T visit(CombinationExists ce);
T visit(DistinctOperation d);
T visit(FilterOperation f);
T visit(First f);
T visit(GetItem gi);
T visit(HasItem hi);
T visit(InsideCombination ic);
T visit(InsideExistsCombination iec);
T visit(IsEmpty ie);
T visit(ItemPosition ip);
T visit(KeysOperation k);
T visit(Last l);
T visit(MapOperation m);
T visit(Match m);
T visit(MiddlesOperation m);
T visit(NotEmpty ne);
T visit(PairOperation p);
T visit(SizeOperation s);
T visit(SortOperation s);
T visit(TripleOperation t);
T visit(ValuesOperation v);

// logical
T visit(And a);
T visit(Implies i);
T visit(Not n);
T visit(OR o);

// predefined
T visit(AddDays ad);
T visit(AddMonths am);
T visit(AddYears ay);
T visit(Append a);
T visit(Contains c);
T visit(EndsWith ew);
T visit(GetYear gy);
T visit(Length l);
T visit(Prepend p);
T visit(SetDay sd);
T visit(SetMonth sm);
T visit(SetYear sy);
T visit(StartsWith sw);
T visit(SubDays sd);
T visit(SubMonths sm);
T visit(SubYears sy);
T visit(Substring s);
T visit(ToBoolean tb);
T visit(ToDate td);
T visit(ToInteger ti);
T visit(ToKey tk);
T visit(ToLeft tl);
T visit(ToMiddle tm);
T visit(ToPair tp);
T visit(ToRight tr);
T visit(ToString ts);
T visit(ToTriple tt);
T visit(ToValue tv);
T visit(Trim t);

// relational
T visit(Between b);
T visit(Equals e);
T visit(GreaterEqual ge);
T visit(GreaterThan gt);
T visit(In i);
T visit(LessEqual le);
T visit(LessThan lt);
T visit(NotEquals ne);
T visit(NotIn ni);

// utility
T visit(DateOperation d);
T visit(DateTimeOperation dt);
T visit(DefOperation d);
T visit(EndForAll efa);
T visit(EndForEach efe);
T visit(ExpressionSeparator es);
T visit(ForAll fa);
T visit(ForEach fe);
T visit(Function f);
T visit(Invoke i);
T visit(LeftPriority lp);
T visit(LetOperation l);
T visit(PrintOperation p);
T visit(RightPriority rp);
T visit(Today t);
}
5 changes: 4 additions & 1 deletion src/main/java/org/dvare/expression/FunctionExpression.java
Original file line number Diff line number Diff line change
Expand Up @@ -61,5 +61,8 @@ public void setBinding(FunctionBinding binding) {
this.binding = binding;
}


@Override
public <T> T accept(ExpressionVisitor<T> v) {
return v.visit(this);
}
}
5 changes: 4 additions & 1 deletion src/main/java/org/dvare/expression/NamedExpression.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,5 +36,8 @@ public void setName(String name) {
this.name = name;
}


@Override
public <T> T accept(ExpressionVisitor<T> v) {
return v.visit(this);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

import org.dvare.annotations.OperationMapping;
import org.dvare.annotations.Type;
import org.dvare.expression.ExpressionVisitor;
import org.dvare.expression.literal.LiteralExpression;
import org.dvare.expression.operation.relational.Equals;
import org.dvare.expression.operation.relational.NotEquals;
Expand Down Expand Up @@ -30,4 +31,9 @@ public boolean equal(LiteralExpression<?> left, LiteralExpression<?> right) {
public boolean notEqual(LiteralExpression<?> left, LiteralExpression<?> right) {
return super.notEqual(left, right);
}

@Override
public <T> T accept(ExpressionVisitor<T> v) {
return v.visit(this);
}
}
5 changes: 5 additions & 0 deletions src/main/java/org/dvare/expression/datatype/BooleanType.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import org.dvare.annotations.OperationMapping;
import org.dvare.annotations.Type;
import org.dvare.expression.ExpressionVisitor;
import org.dvare.expression.literal.LiteralExpression;
import org.dvare.expression.operation.relational.Equals;
import org.dvare.expression.operation.relational.In;
Expand Down Expand Up @@ -76,4 +77,8 @@ private List<Boolean> buildIntegerBoolean(List<Object> tempValues) {
return values;
}

@Override
public <T> T accept(ExpressionVisitor<T> v) {
return v.visit(this);
}
}
6 changes: 6 additions & 0 deletions src/main/java/org/dvare/expression/datatype/DateListType.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

import org.dvare.annotations.OperationMapping;
import org.dvare.annotations.Type;
import org.dvare.expression.ExpressionVisitor;
import org.dvare.expression.literal.ListLiteral;
import org.dvare.expression.literal.LiteralExpression;
import org.dvare.expression.operation.relational.Equals;
Expand Down Expand Up @@ -40,4 +41,9 @@ public boolean equal(LiteralExpression<?> left, LiteralExpression<?> right) {
public boolean notEqual(LiteralExpression<?> left, LiteralExpression<?> right) {
return !equal(left, right);
}

@Override
public <T> T accept(ExpressionVisitor<T> v) {
return v.visit(this);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

import org.dvare.annotations.OperationMapping;
import org.dvare.annotations.Type;
import org.dvare.expression.ExpressionVisitor;
import org.dvare.expression.literal.ListLiteral;
import org.dvare.expression.literal.LiteralExpression;
import org.dvare.expression.operation.relational.Equals;
Expand Down Expand Up @@ -40,4 +41,9 @@ public boolean equal(LiteralExpression<?> left, LiteralExpression<?> right) {
public boolean notEqual(LiteralExpression<?> left, LiteralExpression<?> right) {
return !equal(left, right);
}

@Override
public <T> T accept(ExpressionVisitor<T> v) {
return v.visit(this);
}
}
5 changes: 5 additions & 0 deletions src/main/java/org/dvare/expression/datatype/DateTimeType.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import org.dvare.annotations.OperationMapping;
import org.dvare.annotations.Type;
import org.dvare.expression.ExpressionVisitor;
import org.dvare.expression.literal.LiteralExpression;
import org.dvare.expression.operation.relational.*;

Expand Down Expand Up @@ -104,4 +105,8 @@ public boolean between(LiteralExpression<?> left, LiteralExpression<?> right) {
}


@Override
public <T> T accept(ExpressionVisitor<T> v) {
return v.visit(this);
}
}
5 changes: 5 additions & 0 deletions src/main/java/org/dvare/expression/datatype/DateType.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import org.dvare.annotations.OperationMapping;
import org.dvare.annotations.Type;
import org.dvare.expression.ExpressionVisitor;
import org.dvare.expression.literal.LiteralExpression;
import org.dvare.expression.operation.arithmetic.Subtract;
import org.dvare.expression.operation.relational.*;
Expand Down Expand Up @@ -135,4 +136,8 @@ public LocalDate sub(LiteralExpression<?> left, LiteralExpression<?> right) {

}

@Override
public <T> T accept(ExpressionVisitor<T> v) {
return v.visit(this);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

import org.dvare.annotations.OperationMapping;
import org.dvare.annotations.Type;
import org.dvare.expression.ExpressionVisitor;
import org.dvare.expression.literal.LiteralExpression;
import org.dvare.expression.operation.relational.Equals;
import org.dvare.expression.operation.relational.In;
Expand Down Expand Up @@ -80,4 +81,9 @@ private List<Float> buildFloatList(List<?> tempValues) {
}
return values;
}

@Override
public <T> T accept(ExpressionVisitor<T> v) {
return v.visit(this);
}
}
6 changes: 6 additions & 0 deletions src/main/java/org/dvare/expression/datatype/FloatType.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

import org.dvare.annotations.OperationMapping;
import org.dvare.annotations.Type;
import org.dvare.expression.ExpressionVisitor;
import org.dvare.expression.literal.LiteralExpression;
import org.dvare.expression.operation.aggregation.Maximum;
import org.dvare.expression.operation.aggregation.Minimum;
Expand Down Expand Up @@ -234,6 +235,11 @@ private List<Float> buildFloatList(List<Object> tempValues) {
}
return values;
}

@Override
public <T> T accept(ExpressionVisitor<T> v) {
return v.visit(this);
}
}


Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

import org.dvare.annotations.OperationMapping;
import org.dvare.annotations.Type;
import org.dvare.expression.ExpressionVisitor;
import org.dvare.expression.literal.LiteralExpression;
import org.dvare.expression.operation.relational.Equals;
import org.dvare.expression.operation.relational.In;
Expand Down Expand Up @@ -80,4 +81,9 @@ private List<Integer> buildIntegerList(List<?> tempValues) {
}
return values;
}

@Override
public <T> T accept(ExpressionVisitor<T> v) {
return v.visit(this);
}
}
Loading