Skip to content

Commit 7991247

Browse files
authored
Fixes wrong priority of mathematical operations (#55)
* fix: change priority of mathematical operations * test: add uvl model for mathematically correct expressions * refactor: atom to primaryExpression
1 parent bfecb77 commit 7991247

2 files changed

Lines changed: 54 additions & 12 deletions

File tree

tests/parsing/expressions.uvl

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
features
2+
A
3+
or
4+
B {Price 2, Fun 12}
5+
C {Price 7, Fun 6}
6+
constraints
7+
B.Fun + C.Fun - B.Price == 16
8+
B.Fun + (C.Fun - B.Price) == 16
9+
B.Fun + C.Fun * B.Price == 24
10+
B.Fun + (C.Fun * B.Price) == 24
11+
B.Fun + C.Fun / B.Price == 15
12+
B.Fun + (C.Fun / B.Price) == 15
13+
B.Fun - C.Fun + B.Price == 8
14+
B.Fun - (C.Fun + B.Price) == 4
15+
B.Fun - C.Fun * B.Price == 0
16+
B.Fun - (C.Fun * B.Price) == 0
17+
B.Fun - C.Fun / B.Price == 9
18+
B.Fun - (C.Fun / B.Price) == 9
19+
B.Fun * C.Fun / B.Price == 36
20+
B.Fun * (C.Fun / B.Price) == 36
21+
B.Fun * C.Fun - B.Price == 70
22+
B.Fun * (C.Fun - B.Price) == 48
23+
B.Fun * C.Fun + B.Price == 74
24+
B.Fun * (C.Fun + B.Price) == 96
25+
B.Fun / C.Fun * B.Price == 4
26+
B.Fun / (C.Fun * B.Price) == 1
27+
B.Fun / C.Fun + B.Price == 4
28+
B.Fun / (C.Fun + B.Price) == 1.5
29+
B.Fun / C.Fun - B.Price == 0
30+
B.Fun / (C.Fun - B.Price) == 3

uvl/UVLBase.g4

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -72,17 +72,29 @@ equation
7272
| expression NOT_EQUALS expression # NotEqualsEquation
7373
;
7474

75-
expression:
76-
FLOAT # FloatLiteralExpression
77-
| INTEGER # IntegerLiteralExpression
78-
| STRING # StringLiteralExpression
79-
| aggregateFunction # AggregateFunctionExpression
80-
| reference # LiteralExpression
81-
| OPEN_PAREN expression CLOSE_PAREN # BracketExpression
82-
| expression ADD expression # AddExpression
83-
| expression SUB expression # SubExpression
84-
| expression MUL expression # MulExpression
85-
| expression DIV expression # DivExpression
75+
expression
76+
: additiveExpression
77+
;
78+
79+
additiveExpression
80+
: additiveExpression ADD multiplicativeExpression # AddExpression
81+
| additiveExpression SUB multiplicativeExpression # SubExpression
82+
| multiplicativeExpression # MultiplicativeExpr
83+
;
84+
85+
multiplicativeExpression
86+
: multiplicativeExpression MUL primaryExpression # MulExpression
87+
| multiplicativeExpression DIV primaryExpression # DivExpression
88+
| primaryExpression # PrimaryExpressionExpression
89+
;
90+
91+
primaryExpression
92+
: FLOAT # FloatLiteralExpression
93+
| INTEGER # IntegerLiteralExpression
94+
| STRING # StringLiteralExpression
95+
| aggregateFunction # AggregateFunctionExpression
96+
| reference # LiteralExpression
97+
| OPEN_PAREN expression CLOSE_PAREN # BracketExpression
8698
;
8799

88100
aggregateFunction
@@ -160,4 +172,4 @@ SKIP_
160172

161173
fragment SPACES
162174
: [ \t]+
163-
;
175+
;

0 commit comments

Comments
 (0)