From 38f0b1fd9148b51e05545ce2049a68317b31a26f Mon Sep 17 00:00:00 2001 From: Miriam Gaus Date: Sun, 18 May 2025 09:53:02 +0200 Subject: [PATCH 1/3] fix: change priority of mathematical operations --- uvl/UVLBase.g4 | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/uvl/UVLBase.g4 b/uvl/UVLBase.g4 index 3e60abd..17875b0 100644 --- a/uvl/UVLBase.g4 +++ b/uvl/UVLBase.g4 @@ -72,17 +72,29 @@ equation | expression NOT_EQUALS expression # NotEqualsEquation ; -expression: - FLOAT # FloatLiteralExpression - | INTEGER # IntegerLiteralExpression - | STRING # StringLiteralExpression - | aggregateFunction # AggregateFunctionExpression - | reference # LiteralExpression - | OPEN_PAREN expression CLOSE_PAREN # BracketExpression - | expression ADD expression # AddExpression - | expression SUB expression # SubExpression - | expression MUL expression # MulExpression - | expression DIV expression # DivExpression +expression + : additiveExpression + ; + +additiveExpression + : additiveExpression ADD multiplicativeExpression # AddExpression + | additiveExpression SUB multiplicativeExpression # SubExpression + | multiplicativeExpression # MultiplicativeExpr + ; + +multiplicativeExpression + : multiplicativeExpression MUL atom # MulExpression + | multiplicativeExpression DIV atom # DivExpression + | atom # AtomExpression + ; + +atom + : FLOAT # FloatLiteralExpression + | INTEGER # IntegerLiteralExpression + | STRING # StringLiteralExpression + | aggregateFunction # AggregateFunctionExpression + | reference # LiteralExpression + | OPEN_PAREN expression CLOSE_PAREN # BracketExpression ; aggregateFunction From 92015db72b05fa5f720276d3beaff6fa4e0a2ebd Mon Sep 17 00:00:00 2001 From: Miriam Gaus Date: Sun, 18 May 2025 09:54:29 +0200 Subject: [PATCH 2/3] test: add uvl model for mathematically correct expressions --- tests/parsing/expressions.uvl | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 tests/parsing/expressions.uvl diff --git a/tests/parsing/expressions.uvl b/tests/parsing/expressions.uvl new file mode 100644 index 0000000..471ab17 --- /dev/null +++ b/tests/parsing/expressions.uvl @@ -0,0 +1,30 @@ +features + A + or + B {Price 2, Fun 12} + C {Price 7, Fun 6} +constraints + B.Fun + C.Fun - B.Price == 16 + B.Fun + (C.Fun - B.Price) == 16 + B.Fun + C.Fun * B.Price == 24 + B.Fun + (C.Fun * B.Price) == 24 + B.Fun + C.Fun / B.Price == 15 + B.Fun + (C.Fun / B.Price) == 15 + B.Fun - C.Fun + B.Price == 8 + B.Fun - (C.Fun + B.Price) == 4 + B.Fun - C.Fun * B.Price == 0 + B.Fun - (C.Fun * B.Price) == 0 + B.Fun - C.Fun / B.Price == 9 + B.Fun - (C.Fun / B.Price) == 9 + B.Fun * C.Fun / B.Price == 36 + B.Fun * (C.Fun / B.Price) == 36 + B.Fun * C.Fun - B.Price == 70 + B.Fun * (C.Fun - B.Price) == 48 + B.Fun * C.Fun + B.Price == 74 + B.Fun * (C.Fun + B.Price) == 96 + B.Fun / C.Fun * B.Price == 4 + B.Fun / (C.Fun * B.Price) == 1 + B.Fun / C.Fun + B.Price == 4 + B.Fun / (C.Fun + B.Price) == 1.5 + B.Fun / C.Fun - B.Price == 0 + B.Fun / (C.Fun - B.Price) == 3 From 7c4a14e1325c59d567c369fe140fbca2a91967a4 Mon Sep 17 00:00:00 2001 From: MiriamGaus <161295724+MiriamGaus@users.noreply.github.com> Date: Fri, 23 May 2025 14:19:29 +0200 Subject: [PATCH 3/3] refactor: atom to primaryExpression --- uvl/UVLBase.g4 | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/uvl/UVLBase.g4 b/uvl/UVLBase.g4 index 17875b0..19d783e 100644 --- a/uvl/UVLBase.g4 +++ b/uvl/UVLBase.g4 @@ -83,12 +83,12 @@ additiveExpression ; multiplicativeExpression - : multiplicativeExpression MUL atom # MulExpression - | multiplicativeExpression DIV atom # DivExpression - | atom # AtomExpression + : multiplicativeExpression MUL primaryExpression # MulExpression + | multiplicativeExpression DIV primaryExpression # DivExpression + | primaryExpression # PrimaryExpressionExpression ; -atom +primaryExpression : FLOAT # FloatLiteralExpression | INTEGER # IntegerLiteralExpression | STRING # StringLiteralExpression @@ -172,4 +172,4 @@ SKIP_ fragment SPACES : [ \t]+ - ; \ No newline at end of file + ;