From 31736c50e4ea37adbba3760c23734205a1c01be5 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Wed, 23 Oct 2024 13:33:01 +0200 Subject: [PATCH 01/92] New grammar --- src/libs/antares/antlr-interface/Expr.g4 | 66 +++++++++++++++++------- 1 file changed, 47 insertions(+), 19 deletions(-) diff --git a/src/libs/antares/antlr-interface/Expr.g4 b/src/libs/antares/antlr-interface/Expr.g4 index d0d1642497..9b21de7bbd 100644 --- a/src/libs/antares/antlr-interface/Expr.g4 +++ b/src/libs/antares/antlr-interface/Expr.g4 @@ -17,23 +17,55 @@ grammar Expr; /* To match the whole input */ fullexpr: expr EOF; -shift: TIME (op=('+' | '-') expr)?; - -expr: '-' expr # negation - | expr op=('/' | '*') expr # muldiv - | expr op=('+' | '-') expr # addsub - | expr COMPARISON expr # comparison - | IDENTIFIER # identifier - | IDENTIFIER '.' IDENTIFIER # portField - | NUMBER # number - | '(' expr ')' # expression - | IDENTIFIER '(' expr ')' # function - | IDENTIFIER '[' shift (',' shift)* ']' # timeShift - | IDENTIFIER '[' expr (',' expr )* ']' # timeIndex - | IDENTIFIER '[' shift1=shift '..' shift2=shift ']' # timeShiftRange - | IDENTIFIER '[' expr '..' expr ']' # timeRange +expr + : atom # unsignedAtom + | IDENTIFIER '.' IDENTIFIER # portField + | '-' expr # negation + | '(' expr ')' # expression + | expr op=('/' | '*') expr # muldiv + | expr op=('+' | '-') expr # addsub + | expr COMPARISON expr # comparison + | 'sum' '(' expr ')' # allTimeSum + | 'sum' '(' from=shift '..' to=shift ',' expr ')' # timeSum + | IDENTIFIER '(' expr ')' # function + | IDENTIFIER '[' shift ']' # timeShift + | IDENTIFIER '[' expr ']' # timeIndex ; +atom + : NUMBER # number + | IDENTIFIER # identifier + ; + +// a shift is required to be either "t" or "t + ..." or "t - ..." +// Note: simply defining it as "shift: TIME ('+' | '-') expr" won't work +// because the minus sign will not have the expected precedence: +// "t - d + 1" would be equivalent to "t - (d + 1)" +shift: TIME shift_expr?; + +// Because the shift MUST start with + or -, we need +// to differentiate it from generic "expr". +// A shift expression can only be extended to the right by a +// "right_expr" which cannot start with a + or -, +// unlike shift_expr itself. +// TODO: the grammar is still a little weird, because we +// allow more things in the "expr" parts of those +// shift expressions than on their left-most part +// (port fields, nested time shifts and so on). +shift_expr + : shift_expr op=('*' | '/') right_expr # shiftMuldiv + | shift_expr op=('+' | '-') right_expr # shiftAddsub + | op=('+' | '-') atom # signedAtom + | op=('+' | '-') '(' expr ')' # signedExpression + ; + +right_expr + : right_expr op=('/' | '*') right_expr # rightMuldiv + | '(' expr ')' # rightExpression + | atom # rightAtom + ; + + fragment DIGIT : [0-9] ; fragment CHAR : [a-zA-Z_]; fragment CHAR_OR_DIGIT : (CHAR | DIGIT); @@ -42,9 +74,5 @@ NUMBER : DIGIT+ ('.' DIGIT+)?; TIME : 't'; IDENTIFIER : CHAR CHAR_OR_DIGIT*; COMPARISON : ( '=' | '>=' | '<=' ); -ADDSUB : ( '+' | '-' ); -MULDIV : ( '*' | '/' ); -LBRACKET: '['; -RBRACKET: ']'; WS: (' ' | '\t' | '\r'| '\n') -> skip; From ed21c96c38f5d9931f3f4a0acb807e573532dafe Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Wed, 23 Oct 2024 14:28:53 +0200 Subject: [PATCH 02/92] Generated new C++ files --- src/libs/antares/antlr-interface/Expr.interp | 31 +- src/libs/antares/antlr-interface/Expr.tokens | 38 +- .../antlr-interface/ExprBaseVisitor.cpp | 2 +- .../antares/antlr-interface/ExprBaseVisitor.h | 64 +- .../antares/antlr-interface/ExprLexer.cpp | 292 ++-- src/libs/antares/antlr-interface/ExprLexer.h | 51 +- .../antares/antlr-interface/ExprLexer.interp | 33 +- .../antares/antlr-interface/ExprLexer.tokens | 38 +- .../antares/antlr-interface/ExprParser.cpp | 1351 +++++++++++------ src/libs/antares/antlr-interface/ExprParser.h | 294 ++-- .../antares/antlr-interface/ExprVisitor.cpp | 2 +- .../antares/antlr-interface/ExprVisitor.h | 48 +- 12 files changed, 1393 insertions(+), 851 deletions(-) diff --git a/src/libs/antares/antlr-interface/Expr.interp b/src/libs/antares/antlr-interface/Expr.interp index bed351938d..30fb71c08d 100644 --- a/src/libs/antares/antlr-interface/Expr.interp +++ b/src/libs/antares/antlr-interface/Expr.interp @@ -1,23 +1,22 @@ token literal names: null -'+' -'-' -'/' -'*' '.' +'-' '(' ')' -',' +'/' +'*' +'+' +'sum' '..' +',' +'[' +']' null 't' null null null -null -'[' -']' -null token symbolic names: null @@ -30,21 +29,23 @@ null null null null +null +null +null NUMBER TIME IDENTIFIER COMPARISON -ADDSUB -MULDIV -LBRACKET -RBRACKET WS rule names: fullexpr -shift expr +atom +shift +shift_expr +right_expr atn: -[4, 1, 18, 86, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 3, 1, 13, 8, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 37, 8, 2, 10, 2, 12, 2, 40, 9, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 49, 8, 2, 10, 2, 12, 2, 52, 9, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 70, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 81, 8, 2, 10, 2, 12, 2, 84, 9, 2, 1, 2, 0, 1, 4, 3, 0, 2, 4, 0, 2, 1, 0, 1, 2, 1, 0, 3, 4, 97, 0, 6, 1, 0, 0, 0, 2, 9, 1, 0, 0, 0, 4, 69, 1, 0, 0, 0, 6, 7, 3, 4, 2, 0, 7, 8, 5, 0, 0, 1, 8, 1, 1, 0, 0, 0, 9, 12, 5, 11, 0, 0, 10, 11, 7, 0, 0, 0, 11, 13, 3, 4, 2, 0, 12, 10, 1, 0, 0, 0, 12, 13, 1, 0, 0, 0, 13, 3, 1, 0, 0, 0, 14, 15, 6, 2, -1, 0, 15, 16, 5, 2, 0, 0, 16, 70, 3, 4, 2, 13, 17, 70, 5, 12, 0, 0, 18, 19, 5, 12, 0, 0, 19, 20, 5, 5, 0, 0, 20, 70, 5, 12, 0, 0, 21, 70, 5, 10, 0, 0, 22, 23, 5, 6, 0, 0, 23, 24, 3, 4, 2, 0, 24, 25, 5, 7, 0, 0, 25, 70, 1, 0, 0, 0, 26, 27, 5, 12, 0, 0, 27, 28, 5, 6, 0, 0, 28, 29, 3, 4, 2, 0, 29, 30, 5, 7, 0, 0, 30, 70, 1, 0, 0, 0, 31, 32, 5, 12, 0, 0, 32, 33, 5, 16, 0, 0, 33, 38, 3, 2, 1, 0, 34, 35, 5, 8, 0, 0, 35, 37, 3, 2, 1, 0, 36, 34, 1, 0, 0, 0, 37, 40, 1, 0, 0, 0, 38, 36, 1, 0, 0, 0, 38, 39, 1, 0, 0, 0, 39, 41, 1, 0, 0, 0, 40, 38, 1, 0, 0, 0, 41, 42, 5, 17, 0, 0, 42, 70, 1, 0, 0, 0, 43, 44, 5, 12, 0, 0, 44, 45, 5, 16, 0, 0, 45, 50, 3, 4, 2, 0, 46, 47, 5, 8, 0, 0, 47, 49, 3, 4, 2, 0, 48, 46, 1, 0, 0, 0, 49, 52, 1, 0, 0, 0, 50, 48, 1, 0, 0, 0, 50, 51, 1, 0, 0, 0, 51, 53, 1, 0, 0, 0, 52, 50, 1, 0, 0, 0, 53, 54, 5, 17, 0, 0, 54, 70, 1, 0, 0, 0, 55, 56, 5, 12, 0, 0, 56, 57, 5, 16, 0, 0, 57, 58, 3, 2, 1, 0, 58, 59, 5, 9, 0, 0, 59, 60, 3, 2, 1, 0, 60, 61, 5, 17, 0, 0, 61, 70, 1, 0, 0, 0, 62, 63, 5, 12, 0, 0, 63, 64, 5, 16, 0, 0, 64, 65, 3, 4, 2, 0, 65, 66, 5, 9, 0, 0, 66, 67, 3, 4, 2, 0, 67, 68, 5, 17, 0, 0, 68, 70, 1, 0, 0, 0, 69, 14, 1, 0, 0, 0, 69, 17, 1, 0, 0, 0, 69, 18, 1, 0, 0, 0, 69, 21, 1, 0, 0, 0, 69, 22, 1, 0, 0, 0, 69, 26, 1, 0, 0, 0, 69, 31, 1, 0, 0, 0, 69, 43, 1, 0, 0, 0, 69, 55, 1, 0, 0, 0, 69, 62, 1, 0, 0, 0, 70, 82, 1, 0, 0, 0, 71, 72, 10, 12, 0, 0, 72, 73, 7, 1, 0, 0, 73, 81, 3, 4, 2, 13, 74, 75, 10, 11, 0, 0, 75, 76, 7, 0, 0, 0, 76, 81, 3, 4, 2, 12, 77, 78, 10, 10, 0, 0, 78, 79, 5, 13, 0, 0, 79, 81, 3, 4, 2, 11, 80, 71, 1, 0, 0, 0, 80, 74, 1, 0, 0, 0, 80, 77, 1, 0, 0, 0, 81, 84, 1, 0, 0, 0, 82, 80, 1, 0, 0, 0, 82, 83, 1, 0, 0, 0, 83, 5, 1, 0, 0, 0, 84, 82, 1, 0, 0, 0, 6, 12, 38, 50, 69, 80, 82] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 19, 119, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 58, 10, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 3, 69, 10, 3, 12, 3, 14, 3, 72, 11, 3, 3, 4, 3, 4, 5, 4, 76, 10, 4, 3, 5, 3, 5, 5, 5, 80, 10, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 90, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 98, 10, 6, 12, 6, 14, 6, 101, 11, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 109, 10, 7, 3, 7, 3, 7, 3, 7, 7, 7, 114, 10, 7, 12, 7, 14, 7, 117, 11, 7, 3, 7, 2, 5, 4, 10, 12, 8, 2, 4, 6, 8, 10, 12, 2, 4, 3, 2, 7, 8, 4, 2, 4, 4, 9, 9, 2, 130, 2, 14, 3, 2, 2, 2, 4, 57, 3, 2, 2, 2, 6, 75, 3, 2, 2, 2, 8, 77, 3, 2, 2, 2, 10, 89, 3, 2, 2, 2, 12, 108, 3, 2, 2, 2, 14, 15, 5, 4, 3, 2, 15, 16, 7, 2, 2, 3, 16, 3, 3, 2, 2, 2, 17, 18, 8, 3, 1, 2, 18, 58, 5, 6, 4, 2, 19, 20, 7, 17, 2, 2, 20, 21, 7, 3, 2, 2, 21, 58, 7, 17, 2, 2, 22, 23, 7, 4, 2, 2, 23, 58, 5, 4, 3, 12, 24, 25, 7, 5, 2, 2, 25, 26, 5, 4, 3, 2, 26, 27, 7, 6, 2, 2, 27, 58, 3, 2, 2, 2, 28, 29, 7, 10, 2, 2, 29, 30, 7, 5, 2, 2, 30, 31, 5, 4, 3, 2, 31, 32, 7, 6, 2, 2, 32, 58, 3, 2, 2, 2, 33, 34, 7, 10, 2, 2, 34, 35, 7, 5, 2, 2, 35, 36, 5, 8, 5, 2, 36, 37, 7, 11, 2, 2, 37, 38, 5, 8, 5, 2, 38, 39, 7, 12, 2, 2, 39, 40, 5, 4, 3, 2, 40, 41, 7, 6, 2, 2, 41, 58, 3, 2, 2, 2, 42, 43, 7, 17, 2, 2, 43, 44, 7, 5, 2, 2, 44, 45, 5, 4, 3, 2, 45, 46, 7, 6, 2, 2, 46, 58, 3, 2, 2, 2, 47, 48, 7, 17, 2, 2, 48, 49, 7, 13, 2, 2, 49, 50, 5, 8, 5, 2, 50, 51, 7, 14, 2, 2, 51, 58, 3, 2, 2, 2, 52, 53, 7, 17, 2, 2, 53, 54, 7, 13, 2, 2, 54, 55, 5, 4, 3, 2, 55, 56, 7, 14, 2, 2, 56, 58, 3, 2, 2, 2, 57, 17, 3, 2, 2, 2, 57, 19, 3, 2, 2, 2, 57, 22, 3, 2, 2, 2, 57, 24, 3, 2, 2, 2, 57, 28, 3, 2, 2, 2, 57, 33, 3, 2, 2, 2, 57, 42, 3, 2, 2, 2, 57, 47, 3, 2, 2, 2, 57, 52, 3, 2, 2, 2, 58, 70, 3, 2, 2, 2, 59, 60, 12, 10, 2, 2, 60, 61, 9, 2, 2, 2, 61, 69, 5, 4, 3, 11, 62, 63, 12, 9, 2, 2, 63, 64, 9, 3, 2, 2, 64, 69, 5, 4, 3, 10, 65, 66, 12, 8, 2, 2, 66, 67, 7, 18, 2, 2, 67, 69, 5, 4, 3, 9, 68, 59, 3, 2, 2, 2, 68, 62, 3, 2, 2, 2, 68, 65, 3, 2, 2, 2, 69, 72, 3, 2, 2, 2, 70, 68, 3, 2, 2, 2, 70, 71, 3, 2, 2, 2, 71, 5, 3, 2, 2, 2, 72, 70, 3, 2, 2, 2, 73, 76, 7, 15, 2, 2, 74, 76, 7, 17, 2, 2, 75, 73, 3, 2, 2, 2, 75, 74, 3, 2, 2, 2, 76, 7, 3, 2, 2, 2, 77, 79, 7, 16, 2, 2, 78, 80, 5, 10, 6, 2, 79, 78, 3, 2, 2, 2, 79, 80, 3, 2, 2, 2, 80, 9, 3, 2, 2, 2, 81, 82, 8, 6, 1, 2, 82, 83, 9, 3, 2, 2, 83, 90, 5, 6, 4, 2, 84, 85, 9, 3, 2, 2, 85, 86, 7, 5, 2, 2, 86, 87, 5, 4, 3, 2, 87, 88, 7, 6, 2, 2, 88, 90, 3, 2, 2, 2, 89, 81, 3, 2, 2, 2, 89, 84, 3, 2, 2, 2, 90, 99, 3, 2, 2, 2, 91, 92, 12, 6, 2, 2, 92, 93, 9, 2, 2, 2, 93, 98, 5, 12, 7, 2, 94, 95, 12, 5, 2, 2, 95, 96, 9, 3, 2, 2, 96, 98, 5, 12, 7, 2, 97, 91, 3, 2, 2, 2, 97, 94, 3, 2, 2, 2, 98, 101, 3, 2, 2, 2, 99, 97, 3, 2, 2, 2, 99, 100, 3, 2, 2, 2, 100, 11, 3, 2, 2, 2, 101, 99, 3, 2, 2, 2, 102, 103, 8, 7, 1, 2, 103, 104, 7, 5, 2, 2, 104, 105, 5, 4, 3, 2, 105, 106, 7, 6, 2, 2, 106, 109, 3, 2, 2, 2, 107, 109, 5, 6, 4, 2, 108, 102, 3, 2, 2, 2, 108, 107, 3, 2, 2, 2, 109, 115, 3, 2, 2, 2, 110, 111, 12, 5, 2, 2, 111, 112, 9, 2, 2, 2, 112, 114, 5, 12, 7, 6, 113, 110, 3, 2, 2, 2, 114, 117, 3, 2, 2, 2, 115, 113, 3, 2, 2, 2, 115, 116, 3, 2, 2, 2, 116, 13, 3, 2, 2, 2, 117, 115, 3, 2, 2, 2, 12, 57, 68, 70, 75, 79, 89, 97, 99, 108, 115] \ No newline at end of file diff --git a/src/libs/antares/antlr-interface/Expr.tokens b/src/libs/antares/antlr-interface/Expr.tokens index 29d96df5f3..868577445e 100644 --- a/src/libs/antares/antlr-interface/Expr.tokens +++ b/src/libs/antares/antlr-interface/Expr.tokens @@ -7,24 +7,24 @@ T__5=6 T__6=7 T__7=8 T__8=9 -NUMBER=10 -TIME=11 -IDENTIFIER=12 -COMPARISON=13 -ADDSUB=14 -MULDIV=15 -LBRACKET=16 -RBRACKET=17 -WS=18 -'+'=1 +T__9=10 +T__10=11 +T__11=12 +NUMBER=13 +TIME=14 +IDENTIFIER=15 +COMPARISON=16 +WS=17 +'.'=1 '-'=2 -'/'=3 -'*'=4 -'.'=5 -'('=6 -')'=7 -','=8 +'('=3 +')'=4 +'/'=5 +'*'=6 +'+'=7 +'sum'=8 '..'=9 -'t'=11 -'['=16 -']'=17 +','=10 +'['=11 +']'=12 +'t'=14 diff --git a/src/libs/antares/antlr-interface/ExprBaseVisitor.cpp b/src/libs/antares/antlr-interface/ExprBaseVisitor.cpp index 42d6fef5d3..997ca28ff4 100644 --- a/src/libs/antares/antlr-interface/ExprBaseVisitor.cpp +++ b/src/libs/antares/antlr-interface/ExprBaseVisitor.cpp @@ -1,5 +1,5 @@ -// Generated from Expr.g4 by ANTLR 4.13.1 +// Generated from Expr.g4 by ANTLR 4.7.2 #include "ExprBaseVisitor.h" diff --git a/src/libs/antares/antlr-interface/ExprBaseVisitor.h b/src/libs/antares/antlr-interface/ExprBaseVisitor.h index a8af3c573f..2090885903 100644 --- a/src/libs/antares/antlr-interface/ExprBaseVisitor.h +++ b/src/libs/antares/antlr-interface/ExprBaseVisitor.h @@ -1,5 +1,5 @@ -// Generated from Expr.g4 by ANTLR 4.13.1 +// Generated from Expr.g4 by ANTLR 4.7.2 #pragma once @@ -15,63 +15,95 @@ class ExprBaseVisitor : public ExprVisitor { public: - virtual std::any visitFullexpr(ExprParser::FullexprContext *ctx) override { + virtual antlrcpp::Any visitFullexpr(ExprParser::FullexprContext *ctx) override { return visitChildren(ctx); } - virtual std::any visitShift(ExprParser::ShiftContext *ctx) override { + virtual antlrcpp::Any visitTimeSum(ExprParser::TimeSumContext *ctx) override { return visitChildren(ctx); } - virtual std::any visitIdentifier(ExprParser::IdentifierContext *ctx) override { + virtual antlrcpp::Any visitNegation(ExprParser::NegationContext *ctx) override { return visitChildren(ctx); } - virtual std::any visitNegation(ExprParser::NegationContext *ctx) override { + virtual antlrcpp::Any visitUnsignedAtom(ExprParser::UnsignedAtomContext *ctx) override { return visitChildren(ctx); } - virtual std::any visitExpression(ExprParser::ExpressionContext *ctx) override { + virtual antlrcpp::Any visitExpression(ExprParser::ExpressionContext *ctx) override { return visitChildren(ctx); } - virtual std::any visitComparison(ExprParser::ComparisonContext *ctx) override { + virtual antlrcpp::Any visitTimeIndex(ExprParser::TimeIndexContext *ctx) override { return visitChildren(ctx); } - virtual std::any visitAddsub(ExprParser::AddsubContext *ctx) override { + virtual antlrcpp::Any visitComparison(ExprParser::ComparisonContext *ctx) override { return visitChildren(ctx); } - virtual std::any visitPortField(ExprParser::PortFieldContext *ctx) override { + virtual antlrcpp::Any visitAllTimeSum(ExprParser::AllTimeSumContext *ctx) override { return visitChildren(ctx); } - virtual std::any visitMuldiv(ExprParser::MuldivContext *ctx) override { + virtual antlrcpp::Any visitTimeShift(ExprParser::TimeShiftContext *ctx) override { return visitChildren(ctx); } - virtual std::any visitNumber(ExprParser::NumberContext *ctx) override { + virtual antlrcpp::Any visitFunction(ExprParser::FunctionContext *ctx) override { return visitChildren(ctx); } - virtual std::any visitTimeIndex(ExprParser::TimeIndexContext *ctx) override { + virtual antlrcpp::Any visitAddsub(ExprParser::AddsubContext *ctx) override { return visitChildren(ctx); } - virtual std::any visitTimeShift(ExprParser::TimeShiftContext *ctx) override { + virtual antlrcpp::Any visitPortField(ExprParser::PortFieldContext *ctx) override { return visitChildren(ctx); } - virtual std::any visitFunction(ExprParser::FunctionContext *ctx) override { + virtual antlrcpp::Any visitMuldiv(ExprParser::MuldivContext *ctx) override { return visitChildren(ctx); } - virtual std::any visitTimeShiftRange(ExprParser::TimeShiftRangeContext *ctx) override { + virtual antlrcpp::Any visitNumber(ExprParser::NumberContext *ctx) override { return visitChildren(ctx); } - virtual std::any visitTimeRange(ExprParser::TimeRangeContext *ctx) override { + virtual antlrcpp::Any visitIdentifier(ExprParser::IdentifierContext *ctx) override { + return visitChildren(ctx); + } + + virtual antlrcpp::Any visitShift(ExprParser::ShiftContext *ctx) override { + return visitChildren(ctx); + } + + virtual antlrcpp::Any visitSignedAtom(ExprParser::SignedAtomContext *ctx) override { + return visitChildren(ctx); + } + + virtual antlrcpp::Any visitSignedExpression(ExprParser::SignedExpressionContext *ctx) override { + return visitChildren(ctx); + } + + virtual antlrcpp::Any visitShiftMuldiv(ExprParser::ShiftMuldivContext *ctx) override { + return visitChildren(ctx); + } + + virtual antlrcpp::Any visitShiftAddsub(ExprParser::ShiftAddsubContext *ctx) override { + return visitChildren(ctx); + } + + virtual antlrcpp::Any visitRightExpression(ExprParser::RightExpressionContext *ctx) override { + return visitChildren(ctx); + } + + virtual antlrcpp::Any visitRightMuldiv(ExprParser::RightMuldivContext *ctx) override { + return visitChildren(ctx); + } + + virtual antlrcpp::Any visitRightAtom(ExprParser::RightAtomContext *ctx) override { return visitChildren(ctx); } diff --git a/src/libs/antares/antlr-interface/ExprLexer.cpp b/src/libs/antares/antlr-interface/ExprLexer.cpp index a645fcddd0..a94bd776f0 100644 --- a/src/libs/antares/antlr-interface/ExprLexer.cpp +++ b/src/libs/antares/antlr-interface/ExprLexer.cpp @@ -1,5 +1,5 @@ -// Generated from Expr.g4 by ANTLR 4.13.1 +// Generated from Expr.g4 by ANTLR 4.7.2 #include "ExprLexer.h" @@ -8,129 +8,8 @@ using namespace antlr4; - -using namespace antlr4; - -namespace { - -struct ExprLexerStaticData final { - ExprLexerStaticData(std::vector ruleNames, - std::vector channelNames, - std::vector modeNames, - std::vector literalNames, - std::vector symbolicNames) - : ruleNames(std::move(ruleNames)), channelNames(std::move(channelNames)), - modeNames(std::move(modeNames)), literalNames(std::move(literalNames)), - symbolicNames(std::move(symbolicNames)), - vocabulary(this->literalNames, this->symbolicNames) {} - - ExprLexerStaticData(const ExprLexerStaticData&) = delete; - ExprLexerStaticData(ExprLexerStaticData&&) = delete; - ExprLexerStaticData& operator=(const ExprLexerStaticData&) = delete; - ExprLexerStaticData& operator=(ExprLexerStaticData&&) = delete; - - std::vector decisionToDFA; - antlr4::atn::PredictionContextCache sharedContextCache; - const std::vector ruleNames; - const std::vector channelNames; - const std::vector modeNames; - const std::vector literalNames; - const std::vector symbolicNames; - const antlr4::dfa::Vocabulary vocabulary; - antlr4::atn::SerializedATNView serializedATN; - std::unique_ptr atn; -}; - -::antlr4::internal::OnceFlag exprlexerLexerOnceFlag; -#if ANTLR4_USE_THREAD_LOCAL_CACHE -static thread_local -#endif -ExprLexerStaticData *exprlexerLexerStaticData = nullptr; - -void exprlexerLexerInitialize() { -#if ANTLR4_USE_THREAD_LOCAL_CACHE - if (exprlexerLexerStaticData != nullptr) { - return; - } -#else - assert(exprlexerLexerStaticData == nullptr); -#endif - auto staticData = std::make_unique( - std::vector{ - "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "T__8", - "DIGIT", "CHAR", "CHAR_OR_DIGIT", "NUMBER", "TIME", "IDENTIFIER", - "COMPARISON", "ADDSUB", "MULDIV", "LBRACKET", "RBRACKET", "WS" - }, - std::vector{ - "DEFAULT_TOKEN_CHANNEL", "HIDDEN" - }, - std::vector{ - "DEFAULT_MODE" - }, - std::vector{ - "", "'+'", "'-'", "'/'", "'*'", "'.'", "'('", "')'", "','", "'..'", - "", "'t'", "", "", "", "", "'['", "']'" - }, - std::vector{ - "", "", "", "", "", "", "", "", "", "", "NUMBER", "TIME", "IDENTIFIER", - "COMPARISON", "ADDSUB", "MULDIV", "LBRACKET", "RBRACKET", "WS" - } - ); - static const int32_t serializedATNSegment[] = { - 4,0,18,111,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7, - 6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,13,2,14, - 7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2,20,7,20,1,0, - 1,0,1,1,1,1,1,2,1,2,1,3,1,3,1,4,1,4,1,5,1,5,1,6,1,6,1,7,1,7,1,8,1,8,1, - 8,1,9,1,9,1,10,1,10,1,11,1,11,3,11,69,8,11,1,12,4,12,72,8,12,11,12,12, - 12,73,1,12,1,12,4,12,78,8,12,11,12,12,12,79,3,12,82,8,12,1,13,1,13,1, - 14,1,14,5,14,88,8,14,10,14,12,14,91,9,14,1,15,1,15,1,15,1,15,1,15,3,15, - 98,8,15,1,16,1,16,1,17,1,17,1,18,1,18,1,19,1,19,1,20,1,20,1,20,1,20,0, - 0,21,1,1,3,2,5,3,7,4,9,5,11,6,13,7,15,8,17,9,19,0,21,0,23,0,25,10,27, - 11,29,12,31,13,33,14,35,15,37,16,39,17,41,18,1,0,5,1,0,48,57,3,0,65,90, - 95,95,97,122,2,0,43,43,45,45,2,0,42,42,47,47,3,0,9,10,13,13,32,32,114, - 0,1,1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0,9,1,0,0,0,0,11,1,0, - 0,0,0,13,1,0,0,0,0,15,1,0,0,0,0,17,1,0,0,0,0,25,1,0,0,0,0,27,1,0,0,0, - 0,29,1,0,0,0,0,31,1,0,0,0,0,33,1,0,0,0,0,35,1,0,0,0,0,37,1,0,0,0,0,39, - 1,0,0,0,0,41,1,0,0,0,1,43,1,0,0,0,3,45,1,0,0,0,5,47,1,0,0,0,7,49,1,0, - 0,0,9,51,1,0,0,0,11,53,1,0,0,0,13,55,1,0,0,0,15,57,1,0,0,0,17,59,1,0, - 0,0,19,62,1,0,0,0,21,64,1,0,0,0,23,68,1,0,0,0,25,71,1,0,0,0,27,83,1,0, - 0,0,29,85,1,0,0,0,31,97,1,0,0,0,33,99,1,0,0,0,35,101,1,0,0,0,37,103,1, - 0,0,0,39,105,1,0,0,0,41,107,1,0,0,0,43,44,5,43,0,0,44,2,1,0,0,0,45,46, - 5,45,0,0,46,4,1,0,0,0,47,48,5,47,0,0,48,6,1,0,0,0,49,50,5,42,0,0,50,8, - 1,0,0,0,51,52,5,46,0,0,52,10,1,0,0,0,53,54,5,40,0,0,54,12,1,0,0,0,55, - 56,5,41,0,0,56,14,1,0,0,0,57,58,5,44,0,0,58,16,1,0,0,0,59,60,5,46,0,0, - 60,61,5,46,0,0,61,18,1,0,0,0,62,63,7,0,0,0,63,20,1,0,0,0,64,65,7,1,0, - 0,65,22,1,0,0,0,66,69,3,21,10,0,67,69,3,19,9,0,68,66,1,0,0,0,68,67,1, - 0,0,0,69,24,1,0,0,0,70,72,3,19,9,0,71,70,1,0,0,0,72,73,1,0,0,0,73,71, - 1,0,0,0,73,74,1,0,0,0,74,81,1,0,0,0,75,77,5,46,0,0,76,78,3,19,9,0,77, - 76,1,0,0,0,78,79,1,0,0,0,79,77,1,0,0,0,79,80,1,0,0,0,80,82,1,0,0,0,81, - 75,1,0,0,0,81,82,1,0,0,0,82,26,1,0,0,0,83,84,5,116,0,0,84,28,1,0,0,0, - 85,89,3,21,10,0,86,88,3,23,11,0,87,86,1,0,0,0,88,91,1,0,0,0,89,87,1,0, - 0,0,89,90,1,0,0,0,90,30,1,0,0,0,91,89,1,0,0,0,92,98,5,61,0,0,93,94,5, - 62,0,0,94,98,5,61,0,0,95,96,5,60,0,0,96,98,5,61,0,0,97,92,1,0,0,0,97, - 93,1,0,0,0,97,95,1,0,0,0,98,32,1,0,0,0,99,100,7,2,0,0,100,34,1,0,0,0, - 101,102,7,3,0,0,102,36,1,0,0,0,103,104,5,91,0,0,104,38,1,0,0,0,105,106, - 5,93,0,0,106,40,1,0,0,0,107,108,7,4,0,0,108,109,1,0,0,0,109,110,6,20, - 0,0,110,42,1,0,0,0,7,0,68,73,79,81,89,97,1,6,0,0 - }; - staticData->serializedATN = antlr4::atn::SerializedATNView(serializedATNSegment, sizeof(serializedATNSegment) / sizeof(serializedATNSegment[0])); - - antlr4::atn::ATNDeserializer deserializer; - staticData->atn = deserializer.deserialize(staticData->serializedATN); - - const size_t count = staticData->atn->getNumberOfDecisions(); - staticData->decisionToDFA.reserve(count); - for (size_t i = 0; i < count; i++) { - staticData->decisionToDFA.emplace_back(staticData->atn->getDecisionState(i), i); - } - exprlexerLexerStaticData = staticData.release(); -} - -} - ExprLexer::ExprLexer(CharStream *input) : Lexer(input) { - ExprLexer::initialize(); - _interpreter = new atn::LexerATNSimulator(this, *exprlexerLexerStaticData->atn, exprlexerLexerStaticData->decisionToDFA, exprlexerLexerStaticData->sharedContextCache); + _interpreter = new atn::LexerATNSimulator(this, _atn, _decisionToDFA, _sharedContextCache); } ExprLexer::~ExprLexer() { @@ -142,36 +21,175 @@ std::string ExprLexer::getGrammarFileName() const { } const std::vector& ExprLexer::getRuleNames() const { - return exprlexerLexerStaticData->ruleNames; + return _ruleNames; } const std::vector& ExprLexer::getChannelNames() const { - return exprlexerLexerStaticData->channelNames; + return _channelNames; } const std::vector& ExprLexer::getModeNames() const { - return exprlexerLexerStaticData->modeNames; + return _modeNames; +} + +const std::vector& ExprLexer::getTokenNames() const { + return _tokenNames; } -const dfa::Vocabulary& ExprLexer::getVocabulary() const { - return exprlexerLexerStaticData->vocabulary; +dfa::Vocabulary& ExprLexer::getVocabulary() const { + return _vocabulary; } -antlr4::atn::SerializedATNView ExprLexer::getSerializedATN() const { - return exprlexerLexerStaticData->serializedATN; +const std::vector ExprLexer::getSerializedATN() const { + return _serializedATN; } const atn::ATN& ExprLexer::getATN() const { - return *exprlexerLexerStaticData->atn; + return _atn; } -void ExprLexer::initialize() { -#if ANTLR4_USE_THREAD_LOCAL_CACHE - exprlexerLexerInitialize(); -#else - ::antlr4::internal::call_once(exprlexerLexerOnceFlag, exprlexerLexerInitialize); -#endif +// Static vars and initialization. +std::vector ExprLexer::_decisionToDFA; +atn::PredictionContextCache ExprLexer::_sharedContextCache; + +// We own the ATN which in turn owns the ATN states. +atn::ATN ExprLexer::_atn; +std::vector ExprLexer::_serializedATN; + +std::vector ExprLexer::_ruleNames = { + u8"T__0", u8"T__1", u8"T__2", u8"T__3", u8"T__4", u8"T__5", u8"T__6", + u8"T__7", u8"T__8", u8"T__9", u8"T__10", u8"T__11", u8"DIGIT", u8"CHAR", + u8"CHAR_OR_DIGIT", u8"NUMBER", u8"TIME", u8"IDENTIFIER", u8"COMPARISON", + u8"WS" +}; + +std::vector ExprLexer::_channelNames = { + "DEFAULT_TOKEN_CHANNEL", "HIDDEN" +}; + +std::vector ExprLexer::_modeNames = { + u8"DEFAULT_MODE" +}; + +std::vector ExprLexer::_literalNames = { + "", u8"'.'", u8"'-'", u8"'('", u8"')'", u8"'/'", u8"'*'", u8"'+'", u8"'sum'", + u8"'..'", u8"','", u8"'['", u8"']'", "", u8"'t'" +}; + +std::vector ExprLexer::_symbolicNames = { + "", "", "", "", "", "", "", "", "", "", "", "", "", u8"NUMBER", u8"TIME", + u8"IDENTIFIER", u8"COMPARISON", u8"WS" +}; + +dfa::Vocabulary ExprLexer::_vocabulary(_literalNames, _symbolicNames); + +std::vector ExprLexer::_tokenNames; + +ExprLexer::Initializer::Initializer() { + // This code could be in a static initializer lambda, but VS doesn't allow access to private class members from there. + for (size_t i = 0; i < _symbolicNames.size(); ++i) { + std::string name = _vocabulary.getLiteralName(i); + if (name.empty()) { + name = _vocabulary.getSymbolicName(i); + } + + if (name.empty()) { + _tokenNames.push_back(""); + } else { + _tokenNames.push_back(name); + } + } + + _serializedATN = { + 0x3, 0x608b, 0xa72a, 0x8133, 0xb9ed, 0x417c, 0x3be7, 0x7786, 0x5964, + 0x2, 0x13, 0x6f, 0x8, 0x1, 0x4, 0x2, 0x9, 0x2, 0x4, 0x3, 0x9, 0x3, 0x4, + 0x4, 0x9, 0x4, 0x4, 0x5, 0x9, 0x5, 0x4, 0x6, 0x9, 0x6, 0x4, 0x7, 0x9, + 0x7, 0x4, 0x8, 0x9, 0x8, 0x4, 0x9, 0x9, 0x9, 0x4, 0xa, 0x9, 0xa, 0x4, + 0xb, 0x9, 0xb, 0x4, 0xc, 0x9, 0xc, 0x4, 0xd, 0x9, 0xd, 0x4, 0xe, 0x9, + 0xe, 0x4, 0xf, 0x9, 0xf, 0x4, 0x10, 0x9, 0x10, 0x4, 0x11, 0x9, 0x11, + 0x4, 0x12, 0x9, 0x12, 0x4, 0x13, 0x9, 0x13, 0x4, 0x14, 0x9, 0x14, 0x4, + 0x15, 0x9, 0x15, 0x3, 0x2, 0x3, 0x2, 0x3, 0x3, 0x3, 0x3, 0x3, 0x4, 0x3, + 0x4, 0x3, 0x5, 0x3, 0x5, 0x3, 0x6, 0x3, 0x6, 0x3, 0x7, 0x3, 0x7, 0x3, + 0x8, 0x3, 0x8, 0x3, 0x9, 0x3, 0x9, 0x3, 0x9, 0x3, 0x9, 0x3, 0xa, 0x3, + 0xa, 0x3, 0xa, 0x3, 0xb, 0x3, 0xb, 0x3, 0xc, 0x3, 0xc, 0x3, 0xd, 0x3, + 0xd, 0x3, 0xe, 0x3, 0xe, 0x3, 0xf, 0x3, 0xf, 0x3, 0x10, 0x3, 0x10, 0x5, + 0x10, 0x4d, 0xa, 0x10, 0x3, 0x11, 0x6, 0x11, 0x50, 0xa, 0x11, 0xd, 0x11, + 0xe, 0x11, 0x51, 0x3, 0x11, 0x3, 0x11, 0x6, 0x11, 0x56, 0xa, 0x11, 0xd, + 0x11, 0xe, 0x11, 0x57, 0x5, 0x11, 0x5a, 0xa, 0x11, 0x3, 0x12, 0x3, 0x12, + 0x3, 0x13, 0x3, 0x13, 0x7, 0x13, 0x60, 0xa, 0x13, 0xc, 0x13, 0xe, 0x13, + 0x63, 0xb, 0x13, 0x3, 0x14, 0x3, 0x14, 0x3, 0x14, 0x3, 0x14, 0x3, 0x14, + 0x5, 0x14, 0x6a, 0xa, 0x14, 0x3, 0x15, 0x3, 0x15, 0x3, 0x15, 0x3, 0x15, + 0x2, 0x2, 0x16, 0x3, 0x3, 0x5, 0x4, 0x7, 0x5, 0x9, 0x6, 0xb, 0x7, 0xd, + 0x8, 0xf, 0x9, 0x11, 0xa, 0x13, 0xb, 0x15, 0xc, 0x17, 0xd, 0x19, 0xe, + 0x1b, 0x2, 0x1d, 0x2, 0x1f, 0x2, 0x21, 0xf, 0x23, 0x10, 0x25, 0x11, + 0x27, 0x12, 0x29, 0x13, 0x3, 0x2, 0x5, 0x3, 0x2, 0x32, 0x3b, 0x5, 0x2, + 0x43, 0x5c, 0x61, 0x61, 0x63, 0x7c, 0x5, 0x2, 0xb, 0xc, 0xf, 0xf, 0x22, + 0x22, 0x2, 0x72, 0x2, 0x3, 0x3, 0x2, 0x2, 0x2, 0x2, 0x5, 0x3, 0x2, 0x2, + 0x2, 0x2, 0x7, 0x3, 0x2, 0x2, 0x2, 0x2, 0x9, 0x3, 0x2, 0x2, 0x2, 0x2, + 0xb, 0x3, 0x2, 0x2, 0x2, 0x2, 0xd, 0x3, 0x2, 0x2, 0x2, 0x2, 0xf, 0x3, + 0x2, 0x2, 0x2, 0x2, 0x11, 0x3, 0x2, 0x2, 0x2, 0x2, 0x13, 0x3, 0x2, 0x2, + 0x2, 0x2, 0x15, 0x3, 0x2, 0x2, 0x2, 0x2, 0x17, 0x3, 0x2, 0x2, 0x2, 0x2, + 0x19, 0x3, 0x2, 0x2, 0x2, 0x2, 0x21, 0x3, 0x2, 0x2, 0x2, 0x2, 0x23, + 0x3, 0x2, 0x2, 0x2, 0x2, 0x25, 0x3, 0x2, 0x2, 0x2, 0x2, 0x27, 0x3, 0x2, + 0x2, 0x2, 0x2, 0x29, 0x3, 0x2, 0x2, 0x2, 0x3, 0x2b, 0x3, 0x2, 0x2, 0x2, + 0x5, 0x2d, 0x3, 0x2, 0x2, 0x2, 0x7, 0x2f, 0x3, 0x2, 0x2, 0x2, 0x9, 0x31, + 0x3, 0x2, 0x2, 0x2, 0xb, 0x33, 0x3, 0x2, 0x2, 0x2, 0xd, 0x35, 0x3, 0x2, + 0x2, 0x2, 0xf, 0x37, 0x3, 0x2, 0x2, 0x2, 0x11, 0x39, 0x3, 0x2, 0x2, + 0x2, 0x13, 0x3d, 0x3, 0x2, 0x2, 0x2, 0x15, 0x40, 0x3, 0x2, 0x2, 0x2, + 0x17, 0x42, 0x3, 0x2, 0x2, 0x2, 0x19, 0x44, 0x3, 0x2, 0x2, 0x2, 0x1b, + 0x46, 0x3, 0x2, 0x2, 0x2, 0x1d, 0x48, 0x3, 0x2, 0x2, 0x2, 0x1f, 0x4c, + 0x3, 0x2, 0x2, 0x2, 0x21, 0x4f, 0x3, 0x2, 0x2, 0x2, 0x23, 0x5b, 0x3, + 0x2, 0x2, 0x2, 0x25, 0x5d, 0x3, 0x2, 0x2, 0x2, 0x27, 0x69, 0x3, 0x2, + 0x2, 0x2, 0x29, 0x6b, 0x3, 0x2, 0x2, 0x2, 0x2b, 0x2c, 0x7, 0x30, 0x2, + 0x2, 0x2c, 0x4, 0x3, 0x2, 0x2, 0x2, 0x2d, 0x2e, 0x7, 0x2f, 0x2, 0x2, + 0x2e, 0x6, 0x3, 0x2, 0x2, 0x2, 0x2f, 0x30, 0x7, 0x2a, 0x2, 0x2, 0x30, + 0x8, 0x3, 0x2, 0x2, 0x2, 0x31, 0x32, 0x7, 0x2b, 0x2, 0x2, 0x32, 0xa, + 0x3, 0x2, 0x2, 0x2, 0x33, 0x34, 0x7, 0x31, 0x2, 0x2, 0x34, 0xc, 0x3, + 0x2, 0x2, 0x2, 0x35, 0x36, 0x7, 0x2c, 0x2, 0x2, 0x36, 0xe, 0x3, 0x2, + 0x2, 0x2, 0x37, 0x38, 0x7, 0x2d, 0x2, 0x2, 0x38, 0x10, 0x3, 0x2, 0x2, + 0x2, 0x39, 0x3a, 0x7, 0x75, 0x2, 0x2, 0x3a, 0x3b, 0x7, 0x77, 0x2, 0x2, + 0x3b, 0x3c, 0x7, 0x6f, 0x2, 0x2, 0x3c, 0x12, 0x3, 0x2, 0x2, 0x2, 0x3d, + 0x3e, 0x7, 0x30, 0x2, 0x2, 0x3e, 0x3f, 0x7, 0x30, 0x2, 0x2, 0x3f, 0x14, + 0x3, 0x2, 0x2, 0x2, 0x40, 0x41, 0x7, 0x2e, 0x2, 0x2, 0x41, 0x16, 0x3, + 0x2, 0x2, 0x2, 0x42, 0x43, 0x7, 0x5d, 0x2, 0x2, 0x43, 0x18, 0x3, 0x2, + 0x2, 0x2, 0x44, 0x45, 0x7, 0x5f, 0x2, 0x2, 0x45, 0x1a, 0x3, 0x2, 0x2, + 0x2, 0x46, 0x47, 0x9, 0x2, 0x2, 0x2, 0x47, 0x1c, 0x3, 0x2, 0x2, 0x2, + 0x48, 0x49, 0x9, 0x3, 0x2, 0x2, 0x49, 0x1e, 0x3, 0x2, 0x2, 0x2, 0x4a, + 0x4d, 0x5, 0x1d, 0xf, 0x2, 0x4b, 0x4d, 0x5, 0x1b, 0xe, 0x2, 0x4c, 0x4a, + 0x3, 0x2, 0x2, 0x2, 0x4c, 0x4b, 0x3, 0x2, 0x2, 0x2, 0x4d, 0x20, 0x3, + 0x2, 0x2, 0x2, 0x4e, 0x50, 0x5, 0x1b, 0xe, 0x2, 0x4f, 0x4e, 0x3, 0x2, + 0x2, 0x2, 0x50, 0x51, 0x3, 0x2, 0x2, 0x2, 0x51, 0x4f, 0x3, 0x2, 0x2, + 0x2, 0x51, 0x52, 0x3, 0x2, 0x2, 0x2, 0x52, 0x59, 0x3, 0x2, 0x2, 0x2, + 0x53, 0x55, 0x7, 0x30, 0x2, 0x2, 0x54, 0x56, 0x5, 0x1b, 0xe, 0x2, 0x55, + 0x54, 0x3, 0x2, 0x2, 0x2, 0x56, 0x57, 0x3, 0x2, 0x2, 0x2, 0x57, 0x55, + 0x3, 0x2, 0x2, 0x2, 0x57, 0x58, 0x3, 0x2, 0x2, 0x2, 0x58, 0x5a, 0x3, + 0x2, 0x2, 0x2, 0x59, 0x53, 0x3, 0x2, 0x2, 0x2, 0x59, 0x5a, 0x3, 0x2, + 0x2, 0x2, 0x5a, 0x22, 0x3, 0x2, 0x2, 0x2, 0x5b, 0x5c, 0x7, 0x76, 0x2, + 0x2, 0x5c, 0x24, 0x3, 0x2, 0x2, 0x2, 0x5d, 0x61, 0x5, 0x1d, 0xf, 0x2, + 0x5e, 0x60, 0x5, 0x1f, 0x10, 0x2, 0x5f, 0x5e, 0x3, 0x2, 0x2, 0x2, 0x60, + 0x63, 0x3, 0x2, 0x2, 0x2, 0x61, 0x5f, 0x3, 0x2, 0x2, 0x2, 0x61, 0x62, + 0x3, 0x2, 0x2, 0x2, 0x62, 0x26, 0x3, 0x2, 0x2, 0x2, 0x63, 0x61, 0x3, + 0x2, 0x2, 0x2, 0x64, 0x6a, 0x7, 0x3f, 0x2, 0x2, 0x65, 0x66, 0x7, 0x40, + 0x2, 0x2, 0x66, 0x6a, 0x7, 0x3f, 0x2, 0x2, 0x67, 0x68, 0x7, 0x3e, 0x2, + 0x2, 0x68, 0x6a, 0x7, 0x3f, 0x2, 0x2, 0x69, 0x64, 0x3, 0x2, 0x2, 0x2, + 0x69, 0x65, 0x3, 0x2, 0x2, 0x2, 0x69, 0x67, 0x3, 0x2, 0x2, 0x2, 0x6a, + 0x28, 0x3, 0x2, 0x2, 0x2, 0x6b, 0x6c, 0x9, 0x4, 0x2, 0x2, 0x6c, 0x6d, + 0x3, 0x2, 0x2, 0x2, 0x6d, 0x6e, 0x8, 0x15, 0x2, 0x2, 0x6e, 0x2a, 0x3, + 0x2, 0x2, 0x2, 0x9, 0x2, 0x4c, 0x51, 0x57, 0x59, 0x61, 0x69, 0x3, 0x8, + 0x2, 0x2, + }; + + atn::ATNDeserializer deserializer; + _atn = deserializer.deserialize(_serializedATN); + + size_t count = _atn.getNumberOfDecisions(); + _decisionToDFA.reserve(count); + for (size_t i = 0; i < count; i++) { + _decisionToDFA.emplace_back(_atn.getDecisionState(i), i); + } } + +ExprLexer::Initializer ExprLexer::_init; diff --git a/src/libs/antares/antlr-interface/ExprLexer.h b/src/libs/antares/antlr-interface/ExprLexer.h index c7db2c5f77..c543ba812e 100644 --- a/src/libs/antares/antlr-interface/ExprLexer.h +++ b/src/libs/antares/antlr-interface/ExprLexer.h @@ -1,5 +1,5 @@ -// Generated from Expr.g4 by ANTLR 4.13.1 +// Generated from Expr.g4 by ANTLR 4.7.2 #pragma once @@ -13,39 +13,46 @@ class ExprLexer : public antlr4::Lexer { public: enum { T__0 = 1, T__1 = 2, T__2 = 3, T__3 = 4, T__4 = 5, T__5 = 6, T__6 = 7, - T__7 = 8, T__8 = 9, NUMBER = 10, TIME = 11, IDENTIFIER = 12, COMPARISON = 13, - ADDSUB = 14, MULDIV = 15, LBRACKET = 16, RBRACKET = 17, WS = 18 + T__7 = 8, T__8 = 9, T__9 = 10, T__10 = 11, T__11 = 12, NUMBER = 13, + TIME = 14, IDENTIFIER = 15, COMPARISON = 16, WS = 17 }; - explicit ExprLexer(antlr4::CharStream *input); + ExprLexer(antlr4::CharStream *input); + ~ExprLexer(); - ~ExprLexer() override; + virtual std::string getGrammarFileName() const override; + virtual const std::vector& getRuleNames() const override; + virtual const std::vector& getChannelNames() const override; + virtual const std::vector& getModeNames() const override; + virtual const std::vector& getTokenNames() const override; // deprecated, use vocabulary instead + virtual antlr4::dfa::Vocabulary& getVocabulary() const override; - std::string getGrammarFileName() const override; + virtual const std::vector getSerializedATN() const override; + virtual const antlr4::atn::ATN& getATN() const override; - const std::vector& getRuleNames() const override; - - const std::vector& getChannelNames() const override; - - const std::vector& getModeNames() const override; - - const antlr4::dfa::Vocabulary& getVocabulary() const override; - - antlr4::atn::SerializedATNView getSerializedATN() const override; - - const antlr4::atn::ATN& getATN() const override; +private: + static std::vector _decisionToDFA; + static antlr4::atn::PredictionContextCache _sharedContextCache; + static std::vector _ruleNames; + static std::vector _tokenNames; + static std::vector _channelNames; + static std::vector _modeNames; - // By default the static state used to implement the lexer is lazily initialized during the first - // call to the constructor. You can call this function if you wish to initialize the static state - // ahead of time. - static void initialize(); + static std::vector _literalNames; + static std::vector _symbolicNames; + static antlr4::dfa::Vocabulary _vocabulary; + static antlr4::atn::ATN _atn; + static std::vector _serializedATN; -private: // Individual action functions triggered by action() above. // Individual semantic predicate functions triggered by sempred() above. + struct Initializer { + Initializer(); + }; + static Initializer _init; }; diff --git a/src/libs/antares/antlr-interface/ExprLexer.interp b/src/libs/antares/antlr-interface/ExprLexer.interp index e98cab1e7c..777750113a 100644 --- a/src/libs/antares/antlr-interface/ExprLexer.interp +++ b/src/libs/antares/antlr-interface/ExprLexer.interp @@ -1,23 +1,22 @@ token literal names: null -'+' -'-' -'/' -'*' '.' +'-' '(' ')' -',' +'/' +'*' +'+' +'sum' '..' +',' +'[' +']' null 't' null null null -null -'[' -']' -null token symbolic names: null @@ -30,14 +29,13 @@ null null null null +null +null +null NUMBER TIME IDENTIFIER COMPARISON -ADDSUB -MULDIV -LBRACKET -RBRACKET WS rule names: @@ -50,6 +48,9 @@ T__5 T__6 T__7 T__8 +T__9 +T__10 +T__11 DIGIT CHAR CHAR_OR_DIGIT @@ -57,10 +58,6 @@ NUMBER TIME IDENTIFIER COMPARISON -ADDSUB -MULDIV -LBRACKET -RBRACKET WS channel names: @@ -71,4 +68,4 @@ mode names: DEFAULT_MODE atn: -[4, 0, 18, 111, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 1, 11, 3, 11, 69, 8, 11, 1, 12, 4, 12, 72, 8, 12, 11, 12, 12, 12, 73, 1, 12, 1, 12, 4, 12, 78, 8, 12, 11, 12, 12, 12, 79, 3, 12, 82, 8, 12, 1, 13, 1, 13, 1, 14, 1, 14, 5, 14, 88, 8, 14, 10, 14, 12, 14, 91, 9, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 98, 8, 15, 1, 16, 1, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 0, 0, 21, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 0, 21, 0, 23, 0, 25, 10, 27, 11, 29, 12, 31, 13, 33, 14, 35, 15, 37, 16, 39, 17, 41, 18, 1, 0, 5, 1, 0, 48, 57, 3, 0, 65, 90, 95, 95, 97, 122, 2, 0, 43, 43, 45, 45, 2, 0, 42, 42, 47, 47, 3, 0, 9, 10, 13, 13, 32, 32, 114, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 1, 43, 1, 0, 0, 0, 3, 45, 1, 0, 0, 0, 5, 47, 1, 0, 0, 0, 7, 49, 1, 0, 0, 0, 9, 51, 1, 0, 0, 0, 11, 53, 1, 0, 0, 0, 13, 55, 1, 0, 0, 0, 15, 57, 1, 0, 0, 0, 17, 59, 1, 0, 0, 0, 19, 62, 1, 0, 0, 0, 21, 64, 1, 0, 0, 0, 23, 68, 1, 0, 0, 0, 25, 71, 1, 0, 0, 0, 27, 83, 1, 0, 0, 0, 29, 85, 1, 0, 0, 0, 31, 97, 1, 0, 0, 0, 33, 99, 1, 0, 0, 0, 35, 101, 1, 0, 0, 0, 37, 103, 1, 0, 0, 0, 39, 105, 1, 0, 0, 0, 41, 107, 1, 0, 0, 0, 43, 44, 5, 43, 0, 0, 44, 2, 1, 0, 0, 0, 45, 46, 5, 45, 0, 0, 46, 4, 1, 0, 0, 0, 47, 48, 5, 47, 0, 0, 48, 6, 1, 0, 0, 0, 49, 50, 5, 42, 0, 0, 50, 8, 1, 0, 0, 0, 51, 52, 5, 46, 0, 0, 52, 10, 1, 0, 0, 0, 53, 54, 5, 40, 0, 0, 54, 12, 1, 0, 0, 0, 55, 56, 5, 41, 0, 0, 56, 14, 1, 0, 0, 0, 57, 58, 5, 44, 0, 0, 58, 16, 1, 0, 0, 0, 59, 60, 5, 46, 0, 0, 60, 61, 5, 46, 0, 0, 61, 18, 1, 0, 0, 0, 62, 63, 7, 0, 0, 0, 63, 20, 1, 0, 0, 0, 64, 65, 7, 1, 0, 0, 65, 22, 1, 0, 0, 0, 66, 69, 3, 21, 10, 0, 67, 69, 3, 19, 9, 0, 68, 66, 1, 0, 0, 0, 68, 67, 1, 0, 0, 0, 69, 24, 1, 0, 0, 0, 70, 72, 3, 19, 9, 0, 71, 70, 1, 0, 0, 0, 72, 73, 1, 0, 0, 0, 73, 71, 1, 0, 0, 0, 73, 74, 1, 0, 0, 0, 74, 81, 1, 0, 0, 0, 75, 77, 5, 46, 0, 0, 76, 78, 3, 19, 9, 0, 77, 76, 1, 0, 0, 0, 78, 79, 1, 0, 0, 0, 79, 77, 1, 0, 0, 0, 79, 80, 1, 0, 0, 0, 80, 82, 1, 0, 0, 0, 81, 75, 1, 0, 0, 0, 81, 82, 1, 0, 0, 0, 82, 26, 1, 0, 0, 0, 83, 84, 5, 116, 0, 0, 84, 28, 1, 0, 0, 0, 85, 89, 3, 21, 10, 0, 86, 88, 3, 23, 11, 0, 87, 86, 1, 0, 0, 0, 88, 91, 1, 0, 0, 0, 89, 87, 1, 0, 0, 0, 89, 90, 1, 0, 0, 0, 90, 30, 1, 0, 0, 0, 91, 89, 1, 0, 0, 0, 92, 98, 5, 61, 0, 0, 93, 94, 5, 62, 0, 0, 94, 98, 5, 61, 0, 0, 95, 96, 5, 60, 0, 0, 96, 98, 5, 61, 0, 0, 97, 92, 1, 0, 0, 0, 97, 93, 1, 0, 0, 0, 97, 95, 1, 0, 0, 0, 98, 32, 1, 0, 0, 0, 99, 100, 7, 2, 0, 0, 100, 34, 1, 0, 0, 0, 101, 102, 7, 3, 0, 0, 102, 36, 1, 0, 0, 0, 103, 104, 5, 91, 0, 0, 104, 38, 1, 0, 0, 0, 105, 106, 5, 93, 0, 0, 106, 40, 1, 0, 0, 0, 107, 108, 7, 4, 0, 0, 108, 109, 1, 0, 0, 0, 109, 110, 6, 20, 0, 0, 110, 42, 1, 0, 0, 0, 7, 0, 68, 73, 79, 81, 89, 97, 1, 6, 0, 0] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 19, 111, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 5, 16, 77, 10, 16, 3, 17, 6, 17, 80, 10, 17, 13, 17, 14, 17, 81, 3, 17, 3, 17, 6, 17, 86, 10, 17, 13, 17, 14, 17, 87, 5, 17, 90, 10, 17, 3, 18, 3, 18, 3, 19, 3, 19, 7, 19, 96, 10, 19, 12, 19, 14, 19, 99, 11, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 5, 20, 106, 10, 20, 3, 21, 3, 21, 3, 21, 3, 21, 2, 2, 22, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 2, 29, 2, 31, 2, 33, 15, 35, 16, 37, 17, 39, 18, 41, 19, 3, 2, 5, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 5, 2, 11, 12, 15, 15, 34, 34, 2, 114, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 3, 43, 3, 2, 2, 2, 5, 45, 3, 2, 2, 2, 7, 47, 3, 2, 2, 2, 9, 49, 3, 2, 2, 2, 11, 51, 3, 2, 2, 2, 13, 53, 3, 2, 2, 2, 15, 55, 3, 2, 2, 2, 17, 57, 3, 2, 2, 2, 19, 61, 3, 2, 2, 2, 21, 64, 3, 2, 2, 2, 23, 66, 3, 2, 2, 2, 25, 68, 3, 2, 2, 2, 27, 70, 3, 2, 2, 2, 29, 72, 3, 2, 2, 2, 31, 76, 3, 2, 2, 2, 33, 79, 3, 2, 2, 2, 35, 91, 3, 2, 2, 2, 37, 93, 3, 2, 2, 2, 39, 105, 3, 2, 2, 2, 41, 107, 3, 2, 2, 2, 43, 44, 7, 48, 2, 2, 44, 4, 3, 2, 2, 2, 45, 46, 7, 47, 2, 2, 46, 6, 3, 2, 2, 2, 47, 48, 7, 42, 2, 2, 48, 8, 3, 2, 2, 2, 49, 50, 7, 43, 2, 2, 50, 10, 3, 2, 2, 2, 51, 52, 7, 49, 2, 2, 52, 12, 3, 2, 2, 2, 53, 54, 7, 44, 2, 2, 54, 14, 3, 2, 2, 2, 55, 56, 7, 45, 2, 2, 56, 16, 3, 2, 2, 2, 57, 58, 7, 117, 2, 2, 58, 59, 7, 119, 2, 2, 59, 60, 7, 111, 2, 2, 60, 18, 3, 2, 2, 2, 61, 62, 7, 48, 2, 2, 62, 63, 7, 48, 2, 2, 63, 20, 3, 2, 2, 2, 64, 65, 7, 46, 2, 2, 65, 22, 3, 2, 2, 2, 66, 67, 7, 93, 2, 2, 67, 24, 3, 2, 2, 2, 68, 69, 7, 95, 2, 2, 69, 26, 3, 2, 2, 2, 70, 71, 9, 2, 2, 2, 71, 28, 3, 2, 2, 2, 72, 73, 9, 3, 2, 2, 73, 30, 3, 2, 2, 2, 74, 77, 5, 29, 15, 2, 75, 77, 5, 27, 14, 2, 76, 74, 3, 2, 2, 2, 76, 75, 3, 2, 2, 2, 77, 32, 3, 2, 2, 2, 78, 80, 5, 27, 14, 2, 79, 78, 3, 2, 2, 2, 80, 81, 3, 2, 2, 2, 81, 79, 3, 2, 2, 2, 81, 82, 3, 2, 2, 2, 82, 89, 3, 2, 2, 2, 83, 85, 7, 48, 2, 2, 84, 86, 5, 27, 14, 2, 85, 84, 3, 2, 2, 2, 86, 87, 3, 2, 2, 2, 87, 85, 3, 2, 2, 2, 87, 88, 3, 2, 2, 2, 88, 90, 3, 2, 2, 2, 89, 83, 3, 2, 2, 2, 89, 90, 3, 2, 2, 2, 90, 34, 3, 2, 2, 2, 91, 92, 7, 118, 2, 2, 92, 36, 3, 2, 2, 2, 93, 97, 5, 29, 15, 2, 94, 96, 5, 31, 16, 2, 95, 94, 3, 2, 2, 2, 96, 99, 3, 2, 2, 2, 97, 95, 3, 2, 2, 2, 97, 98, 3, 2, 2, 2, 98, 38, 3, 2, 2, 2, 99, 97, 3, 2, 2, 2, 100, 106, 7, 63, 2, 2, 101, 102, 7, 64, 2, 2, 102, 106, 7, 63, 2, 2, 103, 104, 7, 62, 2, 2, 104, 106, 7, 63, 2, 2, 105, 100, 3, 2, 2, 2, 105, 101, 3, 2, 2, 2, 105, 103, 3, 2, 2, 2, 106, 40, 3, 2, 2, 2, 107, 108, 9, 4, 2, 2, 108, 109, 3, 2, 2, 2, 109, 110, 8, 21, 2, 2, 110, 42, 3, 2, 2, 2, 9, 2, 76, 81, 87, 89, 97, 105, 3, 8, 2, 2] \ No newline at end of file diff --git a/src/libs/antares/antlr-interface/ExprLexer.tokens b/src/libs/antares/antlr-interface/ExprLexer.tokens index 29d96df5f3..868577445e 100644 --- a/src/libs/antares/antlr-interface/ExprLexer.tokens +++ b/src/libs/antares/antlr-interface/ExprLexer.tokens @@ -7,24 +7,24 @@ T__5=6 T__6=7 T__7=8 T__8=9 -NUMBER=10 -TIME=11 -IDENTIFIER=12 -COMPARISON=13 -ADDSUB=14 -MULDIV=15 -LBRACKET=16 -RBRACKET=17 -WS=18 -'+'=1 +T__9=10 +T__10=11 +T__11=12 +NUMBER=13 +TIME=14 +IDENTIFIER=15 +COMPARISON=16 +WS=17 +'.'=1 '-'=2 -'/'=3 -'*'=4 -'.'=5 -'('=6 -')'=7 -','=8 +'('=3 +')'=4 +'/'=5 +'*'=6 +'+'=7 +'sum'=8 '..'=9 -'t'=11 -'['=16 -']'=17 +','=10 +'['=11 +']'=12 +'t'=14 diff --git a/src/libs/antares/antlr-interface/ExprParser.cpp b/src/libs/antares/antlr-interface/ExprParser.cpp index 3c688d96d3..754abf45a3 100644 --- a/src/libs/antares/antlr-interface/ExprParser.cpp +++ b/src/libs/antares/antlr-interface/ExprParser.cpp @@ -1,5 +1,5 @@ -// Generated from Expr.g4 by ANTLR 4.13.1 +// Generated from Expr.g4 by ANTLR 4.7.2 #include "ExprVisitor.h" @@ -8,133 +8,26 @@ using namespace antlrcpp; - using namespace antlr4; -namespace { - -struct ExprParserStaticData final { - ExprParserStaticData(std::vector ruleNames, - std::vector literalNames, - std::vector symbolicNames) - : ruleNames(std::move(ruleNames)), literalNames(std::move(literalNames)), - symbolicNames(std::move(symbolicNames)), - vocabulary(this->literalNames, this->symbolicNames) {} - - ExprParserStaticData(const ExprParserStaticData&) = delete; - ExprParserStaticData(ExprParserStaticData&&) = delete; - ExprParserStaticData& operator=(const ExprParserStaticData&) = delete; - ExprParserStaticData& operator=(ExprParserStaticData&&) = delete; - - std::vector decisionToDFA; - antlr4::atn::PredictionContextCache sharedContextCache; - const std::vector ruleNames; - const std::vector literalNames; - const std::vector symbolicNames; - const antlr4::dfa::Vocabulary vocabulary; - antlr4::atn::SerializedATNView serializedATN; - std::unique_ptr atn; -}; - -::antlr4::internal::OnceFlag exprParserOnceFlag; -#if ANTLR4_USE_THREAD_LOCAL_CACHE -static thread_local -#endif -ExprParserStaticData *exprParserStaticData = nullptr; - -void exprParserInitialize() { -#if ANTLR4_USE_THREAD_LOCAL_CACHE - if (exprParserStaticData != nullptr) { - return; - } -#else - assert(exprParserStaticData == nullptr); -#endif - auto staticData = std::make_unique( - std::vector{ - "fullexpr", "shift", "expr" - }, - std::vector{ - "", "'+'", "'-'", "'/'", "'*'", "'.'", "'('", "')'", "','", "'..'", - "", "'t'", "", "", "", "", "'['", "']'" - }, - std::vector{ - "", "", "", "", "", "", "", "", "", "", "NUMBER", "TIME", "IDENTIFIER", - "COMPARISON", "ADDSUB", "MULDIV", "LBRACKET", "RBRACKET", "WS" - } - ); - static const int32_t serializedATNSegment[] = { - 4,1,18,86,2,0,7,0,2,1,7,1,2,2,7,2,1,0,1,0,1,0,1,1,1,1,1,1,3,1,13,8,1, - 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1, - 2,1,2,1,2,1,2,1,2,5,2,37,8,2,10,2,12,2,40,9,2,1,2,1,2,1,2,1,2,1,2,1,2, - 1,2,5,2,49,8,2,10,2,12,2,52,9,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1, - 2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,70,8,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, - 1,2,5,2,81,8,2,10,2,12,2,84,9,2,1,2,0,1,4,3,0,2,4,0,2,1,0,1,2,1,0,3,4, - 97,0,6,1,0,0,0,2,9,1,0,0,0,4,69,1,0,0,0,6,7,3,4,2,0,7,8,5,0,0,1,8,1,1, - 0,0,0,9,12,5,11,0,0,10,11,7,0,0,0,11,13,3,4,2,0,12,10,1,0,0,0,12,13,1, - 0,0,0,13,3,1,0,0,0,14,15,6,2,-1,0,15,16,5,2,0,0,16,70,3,4,2,13,17,70, - 5,12,0,0,18,19,5,12,0,0,19,20,5,5,0,0,20,70,5,12,0,0,21,70,5,10,0,0,22, - 23,5,6,0,0,23,24,3,4,2,0,24,25,5,7,0,0,25,70,1,0,0,0,26,27,5,12,0,0,27, - 28,5,6,0,0,28,29,3,4,2,0,29,30,5,7,0,0,30,70,1,0,0,0,31,32,5,12,0,0,32, - 33,5,16,0,0,33,38,3,2,1,0,34,35,5,8,0,0,35,37,3,2,1,0,36,34,1,0,0,0,37, - 40,1,0,0,0,38,36,1,0,0,0,38,39,1,0,0,0,39,41,1,0,0,0,40,38,1,0,0,0,41, - 42,5,17,0,0,42,70,1,0,0,0,43,44,5,12,0,0,44,45,5,16,0,0,45,50,3,4,2,0, - 46,47,5,8,0,0,47,49,3,4,2,0,48,46,1,0,0,0,49,52,1,0,0,0,50,48,1,0,0,0, - 50,51,1,0,0,0,51,53,1,0,0,0,52,50,1,0,0,0,53,54,5,17,0,0,54,70,1,0,0, - 0,55,56,5,12,0,0,56,57,5,16,0,0,57,58,3,2,1,0,58,59,5,9,0,0,59,60,3,2, - 1,0,60,61,5,17,0,0,61,70,1,0,0,0,62,63,5,12,0,0,63,64,5,16,0,0,64,65, - 3,4,2,0,65,66,5,9,0,0,66,67,3,4,2,0,67,68,5,17,0,0,68,70,1,0,0,0,69,14, - 1,0,0,0,69,17,1,0,0,0,69,18,1,0,0,0,69,21,1,0,0,0,69,22,1,0,0,0,69,26, - 1,0,0,0,69,31,1,0,0,0,69,43,1,0,0,0,69,55,1,0,0,0,69,62,1,0,0,0,70,82, - 1,0,0,0,71,72,10,12,0,0,72,73,7,1,0,0,73,81,3,4,2,13,74,75,10,11,0,0, - 75,76,7,0,0,0,76,81,3,4,2,12,77,78,10,10,0,0,78,79,5,13,0,0,79,81,3,4, - 2,11,80,71,1,0,0,0,80,74,1,0,0,0,80,77,1,0,0,0,81,84,1,0,0,0,82,80,1, - 0,0,0,82,83,1,0,0,0,83,5,1,0,0,0,84,82,1,0,0,0,6,12,38,50,69,80,82 - }; - staticData->serializedATN = antlr4::atn::SerializedATNView(serializedATNSegment, sizeof(serializedATNSegment) / sizeof(serializedATNSegment[0])); - - antlr4::atn::ATNDeserializer deserializer; - staticData->atn = deserializer.deserialize(staticData->serializedATN); - - const size_t count = staticData->atn->getNumberOfDecisions(); - staticData->decisionToDFA.reserve(count); - for (size_t i = 0; i < count; i++) { - staticData->decisionToDFA.emplace_back(staticData->atn->getDecisionState(i), i); - } - exprParserStaticData = staticData.release(); -} - -} - -ExprParser::ExprParser(TokenStream *input) : ExprParser(input, antlr4::atn::ParserATNSimulatorOptions()) {} - -ExprParser::ExprParser(TokenStream *input, const antlr4::atn::ParserATNSimulatorOptions &options) : Parser(input) { - ExprParser::initialize(); - _interpreter = new atn::ParserATNSimulator(this, *exprParserStaticData->atn, exprParserStaticData->decisionToDFA, exprParserStaticData->sharedContextCache, options); +ExprParser::ExprParser(TokenStream *input) : Parser(input) { + _interpreter = new atn::ParserATNSimulator(this, _atn, _decisionToDFA, _sharedContextCache); } ExprParser::~ExprParser() { delete _interpreter; } -const atn::ATN& ExprParser::getATN() const { - return *exprParserStaticData->atn; -} - std::string ExprParser::getGrammarFileName() const { return "Expr.g4"; } const std::vector& ExprParser::getRuleNames() const { - return exprParserStaticData->ruleNames; -} - -const dfa::Vocabulary& ExprParser::getVocabulary() const { - return exprParserStaticData->vocabulary; + return _ruleNames; } -antlr4::atn::SerializedATNView ExprParser::getSerializedATN() const { - return exprParserStaticData->serializedATN; +dfa::Vocabulary& ExprParser::getVocabulary() const { + return _vocabulary; } @@ -157,8 +50,7 @@ size_t ExprParser::FullexprContext::getRuleIndex() const { return ExprParser::RuleFullexpr; } - -std::any ExprParser::FullexprContext::accept(tree::ParseTreeVisitor *visitor) { +antlrcpp::Any ExprParser::FullexprContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitFullexpr(this); else @@ -169,18 +61,14 @@ ExprParser::FullexprContext* ExprParser::fullexpr() { FullexprContext *_localctx = _tracker.createInstance(_ctx, getState()); enterRule(_localctx, 0, ExprParser::RuleFullexpr); -#if __cplusplus > 201703L - auto onExit = finally([=, this] { -#else auto onExit = finally([=] { -#endif exitRule(); }); try { enterOuterAlt(_localctx, 1); - setState(6); + setState(12); expr(0); - setState(7); + setState(13); match(ExprParser::EOF); } @@ -193,82 +81,6 @@ ExprParser::FullexprContext* ExprParser::fullexpr() { return _localctx; } -//----------------- ShiftContext ------------------------------------------------------------------ - -ExprParser::ShiftContext::ShiftContext(ParserRuleContext *parent, size_t invokingState) - : ParserRuleContext(parent, invokingState) { -} - -tree::TerminalNode* ExprParser::ShiftContext::TIME() { - return getToken(ExprParser::TIME, 0); -} - -ExprParser::ExprContext* ExprParser::ShiftContext::expr() { - return getRuleContext(0); -} - - -size_t ExprParser::ShiftContext::getRuleIndex() const { - return ExprParser::RuleShift; -} - - -std::any ExprParser::ShiftContext::accept(tree::ParseTreeVisitor *visitor) { - if (auto parserVisitor = dynamic_cast(visitor)) - return parserVisitor->visitShift(this); - else - return visitor->visitChildren(this); -} - -ExprParser::ShiftContext* ExprParser::shift() { - ShiftContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 2, ExprParser::RuleShift); - size_t _la = 0; - -#if __cplusplus > 201703L - auto onExit = finally([=, this] { -#else - auto onExit = finally([=] { -#endif - exitRule(); - }); - try { - enterOuterAlt(_localctx, 1); - setState(9); - match(ExprParser::TIME); - setState(12); - _errHandler->sync(this); - - _la = _input->LA(1); - if (_la == ExprParser::T__0 - - || _la == ExprParser::T__1) { - setState(10); - antlrcpp::downCast(_localctx)->op = _input->LT(1); - _la = _input->LA(1); - if (!(_la == ExprParser::T__0 - - || _la == ExprParser::T__1)) { - antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); - } - else { - _errHandler->reportMatch(this); - consume(); - } - setState(11); - expr(0); - } - - } - catch (RecognitionException &e) { - _errHandler->reportError(this, e); - _localctx->exception = std::current_exception(); - _errHandler->recover(this, _localctx->exception); - } - - return _localctx; -} - //----------------- ExprContext ------------------------------------------------------------------ ExprParser::ExprContext::ExprContext(ParserRuleContext *parent, size_t invokingState) @@ -284,18 +96,25 @@ void ExprParser::ExprContext::copyFrom(ExprContext *ctx) { ParserRuleContext::copyFrom(ctx); } -//----------------- IdentifierContext ------------------------------------------------------------------ +//----------------- TimeSumContext ------------------------------------------------------------------ -tree::TerminalNode* ExprParser::IdentifierContext::IDENTIFIER() { - return getToken(ExprParser::IDENTIFIER, 0); +ExprParser::ExprContext* ExprParser::TimeSumContext::expr() { + return getRuleContext(0); +} + +std::vector ExprParser::TimeSumContext::shift() { + return getRuleContexts(); } -ExprParser::IdentifierContext::IdentifierContext(ExprContext *ctx) { copyFrom(ctx); } +ExprParser::ShiftContext* ExprParser::TimeSumContext::shift(size_t i) { + return getRuleContext(i); +} +ExprParser::TimeSumContext::TimeSumContext(ExprContext *ctx) { copyFrom(ctx); } -std::any ExprParser::IdentifierContext::accept(tree::ParseTreeVisitor *visitor) { +antlrcpp::Any ExprParser::TimeSumContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) - return parserVisitor->visitIdentifier(this); + return parserVisitor->visitTimeSum(this); else return visitor->visitChildren(this); } @@ -307,151 +126,91 @@ ExprParser::ExprContext* ExprParser::NegationContext::expr() { ExprParser::NegationContext::NegationContext(ExprContext *ctx) { copyFrom(ctx); } - -std::any ExprParser::NegationContext::accept(tree::ParseTreeVisitor *visitor) { +antlrcpp::Any ExprParser::NegationContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitNegation(this); else return visitor->visitChildren(this); } -//----------------- ExpressionContext ------------------------------------------------------------------ - -ExprParser::ExprContext* ExprParser::ExpressionContext::expr() { - return getRuleContext(0); -} - -ExprParser::ExpressionContext::ExpressionContext(ExprContext *ctx) { copyFrom(ctx); } - - -std::any ExprParser::ExpressionContext::accept(tree::ParseTreeVisitor *visitor) { - if (auto parserVisitor = dynamic_cast(visitor)) - return parserVisitor->visitExpression(this); - else - return visitor->visitChildren(this); -} -//----------------- ComparisonContext ------------------------------------------------------------------ - -std::vector ExprParser::ComparisonContext::expr() { - return getRuleContexts(); -} +//----------------- UnsignedAtomContext ------------------------------------------------------------------ -ExprParser::ExprContext* ExprParser::ComparisonContext::expr(size_t i) { - return getRuleContext(i); -} - -tree::TerminalNode* ExprParser::ComparisonContext::COMPARISON() { - return getToken(ExprParser::COMPARISON, 0); +ExprParser::AtomContext* ExprParser::UnsignedAtomContext::atom() { + return getRuleContext(0); } -ExprParser::ComparisonContext::ComparisonContext(ExprContext *ctx) { copyFrom(ctx); } - +ExprParser::UnsignedAtomContext::UnsignedAtomContext(ExprContext *ctx) { copyFrom(ctx); } -std::any ExprParser::ComparisonContext::accept(tree::ParseTreeVisitor *visitor) { +antlrcpp::Any ExprParser::UnsignedAtomContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) - return parserVisitor->visitComparison(this); + return parserVisitor->visitUnsignedAtom(this); else return visitor->visitChildren(this); } -//----------------- AddsubContext ------------------------------------------------------------------ - -std::vector ExprParser::AddsubContext::expr() { - return getRuleContexts(); -} +//----------------- ExpressionContext ------------------------------------------------------------------ -ExprParser::ExprContext* ExprParser::AddsubContext::expr(size_t i) { - return getRuleContext(i); +ExprParser::ExprContext* ExprParser::ExpressionContext::expr() { + return getRuleContext(0); } -ExprParser::AddsubContext::AddsubContext(ExprContext *ctx) { copyFrom(ctx); } - +ExprParser::ExpressionContext::ExpressionContext(ExprContext *ctx) { copyFrom(ctx); } -std::any ExprParser::AddsubContext::accept(tree::ParseTreeVisitor *visitor) { +antlrcpp::Any ExprParser::ExpressionContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) - return parserVisitor->visitAddsub(this); + return parserVisitor->visitExpression(this); else return visitor->visitChildren(this); } -//----------------- PortFieldContext ------------------------------------------------------------------ +//----------------- TimeIndexContext ------------------------------------------------------------------ -std::vector ExprParser::PortFieldContext::IDENTIFIER() { - return getTokens(ExprParser::IDENTIFIER); +tree::TerminalNode* ExprParser::TimeIndexContext::IDENTIFIER() { + return getToken(ExprParser::IDENTIFIER, 0); } -tree::TerminalNode* ExprParser::PortFieldContext::IDENTIFIER(size_t i) { - return getToken(ExprParser::IDENTIFIER, i); +ExprParser::ExprContext* ExprParser::TimeIndexContext::expr() { + return getRuleContext(0); } -ExprParser::PortFieldContext::PortFieldContext(ExprContext *ctx) { copyFrom(ctx); } - +ExprParser::TimeIndexContext::TimeIndexContext(ExprContext *ctx) { copyFrom(ctx); } -std::any ExprParser::PortFieldContext::accept(tree::ParseTreeVisitor *visitor) { +antlrcpp::Any ExprParser::TimeIndexContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) - return parserVisitor->visitPortField(this); + return parserVisitor->visitTimeIndex(this); else return visitor->visitChildren(this); } -//----------------- MuldivContext ------------------------------------------------------------------ +//----------------- ComparisonContext ------------------------------------------------------------------ -std::vector ExprParser::MuldivContext::expr() { +std::vector ExprParser::ComparisonContext::expr() { return getRuleContexts(); } -ExprParser::ExprContext* ExprParser::MuldivContext::expr(size_t i) { +ExprParser::ExprContext* ExprParser::ComparisonContext::expr(size_t i) { return getRuleContext(i); } -ExprParser::MuldivContext::MuldivContext(ExprContext *ctx) { copyFrom(ctx); } - - -std::any ExprParser::MuldivContext::accept(tree::ParseTreeVisitor *visitor) { - if (auto parserVisitor = dynamic_cast(visitor)) - return parserVisitor->visitMuldiv(this); - else - return visitor->visitChildren(this); -} -//----------------- NumberContext ------------------------------------------------------------------ - -tree::TerminalNode* ExprParser::NumberContext::NUMBER() { - return getToken(ExprParser::NUMBER, 0); +tree::TerminalNode* ExprParser::ComparisonContext::COMPARISON() { + return getToken(ExprParser::COMPARISON, 0); } -ExprParser::NumberContext::NumberContext(ExprContext *ctx) { copyFrom(ctx); } - +ExprParser::ComparisonContext::ComparisonContext(ExprContext *ctx) { copyFrom(ctx); } -std::any ExprParser::NumberContext::accept(tree::ParseTreeVisitor *visitor) { +antlrcpp::Any ExprParser::ComparisonContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) - return parserVisitor->visitNumber(this); + return parserVisitor->visitComparison(this); else return visitor->visitChildren(this); } -//----------------- TimeIndexContext ------------------------------------------------------------------ - -tree::TerminalNode* ExprParser::TimeIndexContext::IDENTIFIER() { - return getToken(ExprParser::IDENTIFIER, 0); -} - -tree::TerminalNode* ExprParser::TimeIndexContext::LBRACKET() { - return getToken(ExprParser::LBRACKET, 0); -} - -std::vector ExprParser::TimeIndexContext::expr() { - return getRuleContexts(); -} +//----------------- AllTimeSumContext ------------------------------------------------------------------ -ExprParser::ExprContext* ExprParser::TimeIndexContext::expr(size_t i) { - return getRuleContext(i); -} - -tree::TerminalNode* ExprParser::TimeIndexContext::RBRACKET() { - return getToken(ExprParser::RBRACKET, 0); +ExprParser::ExprContext* ExprParser::AllTimeSumContext::expr() { + return getRuleContext(0); } -ExprParser::TimeIndexContext::TimeIndexContext(ExprContext *ctx) { copyFrom(ctx); } - +ExprParser::AllTimeSumContext::AllTimeSumContext(ExprContext *ctx) { copyFrom(ctx); } -std::any ExprParser::TimeIndexContext::accept(tree::ParseTreeVisitor *visitor) { +antlrcpp::Any ExprParser::AllTimeSumContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) - return parserVisitor->visitTimeIndex(this); + return parserVisitor->visitAllTimeSum(this); else return visitor->visitChildren(this); } @@ -461,26 +220,13 @@ tree::TerminalNode* ExprParser::TimeShiftContext::IDENTIFIER() { return getToken(ExprParser::IDENTIFIER, 0); } -tree::TerminalNode* ExprParser::TimeShiftContext::LBRACKET() { - return getToken(ExprParser::LBRACKET, 0); -} - -std::vector ExprParser::TimeShiftContext::shift() { - return getRuleContexts(); -} - -ExprParser::ShiftContext* ExprParser::TimeShiftContext::shift(size_t i) { - return getRuleContext(i); -} - -tree::TerminalNode* ExprParser::TimeShiftContext::RBRACKET() { - return getToken(ExprParser::RBRACKET, 0); +ExprParser::ShiftContext* ExprParser::TimeShiftContext::shift() { + return getRuleContext(0); } ExprParser::TimeShiftContext::TimeShiftContext(ExprContext *ctx) { copyFrom(ctx); } - -std::any ExprParser::TimeShiftContext::accept(tree::ParseTreeVisitor *visitor) { +antlrcpp::Any ExprParser::TimeShiftContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitTimeShift(this); else @@ -498,72 +244,63 @@ ExprParser::ExprContext* ExprParser::FunctionContext::expr() { ExprParser::FunctionContext::FunctionContext(ExprContext *ctx) { copyFrom(ctx); } - -std::any ExprParser::FunctionContext::accept(tree::ParseTreeVisitor *visitor) { +antlrcpp::Any ExprParser::FunctionContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitFunction(this); else return visitor->visitChildren(this); } -//----------------- TimeShiftRangeContext ------------------------------------------------------------------ +//----------------- AddsubContext ------------------------------------------------------------------ -tree::TerminalNode* ExprParser::TimeShiftRangeContext::IDENTIFIER() { - return getToken(ExprParser::IDENTIFIER, 0); +std::vector ExprParser::AddsubContext::expr() { + return getRuleContexts(); } -tree::TerminalNode* ExprParser::TimeShiftRangeContext::LBRACKET() { - return getToken(ExprParser::LBRACKET, 0); +ExprParser::ExprContext* ExprParser::AddsubContext::expr(size_t i) { + return getRuleContext(i); } -tree::TerminalNode* ExprParser::TimeShiftRangeContext::RBRACKET() { - return getToken(ExprParser::RBRACKET, 0); -} +ExprParser::AddsubContext::AddsubContext(ExprContext *ctx) { copyFrom(ctx); } -std::vector ExprParser::TimeShiftRangeContext::shift() { - return getRuleContexts(); +antlrcpp::Any ExprParser::AddsubContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitAddsub(this); + else + return visitor->visitChildren(this); } +//----------------- PortFieldContext ------------------------------------------------------------------ -ExprParser::ShiftContext* ExprParser::TimeShiftRangeContext::shift(size_t i) { - return getRuleContext(i); +std::vector ExprParser::PortFieldContext::IDENTIFIER() { + return getTokens(ExprParser::IDENTIFIER); } -ExprParser::TimeShiftRangeContext::TimeShiftRangeContext(ExprContext *ctx) { copyFrom(ctx); } +tree::TerminalNode* ExprParser::PortFieldContext::IDENTIFIER(size_t i) { + return getToken(ExprParser::IDENTIFIER, i); +} +ExprParser::PortFieldContext::PortFieldContext(ExprContext *ctx) { copyFrom(ctx); } -std::any ExprParser::TimeShiftRangeContext::accept(tree::ParseTreeVisitor *visitor) { +antlrcpp::Any ExprParser::PortFieldContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) - return parserVisitor->visitTimeShiftRange(this); + return parserVisitor->visitPortField(this); else return visitor->visitChildren(this); } -//----------------- TimeRangeContext ------------------------------------------------------------------ - -tree::TerminalNode* ExprParser::TimeRangeContext::IDENTIFIER() { - return getToken(ExprParser::IDENTIFIER, 0); -} - -tree::TerminalNode* ExprParser::TimeRangeContext::LBRACKET() { - return getToken(ExprParser::LBRACKET, 0); -} +//----------------- MuldivContext ------------------------------------------------------------------ -std::vector ExprParser::TimeRangeContext::expr() { +std::vector ExprParser::MuldivContext::expr() { return getRuleContexts(); } -ExprParser::ExprContext* ExprParser::TimeRangeContext::expr(size_t i) { +ExprParser::ExprContext* ExprParser::MuldivContext::expr(size_t i) { return getRuleContext(i); } -tree::TerminalNode* ExprParser::TimeRangeContext::RBRACKET() { - return getToken(ExprParser::RBRACKET, 0); -} - -ExprParser::TimeRangeContext::TimeRangeContext(ExprContext *ctx) { copyFrom(ctx); } - +ExprParser::MuldivContext::MuldivContext(ExprContext *ctx) { copyFrom(ctx); } -std::any ExprParser::TimeRangeContext::accept(tree::ParseTreeVisitor *visitor) { +antlrcpp::Any ExprParser::MuldivContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) - return parserVisitor->visitTimeRange(this); + return parserVisitor->visitMuldiv(this); else return visitor->visitChildren(this); } @@ -578,223 +315,184 @@ ExprParser::ExprContext* ExprParser::expr(int precedence) { ExprParser::ExprContext *_localctx = _tracker.createInstance(_ctx, parentState); ExprParser::ExprContext *previousContext = _localctx; (void)previousContext; // Silence compiler, in case the context is not used by generated code. - size_t startState = 4; - enterRecursionRule(_localctx, 4, ExprParser::RuleExpr, precedence); + size_t startState = 2; + enterRecursionRule(_localctx, 2, ExprParser::RuleExpr, precedence); size_t _la = 0; -#if __cplusplus > 201703L - auto onExit = finally([=, this] { -#else auto onExit = finally([=] { -#endif unrollRecursionContexts(parentContext); }); try { size_t alt; enterOuterAlt(_localctx, 1); - setState(69); + setState(55); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 3, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 0, _ctx)) { case 1: { - _localctx = _tracker.createInstance(_localctx); + _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(15); - match(ExprParser::T__1); setState(16); - expr(13); + atom(); break; } case 2: { - _localctx = _tracker.createInstance(_localctx); + _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; setState(17); match(ExprParser::IDENTIFIER); - break; - } - - case 3: { - _localctx = _tracker.createInstance(_localctx); - _ctx = _localctx; - previousContext = _localctx; setState(18); - match(ExprParser::IDENTIFIER); + match(ExprParser::T__0); setState(19); - match(ExprParser::T__4); - setState(20); match(ExprParser::IDENTIFIER); break; } - case 4: { - _localctx = _tracker.createInstance(_localctx); + case 3: { + _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; + setState(20); + match(ExprParser::T__1); setState(21); - match(ExprParser::NUMBER); + expr(10); break; } - case 5: { + case 4: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; setState(22); - match(ExprParser::T__5); + match(ExprParser::T__2); setState(23); expr(0); setState(24); - match(ExprParser::T__6); + match(ExprParser::T__3); break; } - case 6: { - _localctx = _tracker.createInstance(_localctx); + case 5: { + _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; setState(26); - match(ExprParser::IDENTIFIER); + match(ExprParser::T__7); setState(27); - match(ExprParser::T__5); + match(ExprParser::T__2); setState(28); expr(0); setState(29); - match(ExprParser::T__6); + match(ExprParser::T__3); break; } - case 7: { - _localctx = _tracker.createInstance(_localctx); + case 6: { + _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; setState(31); - match(ExprParser::IDENTIFIER); + match(ExprParser::T__7); setState(32); - match(ExprParser::LBRACKET); + match(ExprParser::T__2); setState(33); - shift(); + dynamic_cast(_localctx)->from = shift(); + setState(34); + match(ExprParser::T__8); + setState(35); + dynamic_cast(_localctx)->to = shift(); + setState(36); + match(ExprParser::T__9); + setState(37); + expr(0); setState(38); - _errHandler->sync(this); - _la = _input->LA(1); - while (_la == ExprParser::T__7) { - setState(34); - match(ExprParser::T__7); - setState(35); - shift(); - setState(40); - _errHandler->sync(this); - _la = _input->LA(1); - } - setState(41); - match(ExprParser::RBRACKET); + match(ExprParser::T__3); break; } - case 8: { - _localctx = _tracker.createInstance(_localctx); + case 7: { + _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(43); + setState(40); match(ExprParser::IDENTIFIER); - setState(44); - match(ExprParser::LBRACKET); - setState(45); + setState(41); + match(ExprParser::T__2); + setState(42); expr(0); - setState(50); - _errHandler->sync(this); - _la = _input->LA(1); - while (_la == ExprParser::T__7) { - setState(46); - match(ExprParser::T__7); - setState(47); - expr(0); - setState(52); - _errHandler->sync(this); - _la = _input->LA(1); - } - setState(53); - match(ExprParser::RBRACKET); + setState(43); + match(ExprParser::T__3); break; } - case 9: { - _localctx = _tracker.createInstance(_localctx); + case 8: { + _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(55); + setState(45); match(ExprParser::IDENTIFIER); - setState(56); - match(ExprParser::LBRACKET); - setState(57); - antlrcpp::downCast(_localctx)->shift1 = shift(); - setState(58); - match(ExprParser::T__8); - setState(59); - antlrcpp::downCast(_localctx)->shift2 = shift(); - setState(60); - match(ExprParser::RBRACKET); + setState(46); + match(ExprParser::T__10); + setState(47); + shift(); + setState(48); + match(ExprParser::T__11); break; } - case 10: { - _localctx = _tracker.createInstance(_localctx); + case 9: { + _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(62); + setState(50); match(ExprParser::IDENTIFIER); - setState(63); - match(ExprParser::LBRACKET); - setState(64); - expr(0); - setState(65); - match(ExprParser::T__8); - setState(66); + setState(51); + match(ExprParser::T__10); + setState(52); expr(0); - setState(67); - match(ExprParser::RBRACKET); + setState(53); + match(ExprParser::T__11); break; } - default: - break; } _ctx->stop = _input->LT(-1); - setState(82); + setState(68); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 5, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 2, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { if (!_parseListeners.empty()) triggerExitRuleEvent(); previousContext = _localctx; - setState(80); + setState(66); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 4, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 1, _ctx)) { case 1: { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleExpr); - setState(71); + setState(57); - if (!(precpred(_ctx, 12))) throw FailedPredicateException(this, "precpred(_ctx, 12)"); - setState(72); - antlrcpp::downCast(_localctx)->op = _input->LT(1); + if (!(precpred(_ctx, 8))) throw FailedPredicateException(this, "precpred(_ctx, 8)"); + setState(58); + dynamic_cast(_localctx)->op = _input->LT(1); _la = _input->LA(1); - if (!(_la == ExprParser::T__2 + if (!(_la == ExprParser::T__4 - || _la == ExprParser::T__3)) { - antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); + || _la == ExprParser::T__5)) { + dynamic_cast(_localctx)->op = _errHandler->recoverInline(this); } else { _errHandler->reportMatch(this); consume(); } - setState(73); - expr(13); + setState(59); + expr(9); break; } @@ -802,23 +500,23 @@ ExprParser::ExprContext* ExprParser::expr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleExpr); - setState(74); + setState(60); - if (!(precpred(_ctx, 11))) throw FailedPredicateException(this, "precpred(_ctx, 11)"); - setState(75); - antlrcpp::downCast(_localctx)->op = _input->LT(1); + if (!(precpred(_ctx, 7))) throw FailedPredicateException(this, "precpred(_ctx, 7)"); + setState(61); + dynamic_cast(_localctx)->op = _input->LT(1); _la = _input->LA(1); - if (!(_la == ExprParser::T__0 + if (!(_la == ExprParser::T__1 - || _la == ExprParser::T__1)) { - antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); + || _la == ExprParser::T__6)) { + dynamic_cast(_localctx)->op = _errHandler->recoverInline(this); } else { _errHandler->reportMatch(this); consume(); } - setState(76); - expr(12); + setState(62); + expr(8); break; } @@ -826,23 +524,547 @@ ExprParser::ExprContext* ExprParser::expr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleExpr); - setState(77); + setState(63); - if (!(precpred(_ctx, 10))) throw FailedPredicateException(this, "precpred(_ctx, 10)"); - setState(78); + if (!(precpred(_ctx, 6))) throw FailedPredicateException(this, "precpred(_ctx, 6)"); + setState(64); match(ExprParser::COMPARISON); - setState(79); - expr(11); + setState(65); + expr(7); break; } - default: - break; } } + setState(70); + _errHandler->sync(this); + alt = getInterpreter()->adaptivePredict(_input, 2, _ctx); + } + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + return _localctx; +} + +//----------------- AtomContext ------------------------------------------------------------------ + +ExprParser::AtomContext::AtomContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + + +size_t ExprParser::AtomContext::getRuleIndex() const { + return ExprParser::RuleAtom; +} + +void ExprParser::AtomContext::copyFrom(AtomContext *ctx) { + ParserRuleContext::copyFrom(ctx); +} + +//----------------- NumberContext ------------------------------------------------------------------ + +tree::TerminalNode* ExprParser::NumberContext::NUMBER() { + return getToken(ExprParser::NUMBER, 0); +} + +ExprParser::NumberContext::NumberContext(AtomContext *ctx) { copyFrom(ctx); } + +antlrcpp::Any ExprParser::NumberContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitNumber(this); + else + return visitor->visitChildren(this); +} +//----------------- IdentifierContext ------------------------------------------------------------------ + +tree::TerminalNode* ExprParser::IdentifierContext::IDENTIFIER() { + return getToken(ExprParser::IDENTIFIER, 0); +} + +ExprParser::IdentifierContext::IdentifierContext(AtomContext *ctx) { copyFrom(ctx); } + +antlrcpp::Any ExprParser::IdentifierContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitIdentifier(this); + else + return visitor->visitChildren(this); +} +ExprParser::AtomContext* ExprParser::atom() { + AtomContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 4, ExprParser::RuleAtom); + + auto onExit = finally([=] { + exitRule(); + }); + try { + setState(73); + _errHandler->sync(this); + switch (_input->LA(1)) { + case ExprParser::NUMBER: { + _localctx = dynamic_cast(_tracker.createInstance(_localctx)); + enterOuterAlt(_localctx, 1); + setState(71); + match(ExprParser::NUMBER); + break; + } + + case ExprParser::IDENTIFIER: { + _localctx = dynamic_cast(_tracker.createInstance(_localctx)); + enterOuterAlt(_localctx, 2); + setState(72); + match(ExprParser::IDENTIFIER); + break; + } + + default: + throw NoViableAltException(this); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- ShiftContext ------------------------------------------------------------------ + +ExprParser::ShiftContext::ShiftContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* ExprParser::ShiftContext::TIME() { + return getToken(ExprParser::TIME, 0); +} + +ExprParser::Shift_exprContext* ExprParser::ShiftContext::shift_expr() { + return getRuleContext(0); +} + + +size_t ExprParser::ShiftContext::getRuleIndex() const { + return ExprParser::RuleShift; +} + +antlrcpp::Any ExprParser::ShiftContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitShift(this); + else + return visitor->visitChildren(this); +} + +ExprParser::ShiftContext* ExprParser::shift() { + ShiftContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 6, ExprParser::RuleShift); + size_t _la = 0; + + auto onExit = finally([=] { + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(75); + match(ExprParser::TIME); + setState(77); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == ExprParser::T__1 + + || _la == ExprParser::T__6) { + setState(76); + shift_expr(0); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- Shift_exprContext ------------------------------------------------------------------ + +ExprParser::Shift_exprContext::Shift_exprContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + + +size_t ExprParser::Shift_exprContext::getRuleIndex() const { + return ExprParser::RuleShift_expr; +} + +void ExprParser::Shift_exprContext::copyFrom(Shift_exprContext *ctx) { + ParserRuleContext::copyFrom(ctx); +} + +//----------------- SignedAtomContext ------------------------------------------------------------------ + +ExprParser::AtomContext* ExprParser::SignedAtomContext::atom() { + return getRuleContext(0); +} + +ExprParser::SignedAtomContext::SignedAtomContext(Shift_exprContext *ctx) { copyFrom(ctx); } + +antlrcpp::Any ExprParser::SignedAtomContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitSignedAtom(this); + else + return visitor->visitChildren(this); +} +//----------------- SignedExpressionContext ------------------------------------------------------------------ + +ExprParser::ExprContext* ExprParser::SignedExpressionContext::expr() { + return getRuleContext(0); +} + +ExprParser::SignedExpressionContext::SignedExpressionContext(Shift_exprContext *ctx) { copyFrom(ctx); } + +antlrcpp::Any ExprParser::SignedExpressionContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitSignedExpression(this); + else + return visitor->visitChildren(this); +} +//----------------- ShiftMuldivContext ------------------------------------------------------------------ + +ExprParser::Shift_exprContext* ExprParser::ShiftMuldivContext::shift_expr() { + return getRuleContext(0); +} + +ExprParser::Right_exprContext* ExprParser::ShiftMuldivContext::right_expr() { + return getRuleContext(0); +} + +ExprParser::ShiftMuldivContext::ShiftMuldivContext(Shift_exprContext *ctx) { copyFrom(ctx); } + +antlrcpp::Any ExprParser::ShiftMuldivContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitShiftMuldiv(this); + else + return visitor->visitChildren(this); +} +//----------------- ShiftAddsubContext ------------------------------------------------------------------ + +ExprParser::Shift_exprContext* ExprParser::ShiftAddsubContext::shift_expr() { + return getRuleContext(0); +} + +ExprParser::Right_exprContext* ExprParser::ShiftAddsubContext::right_expr() { + return getRuleContext(0); +} + +ExprParser::ShiftAddsubContext::ShiftAddsubContext(Shift_exprContext *ctx) { copyFrom(ctx); } + +antlrcpp::Any ExprParser::ShiftAddsubContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitShiftAddsub(this); + else + return visitor->visitChildren(this); +} + +ExprParser::Shift_exprContext* ExprParser::shift_expr() { + return shift_expr(0); +} + +ExprParser::Shift_exprContext* ExprParser::shift_expr(int precedence) { + ParserRuleContext *parentContext = _ctx; + size_t parentState = getState(); + ExprParser::Shift_exprContext *_localctx = _tracker.createInstance(_ctx, parentState); + ExprParser::Shift_exprContext *previousContext = _localctx; + (void)previousContext; // Silence compiler, in case the context is not used by generated code. + size_t startState = 8; + enterRecursionRule(_localctx, 8, ExprParser::RuleShift_expr, precedence); + + size_t _la = 0; + + auto onExit = finally([=] { + unrollRecursionContexts(parentContext); + }); + try { + size_t alt; + enterOuterAlt(_localctx, 1); + setState(87); + _errHandler->sync(this); + switch (getInterpreter()->adaptivePredict(_input, 5, _ctx)) { + case 1: { + _localctx = _tracker.createInstance(_localctx); + _ctx = _localctx; + previousContext = _localctx; + + setState(80); + dynamic_cast(_localctx)->op = _input->LT(1); + _la = _input->LA(1); + if (!(_la == ExprParser::T__1 + + || _la == ExprParser::T__6)) { + dynamic_cast(_localctx)->op = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(81); + atom(); + break; + } + + case 2: { + _localctx = _tracker.createInstance(_localctx); + _ctx = _localctx; + previousContext = _localctx; + setState(82); + dynamic_cast(_localctx)->op = _input->LT(1); + _la = _input->LA(1); + if (!(_la == ExprParser::T__1 + + || _la == ExprParser::T__6)) { + dynamic_cast(_localctx)->op = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(83); + match(ExprParser::T__2); setState(84); + expr(0); + setState(85); + match(ExprParser::T__3); + break; + } + + } + _ctx->stop = _input->LT(-1); + setState(97); + _errHandler->sync(this); + alt = getInterpreter()->adaptivePredict(_input, 7, _ctx); + while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { + if (alt == 1) { + if (!_parseListeners.empty()) + triggerExitRuleEvent(); + previousContext = _localctx; + setState(95); + _errHandler->sync(this); + switch (getInterpreter()->adaptivePredict(_input, 6, _ctx)) { + case 1: { + auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); + _localctx = newContext; + pushNewRecursionContext(newContext, startState, RuleShift_expr); + setState(89); + + if (!(precpred(_ctx, 4))) throw FailedPredicateException(this, "precpred(_ctx, 4)"); + setState(90); + dynamic_cast(_localctx)->op = _input->LT(1); + _la = _input->LA(1); + if (!(_la == ExprParser::T__4 + + || _la == ExprParser::T__5)) { + dynamic_cast(_localctx)->op = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(91); + right_expr(0); + break; + } + + case 2: { + auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); + _localctx = newContext; + pushNewRecursionContext(newContext, startState, RuleShift_expr); + setState(92); + + if (!(precpred(_ctx, 3))) throw FailedPredicateException(this, "precpred(_ctx, 3)"); + setState(93); + dynamic_cast(_localctx)->op = _input->LT(1); + _la = _input->LA(1); + if (!(_la == ExprParser::T__1 + + || _la == ExprParser::T__6)) { + dynamic_cast(_localctx)->op = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(94); + right_expr(0); + break; + } + + } + } + setState(99); + _errHandler->sync(this); + alt = getInterpreter()->adaptivePredict(_input, 7, _ctx); + } + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + return _localctx; +} + +//----------------- Right_exprContext ------------------------------------------------------------------ + +ExprParser::Right_exprContext::Right_exprContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + + +size_t ExprParser::Right_exprContext::getRuleIndex() const { + return ExprParser::RuleRight_expr; +} + +void ExprParser::Right_exprContext::copyFrom(Right_exprContext *ctx) { + ParserRuleContext::copyFrom(ctx); +} + +//----------------- RightExpressionContext ------------------------------------------------------------------ + +ExprParser::ExprContext* ExprParser::RightExpressionContext::expr() { + return getRuleContext(0); +} + +ExprParser::RightExpressionContext::RightExpressionContext(Right_exprContext *ctx) { copyFrom(ctx); } + +antlrcpp::Any ExprParser::RightExpressionContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitRightExpression(this); + else + return visitor->visitChildren(this); +} +//----------------- RightMuldivContext ------------------------------------------------------------------ + +std::vector ExprParser::RightMuldivContext::right_expr() { + return getRuleContexts(); +} + +ExprParser::Right_exprContext* ExprParser::RightMuldivContext::right_expr(size_t i) { + return getRuleContext(i); +} + +ExprParser::RightMuldivContext::RightMuldivContext(Right_exprContext *ctx) { copyFrom(ctx); } + +antlrcpp::Any ExprParser::RightMuldivContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitRightMuldiv(this); + else + return visitor->visitChildren(this); +} +//----------------- RightAtomContext ------------------------------------------------------------------ + +ExprParser::AtomContext* ExprParser::RightAtomContext::atom() { + return getRuleContext(0); +} + +ExprParser::RightAtomContext::RightAtomContext(Right_exprContext *ctx) { copyFrom(ctx); } + +antlrcpp::Any ExprParser::RightAtomContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitRightAtom(this); + else + return visitor->visitChildren(this); +} + +ExprParser::Right_exprContext* ExprParser::right_expr() { + return right_expr(0); +} + +ExprParser::Right_exprContext* ExprParser::right_expr(int precedence) { + ParserRuleContext *parentContext = _ctx; + size_t parentState = getState(); + ExprParser::Right_exprContext *_localctx = _tracker.createInstance(_ctx, parentState); + ExprParser::Right_exprContext *previousContext = _localctx; + (void)previousContext; // Silence compiler, in case the context is not used by generated code. + size_t startState = 10; + enterRecursionRule(_localctx, 10, ExprParser::RuleRight_expr, precedence); + + size_t _la = 0; + + auto onExit = finally([=] { + unrollRecursionContexts(parentContext); + }); + try { + size_t alt; + enterOuterAlt(_localctx, 1); + setState(106); + _errHandler->sync(this); + switch (_input->LA(1)) { + case ExprParser::T__2: { + _localctx = _tracker.createInstance(_localctx); + _ctx = _localctx; + previousContext = _localctx; + + setState(101); + match(ExprParser::T__2); + setState(102); + expr(0); + setState(103); + match(ExprParser::T__3); + break; + } + + case ExprParser::NUMBER: + case ExprParser::IDENTIFIER: { + _localctx = _tracker.createInstance(_localctx); + _ctx = _localctx; + previousContext = _localctx; + setState(105); + atom(); + break; + } + + default: + throw NoViableAltException(this); + } + _ctx->stop = _input->LT(-1); + setState(113); + _errHandler->sync(this); + alt = getInterpreter()->adaptivePredict(_input, 9, _ctx); + while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { + if (alt == 1) { + if (!_parseListeners.empty()) + triggerExitRuleEvent(); + previousContext = _localctx; + auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); + _localctx = newContext; + pushNewRecursionContext(newContext, startState, RuleRight_expr); + setState(108); + + if (!(precpred(_ctx, 3))) throw FailedPredicateException(this, "precpred(_ctx, 3)"); + setState(109); + dynamic_cast(_localctx)->op = _input->LT(1); + _la = _input->LA(1); + if (!(_la == ExprParser::T__4 + + || _la == ExprParser::T__5)) { + dynamic_cast(_localctx)->op = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(110); + right_expr(4); + } + setState(115); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 5, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 9, _ctx); } } catch (RecognitionException &e) { @@ -855,7 +1077,9 @@ ExprParser::ExprContext* ExprParser::expr(int precedence) { bool ExprParser::sempred(RuleContext *context, size_t ruleIndex, size_t predicateIndex) { switch (ruleIndex) { - case 2: return exprSempred(antlrcpp::downCast(context), predicateIndex); + case 1: return exprSempred(dynamic_cast(context), predicateIndex); + case 4: return shift_exprSempred(dynamic_cast(context), predicateIndex); + case 5: return right_exprSempred(dynamic_cast(context), predicateIndex); default: break; @@ -865,9 +1089,9 @@ bool ExprParser::sempred(RuleContext *context, size_t ruleIndex, size_t predicat bool ExprParser::exprSempred(ExprContext *_localctx, size_t predicateIndex) { switch (predicateIndex) { - case 0: return precpred(_ctx, 12); - case 1: return precpred(_ctx, 11); - case 2: return precpred(_ctx, 10); + case 0: return precpred(_ctx, 8); + case 1: return precpred(_ctx, 7); + case 2: return precpred(_ctx, 6); default: break; @@ -875,10 +1099,159 @@ bool ExprParser::exprSempred(ExprContext *_localctx, size_t predicateIndex) { return true; } -void ExprParser::initialize() { -#if ANTLR4_USE_THREAD_LOCAL_CACHE - exprParserInitialize(); -#else - ::antlr4::internal::call_once(exprParserOnceFlag, exprParserInitialize); -#endif +bool ExprParser::shift_exprSempred(Shift_exprContext *_localctx, size_t predicateIndex) { + switch (predicateIndex) { + case 3: return precpred(_ctx, 4); + case 4: return precpred(_ctx, 3); + + default: + break; + } + return true; } + +bool ExprParser::right_exprSempred(Right_exprContext *_localctx, size_t predicateIndex) { + switch (predicateIndex) { + case 5: return precpred(_ctx, 3); + + default: + break; + } + return true; +} + +// Static vars and initialization. +std::vector ExprParser::_decisionToDFA; +atn::PredictionContextCache ExprParser::_sharedContextCache; + +// We own the ATN which in turn owns the ATN states. +atn::ATN ExprParser::_atn; +std::vector ExprParser::_serializedATN; + +std::vector ExprParser::_ruleNames = { + "fullexpr", "expr", "atom", "shift", "shift_expr", "right_expr" +}; + +std::vector ExprParser::_literalNames = { + "", "'.'", "'-'", "'('", "')'", "'/'", "'*'", "'+'", "'sum'", "'..'", + "','", "'['", "']'", "", "'t'" +}; + +std::vector ExprParser::_symbolicNames = { + "", "", "", "", "", "", "", "", "", "", "", "", "", "NUMBER", "TIME", + "IDENTIFIER", "COMPARISON", "WS" +}; + +dfa::Vocabulary ExprParser::_vocabulary(_literalNames, _symbolicNames); + +std::vector ExprParser::_tokenNames; + +ExprParser::Initializer::Initializer() { + for (size_t i = 0; i < _symbolicNames.size(); ++i) { + std::string name = _vocabulary.getLiteralName(i); + if (name.empty()) { + name = _vocabulary.getSymbolicName(i); + } + + if (name.empty()) { + _tokenNames.push_back(""); + } else { + _tokenNames.push_back(name); + } + } + + _serializedATN = { + 0x3, 0x608b, 0xa72a, 0x8133, 0xb9ed, 0x417c, 0x3be7, 0x7786, 0x5964, + 0x3, 0x13, 0x77, 0x4, 0x2, 0x9, 0x2, 0x4, 0x3, 0x9, 0x3, 0x4, 0x4, 0x9, + 0x4, 0x4, 0x5, 0x9, 0x5, 0x4, 0x6, 0x9, 0x6, 0x4, 0x7, 0x9, 0x7, 0x3, + 0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, + 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, + 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, + 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, + 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, + 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, + 0x3, 0x5, 0x3, 0x3a, 0xa, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, + 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x7, 0x3, 0x45, 0xa, + 0x3, 0xc, 0x3, 0xe, 0x3, 0x48, 0xb, 0x3, 0x3, 0x4, 0x3, 0x4, 0x5, 0x4, + 0x4c, 0xa, 0x4, 0x3, 0x5, 0x3, 0x5, 0x5, 0x5, 0x50, 0xa, 0x5, 0x3, 0x6, + 0x3, 0x6, 0x3, 0x6, 0x3, 0x6, 0x3, 0x6, 0x3, 0x6, 0x3, 0x6, 0x3, 0x6, + 0x5, 0x6, 0x5a, 0xa, 0x6, 0x3, 0x6, 0x3, 0x6, 0x3, 0x6, 0x3, 0x6, 0x3, + 0x6, 0x3, 0x6, 0x7, 0x6, 0x62, 0xa, 0x6, 0xc, 0x6, 0xe, 0x6, 0x65, 0xb, + 0x6, 0x3, 0x7, 0x3, 0x7, 0x3, 0x7, 0x3, 0x7, 0x3, 0x7, 0x3, 0x7, 0x5, + 0x7, 0x6d, 0xa, 0x7, 0x3, 0x7, 0x3, 0x7, 0x3, 0x7, 0x7, 0x7, 0x72, 0xa, + 0x7, 0xc, 0x7, 0xe, 0x7, 0x75, 0xb, 0x7, 0x3, 0x7, 0x2, 0x5, 0x4, 0xa, + 0xc, 0x8, 0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0x2, 0x4, 0x3, 0x2, 0x7, 0x8, + 0x4, 0x2, 0x4, 0x4, 0x9, 0x9, 0x2, 0x82, 0x2, 0xe, 0x3, 0x2, 0x2, 0x2, + 0x4, 0x39, 0x3, 0x2, 0x2, 0x2, 0x6, 0x4b, 0x3, 0x2, 0x2, 0x2, 0x8, 0x4d, + 0x3, 0x2, 0x2, 0x2, 0xa, 0x59, 0x3, 0x2, 0x2, 0x2, 0xc, 0x6c, 0x3, 0x2, + 0x2, 0x2, 0xe, 0xf, 0x5, 0x4, 0x3, 0x2, 0xf, 0x10, 0x7, 0x2, 0x2, 0x3, + 0x10, 0x3, 0x3, 0x2, 0x2, 0x2, 0x11, 0x12, 0x8, 0x3, 0x1, 0x2, 0x12, + 0x3a, 0x5, 0x6, 0x4, 0x2, 0x13, 0x14, 0x7, 0x11, 0x2, 0x2, 0x14, 0x15, + 0x7, 0x3, 0x2, 0x2, 0x15, 0x3a, 0x7, 0x11, 0x2, 0x2, 0x16, 0x17, 0x7, + 0x4, 0x2, 0x2, 0x17, 0x3a, 0x5, 0x4, 0x3, 0xc, 0x18, 0x19, 0x7, 0x5, + 0x2, 0x2, 0x19, 0x1a, 0x5, 0x4, 0x3, 0x2, 0x1a, 0x1b, 0x7, 0x6, 0x2, + 0x2, 0x1b, 0x3a, 0x3, 0x2, 0x2, 0x2, 0x1c, 0x1d, 0x7, 0xa, 0x2, 0x2, + 0x1d, 0x1e, 0x7, 0x5, 0x2, 0x2, 0x1e, 0x1f, 0x5, 0x4, 0x3, 0x2, 0x1f, + 0x20, 0x7, 0x6, 0x2, 0x2, 0x20, 0x3a, 0x3, 0x2, 0x2, 0x2, 0x21, 0x22, + 0x7, 0xa, 0x2, 0x2, 0x22, 0x23, 0x7, 0x5, 0x2, 0x2, 0x23, 0x24, 0x5, + 0x8, 0x5, 0x2, 0x24, 0x25, 0x7, 0xb, 0x2, 0x2, 0x25, 0x26, 0x5, 0x8, + 0x5, 0x2, 0x26, 0x27, 0x7, 0xc, 0x2, 0x2, 0x27, 0x28, 0x5, 0x4, 0x3, + 0x2, 0x28, 0x29, 0x7, 0x6, 0x2, 0x2, 0x29, 0x3a, 0x3, 0x2, 0x2, 0x2, + 0x2a, 0x2b, 0x7, 0x11, 0x2, 0x2, 0x2b, 0x2c, 0x7, 0x5, 0x2, 0x2, 0x2c, + 0x2d, 0x5, 0x4, 0x3, 0x2, 0x2d, 0x2e, 0x7, 0x6, 0x2, 0x2, 0x2e, 0x3a, + 0x3, 0x2, 0x2, 0x2, 0x2f, 0x30, 0x7, 0x11, 0x2, 0x2, 0x30, 0x31, 0x7, + 0xd, 0x2, 0x2, 0x31, 0x32, 0x5, 0x8, 0x5, 0x2, 0x32, 0x33, 0x7, 0xe, + 0x2, 0x2, 0x33, 0x3a, 0x3, 0x2, 0x2, 0x2, 0x34, 0x35, 0x7, 0x11, 0x2, + 0x2, 0x35, 0x36, 0x7, 0xd, 0x2, 0x2, 0x36, 0x37, 0x5, 0x4, 0x3, 0x2, + 0x37, 0x38, 0x7, 0xe, 0x2, 0x2, 0x38, 0x3a, 0x3, 0x2, 0x2, 0x2, 0x39, + 0x11, 0x3, 0x2, 0x2, 0x2, 0x39, 0x13, 0x3, 0x2, 0x2, 0x2, 0x39, 0x16, + 0x3, 0x2, 0x2, 0x2, 0x39, 0x18, 0x3, 0x2, 0x2, 0x2, 0x39, 0x1c, 0x3, + 0x2, 0x2, 0x2, 0x39, 0x21, 0x3, 0x2, 0x2, 0x2, 0x39, 0x2a, 0x3, 0x2, + 0x2, 0x2, 0x39, 0x2f, 0x3, 0x2, 0x2, 0x2, 0x39, 0x34, 0x3, 0x2, 0x2, + 0x2, 0x3a, 0x46, 0x3, 0x2, 0x2, 0x2, 0x3b, 0x3c, 0xc, 0xa, 0x2, 0x2, + 0x3c, 0x3d, 0x9, 0x2, 0x2, 0x2, 0x3d, 0x45, 0x5, 0x4, 0x3, 0xb, 0x3e, + 0x3f, 0xc, 0x9, 0x2, 0x2, 0x3f, 0x40, 0x9, 0x3, 0x2, 0x2, 0x40, 0x45, + 0x5, 0x4, 0x3, 0xa, 0x41, 0x42, 0xc, 0x8, 0x2, 0x2, 0x42, 0x43, 0x7, + 0x12, 0x2, 0x2, 0x43, 0x45, 0x5, 0x4, 0x3, 0x9, 0x44, 0x3b, 0x3, 0x2, + 0x2, 0x2, 0x44, 0x3e, 0x3, 0x2, 0x2, 0x2, 0x44, 0x41, 0x3, 0x2, 0x2, + 0x2, 0x45, 0x48, 0x3, 0x2, 0x2, 0x2, 0x46, 0x44, 0x3, 0x2, 0x2, 0x2, + 0x46, 0x47, 0x3, 0x2, 0x2, 0x2, 0x47, 0x5, 0x3, 0x2, 0x2, 0x2, 0x48, + 0x46, 0x3, 0x2, 0x2, 0x2, 0x49, 0x4c, 0x7, 0xf, 0x2, 0x2, 0x4a, 0x4c, + 0x7, 0x11, 0x2, 0x2, 0x4b, 0x49, 0x3, 0x2, 0x2, 0x2, 0x4b, 0x4a, 0x3, + 0x2, 0x2, 0x2, 0x4c, 0x7, 0x3, 0x2, 0x2, 0x2, 0x4d, 0x4f, 0x7, 0x10, + 0x2, 0x2, 0x4e, 0x50, 0x5, 0xa, 0x6, 0x2, 0x4f, 0x4e, 0x3, 0x2, 0x2, + 0x2, 0x4f, 0x50, 0x3, 0x2, 0x2, 0x2, 0x50, 0x9, 0x3, 0x2, 0x2, 0x2, + 0x51, 0x52, 0x8, 0x6, 0x1, 0x2, 0x52, 0x53, 0x9, 0x3, 0x2, 0x2, 0x53, + 0x5a, 0x5, 0x6, 0x4, 0x2, 0x54, 0x55, 0x9, 0x3, 0x2, 0x2, 0x55, 0x56, + 0x7, 0x5, 0x2, 0x2, 0x56, 0x57, 0x5, 0x4, 0x3, 0x2, 0x57, 0x58, 0x7, + 0x6, 0x2, 0x2, 0x58, 0x5a, 0x3, 0x2, 0x2, 0x2, 0x59, 0x51, 0x3, 0x2, + 0x2, 0x2, 0x59, 0x54, 0x3, 0x2, 0x2, 0x2, 0x5a, 0x63, 0x3, 0x2, 0x2, + 0x2, 0x5b, 0x5c, 0xc, 0x6, 0x2, 0x2, 0x5c, 0x5d, 0x9, 0x2, 0x2, 0x2, + 0x5d, 0x62, 0x5, 0xc, 0x7, 0x2, 0x5e, 0x5f, 0xc, 0x5, 0x2, 0x2, 0x5f, + 0x60, 0x9, 0x3, 0x2, 0x2, 0x60, 0x62, 0x5, 0xc, 0x7, 0x2, 0x61, 0x5b, + 0x3, 0x2, 0x2, 0x2, 0x61, 0x5e, 0x3, 0x2, 0x2, 0x2, 0x62, 0x65, 0x3, + 0x2, 0x2, 0x2, 0x63, 0x61, 0x3, 0x2, 0x2, 0x2, 0x63, 0x64, 0x3, 0x2, + 0x2, 0x2, 0x64, 0xb, 0x3, 0x2, 0x2, 0x2, 0x65, 0x63, 0x3, 0x2, 0x2, + 0x2, 0x66, 0x67, 0x8, 0x7, 0x1, 0x2, 0x67, 0x68, 0x7, 0x5, 0x2, 0x2, + 0x68, 0x69, 0x5, 0x4, 0x3, 0x2, 0x69, 0x6a, 0x7, 0x6, 0x2, 0x2, 0x6a, + 0x6d, 0x3, 0x2, 0x2, 0x2, 0x6b, 0x6d, 0x5, 0x6, 0x4, 0x2, 0x6c, 0x66, + 0x3, 0x2, 0x2, 0x2, 0x6c, 0x6b, 0x3, 0x2, 0x2, 0x2, 0x6d, 0x73, 0x3, + 0x2, 0x2, 0x2, 0x6e, 0x6f, 0xc, 0x5, 0x2, 0x2, 0x6f, 0x70, 0x9, 0x2, + 0x2, 0x2, 0x70, 0x72, 0x5, 0xc, 0x7, 0x6, 0x71, 0x6e, 0x3, 0x2, 0x2, + 0x2, 0x72, 0x75, 0x3, 0x2, 0x2, 0x2, 0x73, 0x71, 0x3, 0x2, 0x2, 0x2, + 0x73, 0x74, 0x3, 0x2, 0x2, 0x2, 0x74, 0xd, 0x3, 0x2, 0x2, 0x2, 0x75, + 0x73, 0x3, 0x2, 0x2, 0x2, 0xc, 0x39, 0x44, 0x46, 0x4b, 0x4f, 0x59, 0x61, + 0x63, 0x6c, 0x73, + }; + + atn::ATNDeserializer deserializer; + _atn = deserializer.deserialize(_serializedATN); + + size_t count = _atn.getNumberOfDecisions(); + _decisionToDFA.reserve(count); + for (size_t i = 0; i < count; i++) { + _decisionToDFA.emplace_back(_atn.getDecisionState(i), i); + } +} + +ExprParser::Initializer ExprParser::_init; diff --git a/src/libs/antares/antlr-interface/ExprParser.h b/src/libs/antares/antlr-interface/ExprParser.h index aa1c8b6f09..24b2e340dc 100644 --- a/src/libs/antares/antlr-interface/ExprParser.h +++ b/src/libs/antares/antlr-interface/ExprParser.h @@ -1,5 +1,5 @@ -// Generated from Expr.g4 by ANTLR 4.13.1 +// Generated from Expr.g4 by ANTLR 4.7.2 #pragma once @@ -13,34 +13,31 @@ class ExprParser : public antlr4::Parser { public: enum { T__0 = 1, T__1 = 2, T__2 = 3, T__3 = 4, T__4 = 5, T__5 = 6, T__6 = 7, - T__7 = 8, T__8 = 9, NUMBER = 10, TIME = 11, IDENTIFIER = 12, COMPARISON = 13, - ADDSUB = 14, MULDIV = 15, LBRACKET = 16, RBRACKET = 17, WS = 18 + T__7 = 8, T__8 = 9, T__9 = 10, T__10 = 11, T__11 = 12, NUMBER = 13, + TIME = 14, IDENTIFIER = 15, COMPARISON = 16, WS = 17 }; enum { - RuleFullexpr = 0, RuleShift = 1, RuleExpr = 2 + RuleFullexpr = 0, RuleExpr = 1, RuleAtom = 2, RuleShift = 3, RuleShift_expr = 4, + RuleRight_expr = 5 }; - explicit ExprParser(antlr4::TokenStream *input); + ExprParser(antlr4::TokenStream *input); + ~ExprParser(); - ExprParser(antlr4::TokenStream *input, const antlr4::atn::ParserATNSimulatorOptions &options); - - ~ExprParser() override; - - std::string getGrammarFileName() const override; - - const antlr4::atn::ATN& getATN() const override; - - const std::vector& getRuleNames() const override; - - const antlr4::dfa::Vocabulary& getVocabulary() const override; - - antlr4::atn::SerializedATNView getSerializedATN() const override; + virtual std::string getGrammarFileName() const override; + virtual const antlr4::atn::ATN& getATN() const override { return _atn; }; + virtual const std::vector& getTokenNames() const override { return _tokenNames; }; // deprecated: use vocabulary instead. + virtual const std::vector& getRuleNames() const override; + virtual antlr4::dfa::Vocabulary& getVocabulary() const override; class FullexprContext; + class ExprContext; + class AtomContext; class ShiftContext; - class ExprContext; + class Shift_exprContext; + class Right_exprContext; class FullexprContext : public antlr4::ParserRuleContext { public: @@ -49,28 +46,12 @@ class ExprParser : public antlr4::Parser { ExprContext *expr(); antlr4::tree::TerminalNode *EOF(); - - virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; FullexprContext* fullexpr(); - class ShiftContext : public antlr4::ParserRuleContext { - public: - antlr4::Token *op = nullptr; - ShiftContext(antlr4::ParserRuleContext *parent, size_t invokingState); - virtual size_t getRuleIndex() const override; - antlr4::tree::TerminalNode *TIME(); - ExprContext *expr(); - - - virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; - - }; - - ShiftContext* shift(); - class ExprContext : public antlr4::ParserRuleContext { public: ExprContext(antlr4::ParserRuleContext *parent, size_t invokingState); @@ -84,13 +65,16 @@ class ExprParser : public antlr4::Parser { }; - class IdentifierContext : public ExprContext { + class TimeSumContext : public ExprContext { public: - IdentifierContext(ExprContext *ctx); + TimeSumContext(ExprContext *ctx); - antlr4::tree::TerminalNode *IDENTIFIER(); - - virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + ExprParser::ShiftContext *from = nullptr; + ExprParser::ShiftContext *to = nullptr; + ExprContext *expr(); + std::vector shift(); + ShiftContext* shift(size_t i); + virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; class NegationContext : public ExprContext { @@ -98,8 +82,15 @@ class ExprParser : public antlr4::Parser { NegationContext(ExprContext *ctx); ExprContext *expr(); + virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class UnsignedAtomContext : public ExprContext { + public: + UnsignedAtomContext(ExprContext *ctx); - virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + AtomContext *atom(); + virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; class ExpressionContext : public ExprContext { @@ -107,8 +98,16 @@ class ExprParser : public antlr4::Parser { ExpressionContext(ExprContext *ctx); ExprContext *expr(); + virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class TimeIndexContext : public ExprContext { + public: + TimeIndexContext(ExprContext *ctx); - virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + antlr4::tree::TerminalNode *IDENTIFIER(); + ExprContext *expr(); + virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; class ComparisonContext : public ExprContext { @@ -118,8 +117,33 @@ class ExprParser : public antlr4::Parser { std::vector expr(); ExprContext* expr(size_t i); antlr4::tree::TerminalNode *COMPARISON(); + virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class AllTimeSumContext : public ExprContext { + public: + AllTimeSumContext(ExprContext *ctx); + + ExprContext *expr(); + virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class TimeShiftContext : public ExprContext { + public: + TimeShiftContext(ExprContext *ctx); + + antlr4::tree::TerminalNode *IDENTIFIER(); + ShiftContext *shift(); + virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class FunctionContext : public ExprContext { + public: + FunctionContext(ExprContext *ctx); - virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + antlr4::tree::TerminalNode *IDENTIFIER(); + ExprContext *expr(); + virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; class AddsubContext : public ExprContext { @@ -129,8 +153,7 @@ class ExprParser : public antlr4::Parser { antlr4::Token *op = nullptr; std::vector expr(); ExprContext* expr(size_t i); - - virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; class PortFieldContext : public ExprContext { @@ -139,8 +162,7 @@ class ExprParser : public antlr4::Parser { std::vector IDENTIFIER(); antlr4::tree::TerminalNode* IDENTIFIER(size_t i); - - virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; class MuldivContext : public ExprContext { @@ -150,95 +172,171 @@ class ExprParser : public antlr4::Parser { antlr4::Token *op = nullptr; std::vector expr(); ExprContext* expr(size_t i); + virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; - virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + ExprContext* expr(); + ExprContext* expr(int precedence); + class AtomContext : public antlr4::ParserRuleContext { + public: + AtomContext(antlr4::ParserRuleContext *parent, size_t invokingState); + + AtomContext() = default; + void copyFrom(AtomContext *context); + using antlr4::ParserRuleContext::copyFrom; + + virtual size_t getRuleIndex() const override; + + }; - class NumberContext : public ExprContext { + class NumberContext : public AtomContext { public: - NumberContext(ExprContext *ctx); + NumberContext(AtomContext *ctx); antlr4::tree::TerminalNode *NUMBER(); - - virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; - class TimeIndexContext : public ExprContext { + class IdentifierContext : public AtomContext { public: - TimeIndexContext(ExprContext *ctx); + IdentifierContext(AtomContext *ctx); antlr4::tree::TerminalNode *IDENTIFIER(); - antlr4::tree::TerminalNode *LBRACKET(); - std::vector expr(); - ExprContext* expr(size_t i); - antlr4::tree::TerminalNode *RBRACKET(); + virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; - virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + AtomContext* atom(); + + class ShiftContext : public antlr4::ParserRuleContext { + public: + ShiftContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *TIME(); + Shift_exprContext *shift_expr(); + + virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; - class TimeShiftContext : public ExprContext { + ShiftContext* shift(); + + class Shift_exprContext : public antlr4::ParserRuleContext { public: - TimeShiftContext(ExprContext *ctx); + Shift_exprContext(antlr4::ParserRuleContext *parent, size_t invokingState); + + Shift_exprContext() = default; + void copyFrom(Shift_exprContext *context); + using antlr4::ParserRuleContext::copyFrom; - antlr4::tree::TerminalNode *IDENTIFIER(); - antlr4::tree::TerminalNode *LBRACKET(); - std::vector shift(); - ShiftContext* shift(size_t i); - antlr4::tree::TerminalNode *RBRACKET(); + virtual size_t getRuleIndex() const override; - virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; - class FunctionContext : public ExprContext { + class SignedAtomContext : public Shift_exprContext { public: - FunctionContext(ExprContext *ctx); + SignedAtomContext(Shift_exprContext *ctx); - antlr4::tree::TerminalNode *IDENTIFIER(); + antlr4::Token *op = nullptr; + AtomContext *atom(); + virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class SignedExpressionContext : public Shift_exprContext { + public: + SignedExpressionContext(Shift_exprContext *ctx); + + antlr4::Token *op = nullptr; ExprContext *expr(); + virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; - virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + class ShiftMuldivContext : public Shift_exprContext { + public: + ShiftMuldivContext(Shift_exprContext *ctx); + + antlr4::Token *op = nullptr; + Shift_exprContext *shift_expr(); + Right_exprContext *right_expr(); + virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; - class TimeShiftRangeContext : public ExprContext { + class ShiftAddsubContext : public Shift_exprContext { public: - TimeShiftRangeContext(ExprContext *ctx); + ShiftAddsubContext(Shift_exprContext *ctx); - ExprParser::ShiftContext *shift1 = nullptr; - ExprParser::ShiftContext *shift2 = nullptr; - antlr4::tree::TerminalNode *IDENTIFIER(); - antlr4::tree::TerminalNode *LBRACKET(); - antlr4::tree::TerminalNode *RBRACKET(); - std::vector shift(); - ShiftContext* shift(size_t i); + antlr4::Token *op = nullptr; + Shift_exprContext *shift_expr(); + Right_exprContext *right_expr(); + virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; - virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + Shift_exprContext* shift_expr(); + Shift_exprContext* shift_expr(int precedence); + class Right_exprContext : public antlr4::ParserRuleContext { + public: + Right_exprContext(antlr4::ParserRuleContext *parent, size_t invokingState); + + Right_exprContext() = default; + void copyFrom(Right_exprContext *context); + using antlr4::ParserRuleContext::copyFrom; + + virtual size_t getRuleIndex() const override; + + }; - class TimeRangeContext : public ExprContext { + class RightExpressionContext : public Right_exprContext { public: - TimeRangeContext(ExprContext *ctx); + RightExpressionContext(Right_exprContext *ctx); - antlr4::tree::TerminalNode *IDENTIFIER(); - antlr4::tree::TerminalNode *LBRACKET(); - std::vector expr(); - ExprContext* expr(size_t i); - antlr4::tree::TerminalNode *RBRACKET(); + ExprContext *expr(); + virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class RightMuldivContext : public Right_exprContext { + public: + RightMuldivContext(Right_exprContext *ctx); - virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + antlr4::Token *op = nullptr; + std::vector right_expr(); + Right_exprContext* right_expr(size_t i); + virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; - ExprContext* expr(); - ExprContext* expr(int precedence); + class RightAtomContext : public Right_exprContext { + public: + RightAtomContext(Right_exprContext *ctx); + + AtomContext *atom(); + virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; - bool sempred(antlr4::RuleContext *_localctx, size_t ruleIndex, size_t predicateIndex) override; + Right_exprContext* right_expr(); + Right_exprContext* right_expr(int precedence); + virtual bool sempred(antlr4::RuleContext *_localctx, size_t ruleIndex, size_t predicateIndex) override; bool exprSempred(ExprContext *_localctx, size_t predicateIndex); - - // By default the static state used to implement the parser is lazily initialized during the first - // call to the constructor. You can call this function if you wish to initialize the static state - // ahead of time. - static void initialize(); + bool shift_exprSempred(Shift_exprContext *_localctx, size_t predicateIndex); + bool right_exprSempred(Right_exprContext *_localctx, size_t predicateIndex); private: + static std::vector _decisionToDFA; + static antlr4::atn::PredictionContextCache _sharedContextCache; + static std::vector _ruleNames; + static std::vector _tokenNames; + + static std::vector _literalNames; + static std::vector _symbolicNames; + static antlr4::dfa::Vocabulary _vocabulary; + static antlr4::atn::ATN _atn; + static std::vector _serializedATN; + + + struct Initializer { + Initializer(); + }; + static Initializer _init; }; diff --git a/src/libs/antares/antlr-interface/ExprVisitor.cpp b/src/libs/antares/antlr-interface/ExprVisitor.cpp index c214f0f76f..c529765b08 100644 --- a/src/libs/antares/antlr-interface/ExprVisitor.cpp +++ b/src/libs/antares/antlr-interface/ExprVisitor.cpp @@ -1,5 +1,5 @@ -// Generated from Expr.g4 by ANTLR 4.13.1 +// Generated from Expr.g4 by ANTLR 4.7.2 #include "ExprVisitor.h" diff --git a/src/libs/antares/antlr-interface/ExprVisitor.h b/src/libs/antares/antlr-interface/ExprVisitor.h index c064d6d54a..231fc85982 100644 --- a/src/libs/antares/antlr-interface/ExprVisitor.h +++ b/src/libs/antares/antlr-interface/ExprVisitor.h @@ -1,5 +1,5 @@ -// Generated from Expr.g4 by ANTLR 4.13.1 +// Generated from Expr.g4 by ANTLR 4.7.2 #pragma once @@ -19,35 +19,51 @@ class ExprVisitor : public antlr4::tree::AbstractParseTreeVisitor { /** * Visit parse trees produced by ExprParser. */ - virtual std::any visitFullexpr(ExprParser::FullexprContext *context) = 0; + virtual antlrcpp::Any visitFullexpr(ExprParser::FullexprContext *context) = 0; - virtual std::any visitShift(ExprParser::ShiftContext *context) = 0; + virtual antlrcpp::Any visitTimeSum(ExprParser::TimeSumContext *context) = 0; - virtual std::any visitIdentifier(ExprParser::IdentifierContext *context) = 0; + virtual antlrcpp::Any visitNegation(ExprParser::NegationContext *context) = 0; - virtual std::any visitNegation(ExprParser::NegationContext *context) = 0; + virtual antlrcpp::Any visitUnsignedAtom(ExprParser::UnsignedAtomContext *context) = 0; - virtual std::any visitExpression(ExprParser::ExpressionContext *context) = 0; + virtual antlrcpp::Any visitExpression(ExprParser::ExpressionContext *context) = 0; - virtual std::any visitComparison(ExprParser::ComparisonContext *context) = 0; + virtual antlrcpp::Any visitTimeIndex(ExprParser::TimeIndexContext *context) = 0; - virtual std::any visitAddsub(ExprParser::AddsubContext *context) = 0; + virtual antlrcpp::Any visitComparison(ExprParser::ComparisonContext *context) = 0; - virtual std::any visitPortField(ExprParser::PortFieldContext *context) = 0; + virtual antlrcpp::Any visitAllTimeSum(ExprParser::AllTimeSumContext *context) = 0; - virtual std::any visitMuldiv(ExprParser::MuldivContext *context) = 0; + virtual antlrcpp::Any visitTimeShift(ExprParser::TimeShiftContext *context) = 0; - virtual std::any visitNumber(ExprParser::NumberContext *context) = 0; + virtual antlrcpp::Any visitFunction(ExprParser::FunctionContext *context) = 0; - virtual std::any visitTimeIndex(ExprParser::TimeIndexContext *context) = 0; + virtual antlrcpp::Any visitAddsub(ExprParser::AddsubContext *context) = 0; - virtual std::any visitTimeShift(ExprParser::TimeShiftContext *context) = 0; + virtual antlrcpp::Any visitPortField(ExprParser::PortFieldContext *context) = 0; - virtual std::any visitFunction(ExprParser::FunctionContext *context) = 0; + virtual antlrcpp::Any visitMuldiv(ExprParser::MuldivContext *context) = 0; - virtual std::any visitTimeShiftRange(ExprParser::TimeShiftRangeContext *context) = 0; + virtual antlrcpp::Any visitNumber(ExprParser::NumberContext *context) = 0; - virtual std::any visitTimeRange(ExprParser::TimeRangeContext *context) = 0; + virtual antlrcpp::Any visitIdentifier(ExprParser::IdentifierContext *context) = 0; + + virtual antlrcpp::Any visitShift(ExprParser::ShiftContext *context) = 0; + + virtual antlrcpp::Any visitSignedAtom(ExprParser::SignedAtomContext *context) = 0; + + virtual antlrcpp::Any visitSignedExpression(ExprParser::SignedExpressionContext *context) = 0; + + virtual antlrcpp::Any visitShiftMuldiv(ExprParser::ShiftMuldivContext *context) = 0; + + virtual antlrcpp::Any visitShiftAddsub(ExprParser::ShiftAddsubContext *context) = 0; + + virtual antlrcpp::Any visitRightExpression(ExprParser::RightExpressionContext *context) = 0; + + virtual antlrcpp::Any visitRightMuldiv(ExprParser::RightMuldivContext *context) = 0; + + virtual antlrcpp::Any visitRightAtom(ExprParser::RightAtomContext *context) = 0; }; From 9886e9b7468ce8568c830a9d882bc0806a6161cf Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Wed, 23 Oct 2024 14:58:15 +0200 Subject: [PATCH 03/92] Use antlr 4.13 --- src/libs/antares/antlr-interface/Expr.interp | 2 +- .../antlr-interface/ExprBaseVisitor.cpp | 2 +- .../antares/antlr-interface/ExprBaseVisitor.h | 48 +- .../antares/antlr-interface/ExprLexer.cpp | 291 ++++++------- src/libs/antares/antlr-interface/ExprLexer.h | 47 +- .../antares/antlr-interface/ExprLexer.interp | 2 +- .../antares/antlr-interface/ExprParser.cpp | 412 ++++++++++-------- src/libs/antares/antlr-interface/ExprParser.h | 116 +++-- .../antares/antlr-interface/ExprVisitor.cpp | 2 +- .../antares/antlr-interface/ExprVisitor.h | 48 +- 10 files changed, 504 insertions(+), 466 deletions(-) diff --git a/src/libs/antares/antlr-interface/Expr.interp b/src/libs/antares/antlr-interface/Expr.interp index 30fb71c08d..d4189d97c1 100644 --- a/src/libs/antares/antlr-interface/Expr.interp +++ b/src/libs/antares/antlr-interface/Expr.interp @@ -48,4 +48,4 @@ right_expr atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 19, 119, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 58, 10, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 3, 69, 10, 3, 12, 3, 14, 3, 72, 11, 3, 3, 4, 3, 4, 5, 4, 76, 10, 4, 3, 5, 3, 5, 5, 5, 80, 10, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 90, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 98, 10, 6, 12, 6, 14, 6, 101, 11, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 109, 10, 7, 3, 7, 3, 7, 3, 7, 7, 7, 114, 10, 7, 12, 7, 14, 7, 117, 11, 7, 3, 7, 2, 5, 4, 10, 12, 8, 2, 4, 6, 8, 10, 12, 2, 4, 3, 2, 7, 8, 4, 2, 4, 4, 9, 9, 2, 130, 2, 14, 3, 2, 2, 2, 4, 57, 3, 2, 2, 2, 6, 75, 3, 2, 2, 2, 8, 77, 3, 2, 2, 2, 10, 89, 3, 2, 2, 2, 12, 108, 3, 2, 2, 2, 14, 15, 5, 4, 3, 2, 15, 16, 7, 2, 2, 3, 16, 3, 3, 2, 2, 2, 17, 18, 8, 3, 1, 2, 18, 58, 5, 6, 4, 2, 19, 20, 7, 17, 2, 2, 20, 21, 7, 3, 2, 2, 21, 58, 7, 17, 2, 2, 22, 23, 7, 4, 2, 2, 23, 58, 5, 4, 3, 12, 24, 25, 7, 5, 2, 2, 25, 26, 5, 4, 3, 2, 26, 27, 7, 6, 2, 2, 27, 58, 3, 2, 2, 2, 28, 29, 7, 10, 2, 2, 29, 30, 7, 5, 2, 2, 30, 31, 5, 4, 3, 2, 31, 32, 7, 6, 2, 2, 32, 58, 3, 2, 2, 2, 33, 34, 7, 10, 2, 2, 34, 35, 7, 5, 2, 2, 35, 36, 5, 8, 5, 2, 36, 37, 7, 11, 2, 2, 37, 38, 5, 8, 5, 2, 38, 39, 7, 12, 2, 2, 39, 40, 5, 4, 3, 2, 40, 41, 7, 6, 2, 2, 41, 58, 3, 2, 2, 2, 42, 43, 7, 17, 2, 2, 43, 44, 7, 5, 2, 2, 44, 45, 5, 4, 3, 2, 45, 46, 7, 6, 2, 2, 46, 58, 3, 2, 2, 2, 47, 48, 7, 17, 2, 2, 48, 49, 7, 13, 2, 2, 49, 50, 5, 8, 5, 2, 50, 51, 7, 14, 2, 2, 51, 58, 3, 2, 2, 2, 52, 53, 7, 17, 2, 2, 53, 54, 7, 13, 2, 2, 54, 55, 5, 4, 3, 2, 55, 56, 7, 14, 2, 2, 56, 58, 3, 2, 2, 2, 57, 17, 3, 2, 2, 2, 57, 19, 3, 2, 2, 2, 57, 22, 3, 2, 2, 2, 57, 24, 3, 2, 2, 2, 57, 28, 3, 2, 2, 2, 57, 33, 3, 2, 2, 2, 57, 42, 3, 2, 2, 2, 57, 47, 3, 2, 2, 2, 57, 52, 3, 2, 2, 2, 58, 70, 3, 2, 2, 2, 59, 60, 12, 10, 2, 2, 60, 61, 9, 2, 2, 2, 61, 69, 5, 4, 3, 11, 62, 63, 12, 9, 2, 2, 63, 64, 9, 3, 2, 2, 64, 69, 5, 4, 3, 10, 65, 66, 12, 8, 2, 2, 66, 67, 7, 18, 2, 2, 67, 69, 5, 4, 3, 9, 68, 59, 3, 2, 2, 2, 68, 62, 3, 2, 2, 2, 68, 65, 3, 2, 2, 2, 69, 72, 3, 2, 2, 2, 70, 68, 3, 2, 2, 2, 70, 71, 3, 2, 2, 2, 71, 5, 3, 2, 2, 2, 72, 70, 3, 2, 2, 2, 73, 76, 7, 15, 2, 2, 74, 76, 7, 17, 2, 2, 75, 73, 3, 2, 2, 2, 75, 74, 3, 2, 2, 2, 76, 7, 3, 2, 2, 2, 77, 79, 7, 16, 2, 2, 78, 80, 5, 10, 6, 2, 79, 78, 3, 2, 2, 2, 79, 80, 3, 2, 2, 2, 80, 9, 3, 2, 2, 2, 81, 82, 8, 6, 1, 2, 82, 83, 9, 3, 2, 2, 83, 90, 5, 6, 4, 2, 84, 85, 9, 3, 2, 2, 85, 86, 7, 5, 2, 2, 86, 87, 5, 4, 3, 2, 87, 88, 7, 6, 2, 2, 88, 90, 3, 2, 2, 2, 89, 81, 3, 2, 2, 2, 89, 84, 3, 2, 2, 2, 90, 99, 3, 2, 2, 2, 91, 92, 12, 6, 2, 2, 92, 93, 9, 2, 2, 2, 93, 98, 5, 12, 7, 2, 94, 95, 12, 5, 2, 2, 95, 96, 9, 3, 2, 2, 96, 98, 5, 12, 7, 2, 97, 91, 3, 2, 2, 2, 97, 94, 3, 2, 2, 2, 98, 101, 3, 2, 2, 2, 99, 97, 3, 2, 2, 2, 99, 100, 3, 2, 2, 2, 100, 11, 3, 2, 2, 2, 101, 99, 3, 2, 2, 2, 102, 103, 8, 7, 1, 2, 103, 104, 7, 5, 2, 2, 104, 105, 5, 4, 3, 2, 105, 106, 7, 6, 2, 2, 106, 109, 3, 2, 2, 2, 107, 109, 5, 6, 4, 2, 108, 102, 3, 2, 2, 2, 108, 107, 3, 2, 2, 2, 109, 115, 3, 2, 2, 2, 110, 111, 12, 5, 2, 2, 111, 112, 9, 2, 2, 2, 112, 114, 5, 12, 7, 6, 113, 110, 3, 2, 2, 2, 114, 117, 3, 2, 2, 2, 115, 113, 3, 2, 2, 2, 115, 116, 3, 2, 2, 2, 116, 13, 3, 2, 2, 2, 117, 115, 3, 2, 2, 2, 12, 57, 68, 70, 75, 79, 89, 97, 99, 108, 115] \ No newline at end of file +[4, 1, 17, 117, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 56, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 67, 8, 1, 10, 1, 12, 1, 70, 9, 1, 1, 2, 1, 2, 3, 2, 74, 8, 2, 1, 3, 1, 3, 3, 3, 78, 8, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 88, 8, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 5, 4, 96, 8, 4, 10, 4, 12, 4, 99, 9, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 107, 8, 5, 1, 5, 1, 5, 1, 5, 5, 5, 112, 8, 5, 10, 5, 12, 5, 115, 9, 5, 1, 5, 0, 3, 2, 8, 10, 6, 0, 2, 4, 6, 8, 10, 0, 2, 1, 0, 5, 6, 2, 0, 2, 2, 7, 7, 128, 0, 12, 1, 0, 0, 0, 2, 55, 1, 0, 0, 0, 4, 73, 1, 0, 0, 0, 6, 75, 1, 0, 0, 0, 8, 87, 1, 0, 0, 0, 10, 106, 1, 0, 0, 0, 12, 13, 3, 2, 1, 0, 13, 14, 5, 0, 0, 1, 14, 1, 1, 0, 0, 0, 15, 16, 6, 1, -1, 0, 16, 56, 3, 4, 2, 0, 17, 18, 5, 15, 0, 0, 18, 19, 5, 1, 0, 0, 19, 56, 5, 15, 0, 0, 20, 21, 5, 2, 0, 0, 21, 56, 3, 2, 1, 10, 22, 23, 5, 3, 0, 0, 23, 24, 3, 2, 1, 0, 24, 25, 5, 4, 0, 0, 25, 56, 1, 0, 0, 0, 26, 27, 5, 8, 0, 0, 27, 28, 5, 3, 0, 0, 28, 29, 3, 2, 1, 0, 29, 30, 5, 4, 0, 0, 30, 56, 1, 0, 0, 0, 31, 32, 5, 8, 0, 0, 32, 33, 5, 3, 0, 0, 33, 34, 3, 6, 3, 0, 34, 35, 5, 9, 0, 0, 35, 36, 3, 6, 3, 0, 36, 37, 5, 10, 0, 0, 37, 38, 3, 2, 1, 0, 38, 39, 5, 4, 0, 0, 39, 56, 1, 0, 0, 0, 40, 41, 5, 15, 0, 0, 41, 42, 5, 3, 0, 0, 42, 43, 3, 2, 1, 0, 43, 44, 5, 4, 0, 0, 44, 56, 1, 0, 0, 0, 45, 46, 5, 15, 0, 0, 46, 47, 5, 11, 0, 0, 47, 48, 3, 6, 3, 0, 48, 49, 5, 12, 0, 0, 49, 56, 1, 0, 0, 0, 50, 51, 5, 15, 0, 0, 51, 52, 5, 11, 0, 0, 52, 53, 3, 2, 1, 0, 53, 54, 5, 12, 0, 0, 54, 56, 1, 0, 0, 0, 55, 15, 1, 0, 0, 0, 55, 17, 1, 0, 0, 0, 55, 20, 1, 0, 0, 0, 55, 22, 1, 0, 0, 0, 55, 26, 1, 0, 0, 0, 55, 31, 1, 0, 0, 0, 55, 40, 1, 0, 0, 0, 55, 45, 1, 0, 0, 0, 55, 50, 1, 0, 0, 0, 56, 68, 1, 0, 0, 0, 57, 58, 10, 8, 0, 0, 58, 59, 7, 0, 0, 0, 59, 67, 3, 2, 1, 9, 60, 61, 10, 7, 0, 0, 61, 62, 7, 1, 0, 0, 62, 67, 3, 2, 1, 8, 63, 64, 10, 6, 0, 0, 64, 65, 5, 16, 0, 0, 65, 67, 3, 2, 1, 7, 66, 57, 1, 0, 0, 0, 66, 60, 1, 0, 0, 0, 66, 63, 1, 0, 0, 0, 67, 70, 1, 0, 0, 0, 68, 66, 1, 0, 0, 0, 68, 69, 1, 0, 0, 0, 69, 3, 1, 0, 0, 0, 70, 68, 1, 0, 0, 0, 71, 74, 5, 13, 0, 0, 72, 74, 5, 15, 0, 0, 73, 71, 1, 0, 0, 0, 73, 72, 1, 0, 0, 0, 74, 5, 1, 0, 0, 0, 75, 77, 5, 14, 0, 0, 76, 78, 3, 8, 4, 0, 77, 76, 1, 0, 0, 0, 77, 78, 1, 0, 0, 0, 78, 7, 1, 0, 0, 0, 79, 80, 6, 4, -1, 0, 80, 81, 7, 1, 0, 0, 81, 88, 3, 4, 2, 0, 82, 83, 7, 1, 0, 0, 83, 84, 5, 3, 0, 0, 84, 85, 3, 2, 1, 0, 85, 86, 5, 4, 0, 0, 86, 88, 1, 0, 0, 0, 87, 79, 1, 0, 0, 0, 87, 82, 1, 0, 0, 0, 88, 97, 1, 0, 0, 0, 89, 90, 10, 4, 0, 0, 90, 91, 7, 0, 0, 0, 91, 96, 3, 10, 5, 0, 92, 93, 10, 3, 0, 0, 93, 94, 7, 1, 0, 0, 94, 96, 3, 10, 5, 0, 95, 89, 1, 0, 0, 0, 95, 92, 1, 0, 0, 0, 96, 99, 1, 0, 0, 0, 97, 95, 1, 0, 0, 0, 97, 98, 1, 0, 0, 0, 98, 9, 1, 0, 0, 0, 99, 97, 1, 0, 0, 0, 100, 101, 6, 5, -1, 0, 101, 102, 5, 3, 0, 0, 102, 103, 3, 2, 1, 0, 103, 104, 5, 4, 0, 0, 104, 107, 1, 0, 0, 0, 105, 107, 3, 4, 2, 0, 106, 100, 1, 0, 0, 0, 106, 105, 1, 0, 0, 0, 107, 113, 1, 0, 0, 0, 108, 109, 10, 3, 0, 0, 109, 110, 7, 0, 0, 0, 110, 112, 3, 10, 5, 4, 111, 108, 1, 0, 0, 0, 112, 115, 1, 0, 0, 0, 113, 111, 1, 0, 0, 0, 113, 114, 1, 0, 0, 0, 114, 11, 1, 0, 0, 0, 115, 113, 1, 0, 0, 0, 10, 55, 66, 68, 73, 77, 87, 95, 97, 106, 113] \ No newline at end of file diff --git a/src/libs/antares/antlr-interface/ExprBaseVisitor.cpp b/src/libs/antares/antlr-interface/ExprBaseVisitor.cpp index 997ca28ff4..864d91febf 100644 --- a/src/libs/antares/antlr-interface/ExprBaseVisitor.cpp +++ b/src/libs/antares/antlr-interface/ExprBaseVisitor.cpp @@ -1,5 +1,5 @@ -// Generated from Expr.g4 by ANTLR 4.7.2 +// Generated from Expr.g4 by ANTLR 4.13.2 #include "ExprBaseVisitor.h" diff --git a/src/libs/antares/antlr-interface/ExprBaseVisitor.h b/src/libs/antares/antlr-interface/ExprBaseVisitor.h index 2090885903..5df811ca64 100644 --- a/src/libs/antares/antlr-interface/ExprBaseVisitor.h +++ b/src/libs/antares/antlr-interface/ExprBaseVisitor.h @@ -1,5 +1,5 @@ -// Generated from Expr.g4 by ANTLR 4.7.2 +// Generated from Expr.g4 by ANTLR 4.13.2 #pragma once @@ -15,95 +15,95 @@ class ExprBaseVisitor : public ExprVisitor { public: - virtual antlrcpp::Any visitFullexpr(ExprParser::FullexprContext *ctx) override { + virtual std::any visitFullexpr(ExprParser::FullexprContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitTimeSum(ExprParser::TimeSumContext *ctx) override { + virtual std::any visitTimeSum(ExprParser::TimeSumContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitNegation(ExprParser::NegationContext *ctx) override { + virtual std::any visitNegation(ExprParser::NegationContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitUnsignedAtom(ExprParser::UnsignedAtomContext *ctx) override { + virtual std::any visitUnsignedAtom(ExprParser::UnsignedAtomContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitExpression(ExprParser::ExpressionContext *ctx) override { + virtual std::any visitExpression(ExprParser::ExpressionContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitTimeIndex(ExprParser::TimeIndexContext *ctx) override { + virtual std::any visitTimeIndex(ExprParser::TimeIndexContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitComparison(ExprParser::ComparisonContext *ctx) override { + virtual std::any visitComparison(ExprParser::ComparisonContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitAllTimeSum(ExprParser::AllTimeSumContext *ctx) override { + virtual std::any visitAllTimeSum(ExprParser::AllTimeSumContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitTimeShift(ExprParser::TimeShiftContext *ctx) override { + virtual std::any visitTimeShift(ExprParser::TimeShiftContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitFunction(ExprParser::FunctionContext *ctx) override { + virtual std::any visitFunction(ExprParser::FunctionContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitAddsub(ExprParser::AddsubContext *ctx) override { + virtual std::any visitAddsub(ExprParser::AddsubContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitPortField(ExprParser::PortFieldContext *ctx) override { + virtual std::any visitPortField(ExprParser::PortFieldContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitMuldiv(ExprParser::MuldivContext *ctx) override { + virtual std::any visitMuldiv(ExprParser::MuldivContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitNumber(ExprParser::NumberContext *ctx) override { + virtual std::any visitNumber(ExprParser::NumberContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitIdentifier(ExprParser::IdentifierContext *ctx) override { + virtual std::any visitIdentifier(ExprParser::IdentifierContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitShift(ExprParser::ShiftContext *ctx) override { + virtual std::any visitShift(ExprParser::ShiftContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitSignedAtom(ExprParser::SignedAtomContext *ctx) override { + virtual std::any visitSignedAtom(ExprParser::SignedAtomContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitSignedExpression(ExprParser::SignedExpressionContext *ctx) override { + virtual std::any visitSignedExpression(ExprParser::SignedExpressionContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitShiftMuldiv(ExprParser::ShiftMuldivContext *ctx) override { + virtual std::any visitShiftMuldiv(ExprParser::ShiftMuldivContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitShiftAddsub(ExprParser::ShiftAddsubContext *ctx) override { + virtual std::any visitShiftAddsub(ExprParser::ShiftAddsubContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitRightExpression(ExprParser::RightExpressionContext *ctx) override { + virtual std::any visitRightExpression(ExprParser::RightExpressionContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitRightMuldiv(ExprParser::RightMuldivContext *ctx) override { + virtual std::any visitRightMuldiv(ExprParser::RightMuldivContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitRightAtom(ExprParser::RightAtomContext *ctx) override { + virtual std::any visitRightAtom(ExprParser::RightAtomContext *ctx) override { return visitChildren(ctx); } diff --git a/src/libs/antares/antlr-interface/ExprLexer.cpp b/src/libs/antares/antlr-interface/ExprLexer.cpp index a94bd776f0..6cb4377101 100644 --- a/src/libs/antares/antlr-interface/ExprLexer.cpp +++ b/src/libs/antares/antlr-interface/ExprLexer.cpp @@ -1,5 +1,5 @@ -// Generated from Expr.g4 by ANTLR 4.7.2 +// Generated from Expr.g4 by ANTLR 4.13.2 #include "ExprLexer.h" @@ -8,8 +8,128 @@ using namespace antlr4; + +using namespace antlr4; + +namespace { + +struct ExprLexerStaticData final { + ExprLexerStaticData(std::vector ruleNames, + std::vector channelNames, + std::vector modeNames, + std::vector literalNames, + std::vector symbolicNames) + : ruleNames(std::move(ruleNames)), channelNames(std::move(channelNames)), + modeNames(std::move(modeNames)), literalNames(std::move(literalNames)), + symbolicNames(std::move(symbolicNames)), + vocabulary(this->literalNames, this->symbolicNames) {} + + ExprLexerStaticData(const ExprLexerStaticData&) = delete; + ExprLexerStaticData(ExprLexerStaticData&&) = delete; + ExprLexerStaticData& operator=(const ExprLexerStaticData&) = delete; + ExprLexerStaticData& operator=(ExprLexerStaticData&&) = delete; + + std::vector decisionToDFA; + antlr4::atn::PredictionContextCache sharedContextCache; + const std::vector ruleNames; + const std::vector channelNames; + const std::vector modeNames; + const std::vector literalNames; + const std::vector symbolicNames; + const antlr4::dfa::Vocabulary vocabulary; + antlr4::atn::SerializedATNView serializedATN; + std::unique_ptr atn; +}; + +::antlr4::internal::OnceFlag exprlexerLexerOnceFlag; +#if ANTLR4_USE_THREAD_LOCAL_CACHE +static thread_local +#endif +std::unique_ptr exprlexerLexerStaticData = nullptr; + +void exprlexerLexerInitialize() { +#if ANTLR4_USE_THREAD_LOCAL_CACHE + if (exprlexerLexerStaticData != nullptr) { + return; + } +#else + assert(exprlexerLexerStaticData == nullptr); +#endif + auto staticData = std::make_unique( + std::vector{ + "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "T__8", + "T__9", "T__10", "T__11", "DIGIT", "CHAR", "CHAR_OR_DIGIT", "NUMBER", + "TIME", "IDENTIFIER", "COMPARISON", "WS" + }, + std::vector{ + "DEFAULT_TOKEN_CHANNEL", "HIDDEN" + }, + std::vector{ + "DEFAULT_MODE" + }, + std::vector{ + "", "'.'", "'-'", "'('", "')'", "'/'", "'*'", "'+'", "'sum'", "'..'", + "','", "'['", "']'", "", "'t'" + }, + std::vector{ + "", "", "", "", "", "", "", "", "", "", "", "", "", "NUMBER", "TIME", + "IDENTIFIER", "COMPARISON", "WS" + } + ); + static const int32_t serializedATNSegment[] = { + 4,0,17,109,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7, + 6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,13,2,14, + 7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,1,0,1,0,1,1,1, + 1,1,2,1,2,1,3,1,3,1,4,1,4,1,5,1,5,1,6,1,6,1,7,1,7,1,7,1,7,1,8,1,8,1,8, + 1,9,1,9,1,10,1,10,1,11,1,11,1,12,1,12,1,13,1,13,1,14,1,14,3,14,75,8,14, + 1,15,4,15,78,8,15,11,15,12,15,79,1,15,1,15,4,15,84,8,15,11,15,12,15,85, + 3,15,88,8,15,1,16,1,16,1,17,1,17,5,17,94,8,17,10,17,12,17,97,9,17,1,18, + 1,18,1,18,1,18,1,18,3,18,104,8,18,1,19,1,19,1,19,1,19,0,0,20,1,1,3,2, + 5,3,7,4,9,5,11,6,13,7,15,8,17,9,19,10,21,11,23,12,25,0,27,0,29,0,31,13, + 33,14,35,15,37,16,39,17,1,0,3,1,0,48,57,3,0,65,90,95,95,97,122,3,0,9, + 10,13,13,32,32,112,0,1,1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0, + 9,1,0,0,0,0,11,1,0,0,0,0,13,1,0,0,0,0,15,1,0,0,0,0,17,1,0,0,0,0,19,1, + 0,0,0,0,21,1,0,0,0,0,23,1,0,0,0,0,31,1,0,0,0,0,33,1,0,0,0,0,35,1,0,0, + 0,0,37,1,0,0,0,0,39,1,0,0,0,1,41,1,0,0,0,3,43,1,0,0,0,5,45,1,0,0,0,7, + 47,1,0,0,0,9,49,1,0,0,0,11,51,1,0,0,0,13,53,1,0,0,0,15,55,1,0,0,0,17, + 59,1,0,0,0,19,62,1,0,0,0,21,64,1,0,0,0,23,66,1,0,0,0,25,68,1,0,0,0,27, + 70,1,0,0,0,29,74,1,0,0,0,31,77,1,0,0,0,33,89,1,0,0,0,35,91,1,0,0,0,37, + 103,1,0,0,0,39,105,1,0,0,0,41,42,5,46,0,0,42,2,1,0,0,0,43,44,5,45,0,0, + 44,4,1,0,0,0,45,46,5,40,0,0,46,6,1,0,0,0,47,48,5,41,0,0,48,8,1,0,0,0, + 49,50,5,47,0,0,50,10,1,0,0,0,51,52,5,42,0,0,52,12,1,0,0,0,53,54,5,43, + 0,0,54,14,1,0,0,0,55,56,5,115,0,0,56,57,5,117,0,0,57,58,5,109,0,0,58, + 16,1,0,0,0,59,60,5,46,0,0,60,61,5,46,0,0,61,18,1,0,0,0,62,63,5,44,0,0, + 63,20,1,0,0,0,64,65,5,91,0,0,65,22,1,0,0,0,66,67,5,93,0,0,67,24,1,0,0, + 0,68,69,7,0,0,0,69,26,1,0,0,0,70,71,7,1,0,0,71,28,1,0,0,0,72,75,3,27, + 13,0,73,75,3,25,12,0,74,72,1,0,0,0,74,73,1,0,0,0,75,30,1,0,0,0,76,78, + 3,25,12,0,77,76,1,0,0,0,78,79,1,0,0,0,79,77,1,0,0,0,79,80,1,0,0,0,80, + 87,1,0,0,0,81,83,5,46,0,0,82,84,3,25,12,0,83,82,1,0,0,0,84,85,1,0,0,0, + 85,83,1,0,0,0,85,86,1,0,0,0,86,88,1,0,0,0,87,81,1,0,0,0,87,88,1,0,0,0, + 88,32,1,0,0,0,89,90,5,116,0,0,90,34,1,0,0,0,91,95,3,27,13,0,92,94,3,29, + 14,0,93,92,1,0,0,0,94,97,1,0,0,0,95,93,1,0,0,0,95,96,1,0,0,0,96,36,1, + 0,0,0,97,95,1,0,0,0,98,104,5,61,0,0,99,100,5,62,0,0,100,104,5,61,0,0, + 101,102,5,60,0,0,102,104,5,61,0,0,103,98,1,0,0,0,103,99,1,0,0,0,103,101, + 1,0,0,0,104,38,1,0,0,0,105,106,7,2,0,0,106,107,1,0,0,0,107,108,6,19,0, + 0,108,40,1,0,0,0,7,0,74,79,85,87,95,103,1,6,0,0 + }; + staticData->serializedATN = antlr4::atn::SerializedATNView(serializedATNSegment, sizeof(serializedATNSegment) / sizeof(serializedATNSegment[0])); + + antlr4::atn::ATNDeserializer deserializer; + staticData->atn = deserializer.deserialize(staticData->serializedATN); + + const size_t count = staticData->atn->getNumberOfDecisions(); + staticData->decisionToDFA.reserve(count); + for (size_t i = 0; i < count; i++) { + staticData->decisionToDFA.emplace_back(staticData->atn->getDecisionState(i), i); + } + exprlexerLexerStaticData = std::move(staticData); +} + +} + ExprLexer::ExprLexer(CharStream *input) : Lexer(input) { - _interpreter = new atn::LexerATNSimulator(this, _atn, _decisionToDFA, _sharedContextCache); + ExprLexer::initialize(); + _interpreter = new atn::LexerATNSimulator(this, *exprlexerLexerStaticData->atn, exprlexerLexerStaticData->decisionToDFA, exprlexerLexerStaticData->sharedContextCache); } ExprLexer::~ExprLexer() { @@ -21,175 +141,36 @@ std::string ExprLexer::getGrammarFileName() const { } const std::vector& ExprLexer::getRuleNames() const { - return _ruleNames; + return exprlexerLexerStaticData->ruleNames; } const std::vector& ExprLexer::getChannelNames() const { - return _channelNames; + return exprlexerLexerStaticData->channelNames; } const std::vector& ExprLexer::getModeNames() const { - return _modeNames; -} - -const std::vector& ExprLexer::getTokenNames() const { - return _tokenNames; + return exprlexerLexerStaticData->modeNames; } -dfa::Vocabulary& ExprLexer::getVocabulary() const { - return _vocabulary; +const dfa::Vocabulary& ExprLexer::getVocabulary() const { + return exprlexerLexerStaticData->vocabulary; } -const std::vector ExprLexer::getSerializedATN() const { - return _serializedATN; +antlr4::atn::SerializedATNView ExprLexer::getSerializedATN() const { + return exprlexerLexerStaticData->serializedATN; } const atn::ATN& ExprLexer::getATN() const { - return _atn; + return *exprlexerLexerStaticData->atn; } -// Static vars and initialization. -std::vector ExprLexer::_decisionToDFA; -atn::PredictionContextCache ExprLexer::_sharedContextCache; - -// We own the ATN which in turn owns the ATN states. -atn::ATN ExprLexer::_atn; -std::vector ExprLexer::_serializedATN; - -std::vector ExprLexer::_ruleNames = { - u8"T__0", u8"T__1", u8"T__2", u8"T__3", u8"T__4", u8"T__5", u8"T__6", - u8"T__7", u8"T__8", u8"T__9", u8"T__10", u8"T__11", u8"DIGIT", u8"CHAR", - u8"CHAR_OR_DIGIT", u8"NUMBER", u8"TIME", u8"IDENTIFIER", u8"COMPARISON", - u8"WS" -}; - -std::vector ExprLexer::_channelNames = { - "DEFAULT_TOKEN_CHANNEL", "HIDDEN" -}; - -std::vector ExprLexer::_modeNames = { - u8"DEFAULT_MODE" -}; - -std::vector ExprLexer::_literalNames = { - "", u8"'.'", u8"'-'", u8"'('", u8"')'", u8"'/'", u8"'*'", u8"'+'", u8"'sum'", - u8"'..'", u8"','", u8"'['", u8"']'", "", u8"'t'" -}; - -std::vector ExprLexer::_symbolicNames = { - "", "", "", "", "", "", "", "", "", "", "", "", "", u8"NUMBER", u8"TIME", - u8"IDENTIFIER", u8"COMPARISON", u8"WS" -}; - -dfa::Vocabulary ExprLexer::_vocabulary(_literalNames, _symbolicNames); - -std::vector ExprLexer::_tokenNames; - -ExprLexer::Initializer::Initializer() { - // This code could be in a static initializer lambda, but VS doesn't allow access to private class members from there. - for (size_t i = 0; i < _symbolicNames.size(); ++i) { - std::string name = _vocabulary.getLiteralName(i); - if (name.empty()) { - name = _vocabulary.getSymbolicName(i); - } - - if (name.empty()) { - _tokenNames.push_back(""); - } else { - _tokenNames.push_back(name); - } - } - - _serializedATN = { - 0x3, 0x608b, 0xa72a, 0x8133, 0xb9ed, 0x417c, 0x3be7, 0x7786, 0x5964, - 0x2, 0x13, 0x6f, 0x8, 0x1, 0x4, 0x2, 0x9, 0x2, 0x4, 0x3, 0x9, 0x3, 0x4, - 0x4, 0x9, 0x4, 0x4, 0x5, 0x9, 0x5, 0x4, 0x6, 0x9, 0x6, 0x4, 0x7, 0x9, - 0x7, 0x4, 0x8, 0x9, 0x8, 0x4, 0x9, 0x9, 0x9, 0x4, 0xa, 0x9, 0xa, 0x4, - 0xb, 0x9, 0xb, 0x4, 0xc, 0x9, 0xc, 0x4, 0xd, 0x9, 0xd, 0x4, 0xe, 0x9, - 0xe, 0x4, 0xf, 0x9, 0xf, 0x4, 0x10, 0x9, 0x10, 0x4, 0x11, 0x9, 0x11, - 0x4, 0x12, 0x9, 0x12, 0x4, 0x13, 0x9, 0x13, 0x4, 0x14, 0x9, 0x14, 0x4, - 0x15, 0x9, 0x15, 0x3, 0x2, 0x3, 0x2, 0x3, 0x3, 0x3, 0x3, 0x3, 0x4, 0x3, - 0x4, 0x3, 0x5, 0x3, 0x5, 0x3, 0x6, 0x3, 0x6, 0x3, 0x7, 0x3, 0x7, 0x3, - 0x8, 0x3, 0x8, 0x3, 0x9, 0x3, 0x9, 0x3, 0x9, 0x3, 0x9, 0x3, 0xa, 0x3, - 0xa, 0x3, 0xa, 0x3, 0xb, 0x3, 0xb, 0x3, 0xc, 0x3, 0xc, 0x3, 0xd, 0x3, - 0xd, 0x3, 0xe, 0x3, 0xe, 0x3, 0xf, 0x3, 0xf, 0x3, 0x10, 0x3, 0x10, 0x5, - 0x10, 0x4d, 0xa, 0x10, 0x3, 0x11, 0x6, 0x11, 0x50, 0xa, 0x11, 0xd, 0x11, - 0xe, 0x11, 0x51, 0x3, 0x11, 0x3, 0x11, 0x6, 0x11, 0x56, 0xa, 0x11, 0xd, - 0x11, 0xe, 0x11, 0x57, 0x5, 0x11, 0x5a, 0xa, 0x11, 0x3, 0x12, 0x3, 0x12, - 0x3, 0x13, 0x3, 0x13, 0x7, 0x13, 0x60, 0xa, 0x13, 0xc, 0x13, 0xe, 0x13, - 0x63, 0xb, 0x13, 0x3, 0x14, 0x3, 0x14, 0x3, 0x14, 0x3, 0x14, 0x3, 0x14, - 0x5, 0x14, 0x6a, 0xa, 0x14, 0x3, 0x15, 0x3, 0x15, 0x3, 0x15, 0x3, 0x15, - 0x2, 0x2, 0x16, 0x3, 0x3, 0x5, 0x4, 0x7, 0x5, 0x9, 0x6, 0xb, 0x7, 0xd, - 0x8, 0xf, 0x9, 0x11, 0xa, 0x13, 0xb, 0x15, 0xc, 0x17, 0xd, 0x19, 0xe, - 0x1b, 0x2, 0x1d, 0x2, 0x1f, 0x2, 0x21, 0xf, 0x23, 0x10, 0x25, 0x11, - 0x27, 0x12, 0x29, 0x13, 0x3, 0x2, 0x5, 0x3, 0x2, 0x32, 0x3b, 0x5, 0x2, - 0x43, 0x5c, 0x61, 0x61, 0x63, 0x7c, 0x5, 0x2, 0xb, 0xc, 0xf, 0xf, 0x22, - 0x22, 0x2, 0x72, 0x2, 0x3, 0x3, 0x2, 0x2, 0x2, 0x2, 0x5, 0x3, 0x2, 0x2, - 0x2, 0x2, 0x7, 0x3, 0x2, 0x2, 0x2, 0x2, 0x9, 0x3, 0x2, 0x2, 0x2, 0x2, - 0xb, 0x3, 0x2, 0x2, 0x2, 0x2, 0xd, 0x3, 0x2, 0x2, 0x2, 0x2, 0xf, 0x3, - 0x2, 0x2, 0x2, 0x2, 0x11, 0x3, 0x2, 0x2, 0x2, 0x2, 0x13, 0x3, 0x2, 0x2, - 0x2, 0x2, 0x15, 0x3, 0x2, 0x2, 0x2, 0x2, 0x17, 0x3, 0x2, 0x2, 0x2, 0x2, - 0x19, 0x3, 0x2, 0x2, 0x2, 0x2, 0x21, 0x3, 0x2, 0x2, 0x2, 0x2, 0x23, - 0x3, 0x2, 0x2, 0x2, 0x2, 0x25, 0x3, 0x2, 0x2, 0x2, 0x2, 0x27, 0x3, 0x2, - 0x2, 0x2, 0x2, 0x29, 0x3, 0x2, 0x2, 0x2, 0x3, 0x2b, 0x3, 0x2, 0x2, 0x2, - 0x5, 0x2d, 0x3, 0x2, 0x2, 0x2, 0x7, 0x2f, 0x3, 0x2, 0x2, 0x2, 0x9, 0x31, - 0x3, 0x2, 0x2, 0x2, 0xb, 0x33, 0x3, 0x2, 0x2, 0x2, 0xd, 0x35, 0x3, 0x2, - 0x2, 0x2, 0xf, 0x37, 0x3, 0x2, 0x2, 0x2, 0x11, 0x39, 0x3, 0x2, 0x2, - 0x2, 0x13, 0x3d, 0x3, 0x2, 0x2, 0x2, 0x15, 0x40, 0x3, 0x2, 0x2, 0x2, - 0x17, 0x42, 0x3, 0x2, 0x2, 0x2, 0x19, 0x44, 0x3, 0x2, 0x2, 0x2, 0x1b, - 0x46, 0x3, 0x2, 0x2, 0x2, 0x1d, 0x48, 0x3, 0x2, 0x2, 0x2, 0x1f, 0x4c, - 0x3, 0x2, 0x2, 0x2, 0x21, 0x4f, 0x3, 0x2, 0x2, 0x2, 0x23, 0x5b, 0x3, - 0x2, 0x2, 0x2, 0x25, 0x5d, 0x3, 0x2, 0x2, 0x2, 0x27, 0x69, 0x3, 0x2, - 0x2, 0x2, 0x29, 0x6b, 0x3, 0x2, 0x2, 0x2, 0x2b, 0x2c, 0x7, 0x30, 0x2, - 0x2, 0x2c, 0x4, 0x3, 0x2, 0x2, 0x2, 0x2d, 0x2e, 0x7, 0x2f, 0x2, 0x2, - 0x2e, 0x6, 0x3, 0x2, 0x2, 0x2, 0x2f, 0x30, 0x7, 0x2a, 0x2, 0x2, 0x30, - 0x8, 0x3, 0x2, 0x2, 0x2, 0x31, 0x32, 0x7, 0x2b, 0x2, 0x2, 0x32, 0xa, - 0x3, 0x2, 0x2, 0x2, 0x33, 0x34, 0x7, 0x31, 0x2, 0x2, 0x34, 0xc, 0x3, - 0x2, 0x2, 0x2, 0x35, 0x36, 0x7, 0x2c, 0x2, 0x2, 0x36, 0xe, 0x3, 0x2, - 0x2, 0x2, 0x37, 0x38, 0x7, 0x2d, 0x2, 0x2, 0x38, 0x10, 0x3, 0x2, 0x2, - 0x2, 0x39, 0x3a, 0x7, 0x75, 0x2, 0x2, 0x3a, 0x3b, 0x7, 0x77, 0x2, 0x2, - 0x3b, 0x3c, 0x7, 0x6f, 0x2, 0x2, 0x3c, 0x12, 0x3, 0x2, 0x2, 0x2, 0x3d, - 0x3e, 0x7, 0x30, 0x2, 0x2, 0x3e, 0x3f, 0x7, 0x30, 0x2, 0x2, 0x3f, 0x14, - 0x3, 0x2, 0x2, 0x2, 0x40, 0x41, 0x7, 0x2e, 0x2, 0x2, 0x41, 0x16, 0x3, - 0x2, 0x2, 0x2, 0x42, 0x43, 0x7, 0x5d, 0x2, 0x2, 0x43, 0x18, 0x3, 0x2, - 0x2, 0x2, 0x44, 0x45, 0x7, 0x5f, 0x2, 0x2, 0x45, 0x1a, 0x3, 0x2, 0x2, - 0x2, 0x46, 0x47, 0x9, 0x2, 0x2, 0x2, 0x47, 0x1c, 0x3, 0x2, 0x2, 0x2, - 0x48, 0x49, 0x9, 0x3, 0x2, 0x2, 0x49, 0x1e, 0x3, 0x2, 0x2, 0x2, 0x4a, - 0x4d, 0x5, 0x1d, 0xf, 0x2, 0x4b, 0x4d, 0x5, 0x1b, 0xe, 0x2, 0x4c, 0x4a, - 0x3, 0x2, 0x2, 0x2, 0x4c, 0x4b, 0x3, 0x2, 0x2, 0x2, 0x4d, 0x20, 0x3, - 0x2, 0x2, 0x2, 0x4e, 0x50, 0x5, 0x1b, 0xe, 0x2, 0x4f, 0x4e, 0x3, 0x2, - 0x2, 0x2, 0x50, 0x51, 0x3, 0x2, 0x2, 0x2, 0x51, 0x4f, 0x3, 0x2, 0x2, - 0x2, 0x51, 0x52, 0x3, 0x2, 0x2, 0x2, 0x52, 0x59, 0x3, 0x2, 0x2, 0x2, - 0x53, 0x55, 0x7, 0x30, 0x2, 0x2, 0x54, 0x56, 0x5, 0x1b, 0xe, 0x2, 0x55, - 0x54, 0x3, 0x2, 0x2, 0x2, 0x56, 0x57, 0x3, 0x2, 0x2, 0x2, 0x57, 0x55, - 0x3, 0x2, 0x2, 0x2, 0x57, 0x58, 0x3, 0x2, 0x2, 0x2, 0x58, 0x5a, 0x3, - 0x2, 0x2, 0x2, 0x59, 0x53, 0x3, 0x2, 0x2, 0x2, 0x59, 0x5a, 0x3, 0x2, - 0x2, 0x2, 0x5a, 0x22, 0x3, 0x2, 0x2, 0x2, 0x5b, 0x5c, 0x7, 0x76, 0x2, - 0x2, 0x5c, 0x24, 0x3, 0x2, 0x2, 0x2, 0x5d, 0x61, 0x5, 0x1d, 0xf, 0x2, - 0x5e, 0x60, 0x5, 0x1f, 0x10, 0x2, 0x5f, 0x5e, 0x3, 0x2, 0x2, 0x2, 0x60, - 0x63, 0x3, 0x2, 0x2, 0x2, 0x61, 0x5f, 0x3, 0x2, 0x2, 0x2, 0x61, 0x62, - 0x3, 0x2, 0x2, 0x2, 0x62, 0x26, 0x3, 0x2, 0x2, 0x2, 0x63, 0x61, 0x3, - 0x2, 0x2, 0x2, 0x64, 0x6a, 0x7, 0x3f, 0x2, 0x2, 0x65, 0x66, 0x7, 0x40, - 0x2, 0x2, 0x66, 0x6a, 0x7, 0x3f, 0x2, 0x2, 0x67, 0x68, 0x7, 0x3e, 0x2, - 0x2, 0x68, 0x6a, 0x7, 0x3f, 0x2, 0x2, 0x69, 0x64, 0x3, 0x2, 0x2, 0x2, - 0x69, 0x65, 0x3, 0x2, 0x2, 0x2, 0x69, 0x67, 0x3, 0x2, 0x2, 0x2, 0x6a, - 0x28, 0x3, 0x2, 0x2, 0x2, 0x6b, 0x6c, 0x9, 0x4, 0x2, 0x2, 0x6c, 0x6d, - 0x3, 0x2, 0x2, 0x2, 0x6d, 0x6e, 0x8, 0x15, 0x2, 0x2, 0x6e, 0x2a, 0x3, - 0x2, 0x2, 0x2, 0x9, 0x2, 0x4c, 0x51, 0x57, 0x59, 0x61, 0x69, 0x3, 0x8, - 0x2, 0x2, - }; - - atn::ATNDeserializer deserializer; - _atn = deserializer.deserialize(_serializedATN); - - size_t count = _atn.getNumberOfDecisions(); - _decisionToDFA.reserve(count); - for (size_t i = 0; i < count; i++) { - _decisionToDFA.emplace_back(_atn.getDecisionState(i), i); - } +void ExprLexer::initialize() { +#if ANTLR4_USE_THREAD_LOCAL_CACHE + exprlexerLexerInitialize(); +#else + ::antlr4::internal::call_once(exprlexerLexerOnceFlag, exprlexerLexerInitialize); +#endif } - -ExprLexer::Initializer ExprLexer::_init; diff --git a/src/libs/antares/antlr-interface/ExprLexer.h b/src/libs/antares/antlr-interface/ExprLexer.h index c543ba812e..3d6d36bd29 100644 --- a/src/libs/antares/antlr-interface/ExprLexer.h +++ b/src/libs/antares/antlr-interface/ExprLexer.h @@ -1,5 +1,5 @@ -// Generated from Expr.g4 by ANTLR 4.7.2 +// Generated from Expr.g4 by ANTLR 4.13.2 #pragma once @@ -17,42 +17,35 @@ class ExprLexer : public antlr4::Lexer { TIME = 14, IDENTIFIER = 15, COMPARISON = 16, WS = 17 }; - ExprLexer(antlr4::CharStream *input); - ~ExprLexer(); + explicit ExprLexer(antlr4::CharStream *input); - virtual std::string getGrammarFileName() const override; - virtual const std::vector& getRuleNames() const override; + ~ExprLexer() override; - virtual const std::vector& getChannelNames() const override; - virtual const std::vector& getModeNames() const override; - virtual const std::vector& getTokenNames() const override; // deprecated, use vocabulary instead - virtual antlr4::dfa::Vocabulary& getVocabulary() const override; - virtual const std::vector getSerializedATN() const override; - virtual const antlr4::atn::ATN& getATN() const override; + std::string getGrammarFileName() const override; -private: - static std::vector _decisionToDFA; - static antlr4::atn::PredictionContextCache _sharedContextCache; - static std::vector _ruleNames; - static std::vector _tokenNames; - static std::vector _channelNames; - static std::vector _modeNames; + const std::vector& getRuleNames() const override; + + const std::vector& getChannelNames() const override; + + const std::vector& getModeNames() const override; + + const antlr4::dfa::Vocabulary& getVocabulary() const override; - static std::vector _literalNames; - static std::vector _symbolicNames; - static antlr4::dfa::Vocabulary _vocabulary; - static antlr4::atn::ATN _atn; - static std::vector _serializedATN; + antlr4::atn::SerializedATNView getSerializedATN() const override; + const antlr4::atn::ATN& getATN() const override; + + // By default the static state used to implement the lexer is lazily initialized during the first + // call to the constructor. You can call this function if you wish to initialize the static state + // ahead of time. + static void initialize(); + +private: // Individual action functions triggered by action() above. // Individual semantic predicate functions triggered by sempred() above. - struct Initializer { - Initializer(); - }; - static Initializer _init; }; diff --git a/src/libs/antares/antlr-interface/ExprLexer.interp b/src/libs/antares/antlr-interface/ExprLexer.interp index 777750113a..43521ebb69 100644 --- a/src/libs/antares/antlr-interface/ExprLexer.interp +++ b/src/libs/antares/antlr-interface/ExprLexer.interp @@ -68,4 +68,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 19, 111, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 5, 16, 77, 10, 16, 3, 17, 6, 17, 80, 10, 17, 13, 17, 14, 17, 81, 3, 17, 3, 17, 6, 17, 86, 10, 17, 13, 17, 14, 17, 87, 5, 17, 90, 10, 17, 3, 18, 3, 18, 3, 19, 3, 19, 7, 19, 96, 10, 19, 12, 19, 14, 19, 99, 11, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 5, 20, 106, 10, 20, 3, 21, 3, 21, 3, 21, 3, 21, 2, 2, 22, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 2, 29, 2, 31, 2, 33, 15, 35, 16, 37, 17, 39, 18, 41, 19, 3, 2, 5, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 5, 2, 11, 12, 15, 15, 34, 34, 2, 114, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 3, 43, 3, 2, 2, 2, 5, 45, 3, 2, 2, 2, 7, 47, 3, 2, 2, 2, 9, 49, 3, 2, 2, 2, 11, 51, 3, 2, 2, 2, 13, 53, 3, 2, 2, 2, 15, 55, 3, 2, 2, 2, 17, 57, 3, 2, 2, 2, 19, 61, 3, 2, 2, 2, 21, 64, 3, 2, 2, 2, 23, 66, 3, 2, 2, 2, 25, 68, 3, 2, 2, 2, 27, 70, 3, 2, 2, 2, 29, 72, 3, 2, 2, 2, 31, 76, 3, 2, 2, 2, 33, 79, 3, 2, 2, 2, 35, 91, 3, 2, 2, 2, 37, 93, 3, 2, 2, 2, 39, 105, 3, 2, 2, 2, 41, 107, 3, 2, 2, 2, 43, 44, 7, 48, 2, 2, 44, 4, 3, 2, 2, 2, 45, 46, 7, 47, 2, 2, 46, 6, 3, 2, 2, 2, 47, 48, 7, 42, 2, 2, 48, 8, 3, 2, 2, 2, 49, 50, 7, 43, 2, 2, 50, 10, 3, 2, 2, 2, 51, 52, 7, 49, 2, 2, 52, 12, 3, 2, 2, 2, 53, 54, 7, 44, 2, 2, 54, 14, 3, 2, 2, 2, 55, 56, 7, 45, 2, 2, 56, 16, 3, 2, 2, 2, 57, 58, 7, 117, 2, 2, 58, 59, 7, 119, 2, 2, 59, 60, 7, 111, 2, 2, 60, 18, 3, 2, 2, 2, 61, 62, 7, 48, 2, 2, 62, 63, 7, 48, 2, 2, 63, 20, 3, 2, 2, 2, 64, 65, 7, 46, 2, 2, 65, 22, 3, 2, 2, 2, 66, 67, 7, 93, 2, 2, 67, 24, 3, 2, 2, 2, 68, 69, 7, 95, 2, 2, 69, 26, 3, 2, 2, 2, 70, 71, 9, 2, 2, 2, 71, 28, 3, 2, 2, 2, 72, 73, 9, 3, 2, 2, 73, 30, 3, 2, 2, 2, 74, 77, 5, 29, 15, 2, 75, 77, 5, 27, 14, 2, 76, 74, 3, 2, 2, 2, 76, 75, 3, 2, 2, 2, 77, 32, 3, 2, 2, 2, 78, 80, 5, 27, 14, 2, 79, 78, 3, 2, 2, 2, 80, 81, 3, 2, 2, 2, 81, 79, 3, 2, 2, 2, 81, 82, 3, 2, 2, 2, 82, 89, 3, 2, 2, 2, 83, 85, 7, 48, 2, 2, 84, 86, 5, 27, 14, 2, 85, 84, 3, 2, 2, 2, 86, 87, 3, 2, 2, 2, 87, 85, 3, 2, 2, 2, 87, 88, 3, 2, 2, 2, 88, 90, 3, 2, 2, 2, 89, 83, 3, 2, 2, 2, 89, 90, 3, 2, 2, 2, 90, 34, 3, 2, 2, 2, 91, 92, 7, 118, 2, 2, 92, 36, 3, 2, 2, 2, 93, 97, 5, 29, 15, 2, 94, 96, 5, 31, 16, 2, 95, 94, 3, 2, 2, 2, 96, 99, 3, 2, 2, 2, 97, 95, 3, 2, 2, 2, 97, 98, 3, 2, 2, 2, 98, 38, 3, 2, 2, 2, 99, 97, 3, 2, 2, 2, 100, 106, 7, 63, 2, 2, 101, 102, 7, 64, 2, 2, 102, 106, 7, 63, 2, 2, 103, 104, 7, 62, 2, 2, 104, 106, 7, 63, 2, 2, 105, 100, 3, 2, 2, 2, 105, 101, 3, 2, 2, 2, 105, 103, 3, 2, 2, 2, 106, 40, 3, 2, 2, 2, 107, 108, 9, 4, 2, 2, 108, 109, 3, 2, 2, 2, 109, 110, 8, 21, 2, 2, 110, 42, 3, 2, 2, 2, 9, 2, 76, 81, 87, 89, 97, 105, 3, 8, 2, 2] \ No newline at end of file +[4, 0, 17, 109, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 14, 1, 14, 3, 14, 75, 8, 14, 1, 15, 4, 15, 78, 8, 15, 11, 15, 12, 15, 79, 1, 15, 1, 15, 4, 15, 84, 8, 15, 11, 15, 12, 15, 85, 3, 15, 88, 8, 15, 1, 16, 1, 16, 1, 17, 1, 17, 5, 17, 94, 8, 17, 10, 17, 12, 17, 97, 9, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 104, 8, 18, 1, 19, 1, 19, 1, 19, 1, 19, 0, 0, 20, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 0, 27, 0, 29, 0, 31, 13, 33, 14, 35, 15, 37, 16, 39, 17, 1, 0, 3, 1, 0, 48, 57, 3, 0, 65, 90, 95, 95, 97, 122, 3, 0, 9, 10, 13, 13, 32, 32, 112, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 1, 41, 1, 0, 0, 0, 3, 43, 1, 0, 0, 0, 5, 45, 1, 0, 0, 0, 7, 47, 1, 0, 0, 0, 9, 49, 1, 0, 0, 0, 11, 51, 1, 0, 0, 0, 13, 53, 1, 0, 0, 0, 15, 55, 1, 0, 0, 0, 17, 59, 1, 0, 0, 0, 19, 62, 1, 0, 0, 0, 21, 64, 1, 0, 0, 0, 23, 66, 1, 0, 0, 0, 25, 68, 1, 0, 0, 0, 27, 70, 1, 0, 0, 0, 29, 74, 1, 0, 0, 0, 31, 77, 1, 0, 0, 0, 33, 89, 1, 0, 0, 0, 35, 91, 1, 0, 0, 0, 37, 103, 1, 0, 0, 0, 39, 105, 1, 0, 0, 0, 41, 42, 5, 46, 0, 0, 42, 2, 1, 0, 0, 0, 43, 44, 5, 45, 0, 0, 44, 4, 1, 0, 0, 0, 45, 46, 5, 40, 0, 0, 46, 6, 1, 0, 0, 0, 47, 48, 5, 41, 0, 0, 48, 8, 1, 0, 0, 0, 49, 50, 5, 47, 0, 0, 50, 10, 1, 0, 0, 0, 51, 52, 5, 42, 0, 0, 52, 12, 1, 0, 0, 0, 53, 54, 5, 43, 0, 0, 54, 14, 1, 0, 0, 0, 55, 56, 5, 115, 0, 0, 56, 57, 5, 117, 0, 0, 57, 58, 5, 109, 0, 0, 58, 16, 1, 0, 0, 0, 59, 60, 5, 46, 0, 0, 60, 61, 5, 46, 0, 0, 61, 18, 1, 0, 0, 0, 62, 63, 5, 44, 0, 0, 63, 20, 1, 0, 0, 0, 64, 65, 5, 91, 0, 0, 65, 22, 1, 0, 0, 0, 66, 67, 5, 93, 0, 0, 67, 24, 1, 0, 0, 0, 68, 69, 7, 0, 0, 0, 69, 26, 1, 0, 0, 0, 70, 71, 7, 1, 0, 0, 71, 28, 1, 0, 0, 0, 72, 75, 3, 27, 13, 0, 73, 75, 3, 25, 12, 0, 74, 72, 1, 0, 0, 0, 74, 73, 1, 0, 0, 0, 75, 30, 1, 0, 0, 0, 76, 78, 3, 25, 12, 0, 77, 76, 1, 0, 0, 0, 78, 79, 1, 0, 0, 0, 79, 77, 1, 0, 0, 0, 79, 80, 1, 0, 0, 0, 80, 87, 1, 0, 0, 0, 81, 83, 5, 46, 0, 0, 82, 84, 3, 25, 12, 0, 83, 82, 1, 0, 0, 0, 84, 85, 1, 0, 0, 0, 85, 83, 1, 0, 0, 0, 85, 86, 1, 0, 0, 0, 86, 88, 1, 0, 0, 0, 87, 81, 1, 0, 0, 0, 87, 88, 1, 0, 0, 0, 88, 32, 1, 0, 0, 0, 89, 90, 5, 116, 0, 0, 90, 34, 1, 0, 0, 0, 91, 95, 3, 27, 13, 0, 92, 94, 3, 29, 14, 0, 93, 92, 1, 0, 0, 0, 94, 97, 1, 0, 0, 0, 95, 93, 1, 0, 0, 0, 95, 96, 1, 0, 0, 0, 96, 36, 1, 0, 0, 0, 97, 95, 1, 0, 0, 0, 98, 104, 5, 61, 0, 0, 99, 100, 5, 62, 0, 0, 100, 104, 5, 61, 0, 0, 101, 102, 5, 60, 0, 0, 102, 104, 5, 61, 0, 0, 103, 98, 1, 0, 0, 0, 103, 99, 1, 0, 0, 0, 103, 101, 1, 0, 0, 0, 104, 38, 1, 0, 0, 0, 105, 106, 7, 2, 0, 0, 106, 107, 1, 0, 0, 0, 107, 108, 6, 19, 0, 0, 108, 40, 1, 0, 0, 0, 7, 0, 74, 79, 85, 87, 95, 103, 1, 6, 0, 0] \ No newline at end of file diff --git a/src/libs/antares/antlr-interface/ExprParser.cpp b/src/libs/antares/antlr-interface/ExprParser.cpp index 754abf45a3..3572cd6863 100644 --- a/src/libs/antares/antlr-interface/ExprParser.cpp +++ b/src/libs/antares/antlr-interface/ExprParser.cpp @@ -1,5 +1,5 @@ -// Generated from Expr.g4 by ANTLR 4.7.2 +// Generated from Expr.g4 by ANTLR 4.13.2 #include "ExprVisitor.h" @@ -8,26 +8,143 @@ using namespace antlrcpp; + using namespace antlr4; -ExprParser::ExprParser(TokenStream *input) : Parser(input) { - _interpreter = new atn::ParserATNSimulator(this, _atn, _decisionToDFA, _sharedContextCache); +namespace { + +struct ExprParserStaticData final { + ExprParserStaticData(std::vector ruleNames, + std::vector literalNames, + std::vector symbolicNames) + : ruleNames(std::move(ruleNames)), literalNames(std::move(literalNames)), + symbolicNames(std::move(symbolicNames)), + vocabulary(this->literalNames, this->symbolicNames) {} + + ExprParserStaticData(const ExprParserStaticData&) = delete; + ExprParserStaticData(ExprParserStaticData&&) = delete; + ExprParserStaticData& operator=(const ExprParserStaticData&) = delete; + ExprParserStaticData& operator=(ExprParserStaticData&&) = delete; + + std::vector decisionToDFA; + antlr4::atn::PredictionContextCache sharedContextCache; + const std::vector ruleNames; + const std::vector literalNames; + const std::vector symbolicNames; + const antlr4::dfa::Vocabulary vocabulary; + antlr4::atn::SerializedATNView serializedATN; + std::unique_ptr atn; +}; + +::antlr4::internal::OnceFlag exprParserOnceFlag; +#if ANTLR4_USE_THREAD_LOCAL_CACHE +static thread_local +#endif +std::unique_ptr exprParserStaticData = nullptr; + +void exprParserInitialize() { +#if ANTLR4_USE_THREAD_LOCAL_CACHE + if (exprParserStaticData != nullptr) { + return; + } +#else + assert(exprParserStaticData == nullptr); +#endif + auto staticData = std::make_unique( + std::vector{ + "fullexpr", "expr", "atom", "shift", "shift_expr", "right_expr" + }, + std::vector{ + "", "'.'", "'-'", "'('", "')'", "'/'", "'*'", "'+'", "'sum'", "'..'", + "','", "'['", "']'", "", "'t'" + }, + std::vector{ + "", "", "", "", "", "", "", "", "", "", "", "", "", "NUMBER", "TIME", + "IDENTIFIER", "COMPARISON", "WS" + } + ); + static const int32_t serializedATNSegment[] = { + 4,1,17,117,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,1,0,1,0,1, + 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,3,1,56,8,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 5,1,67,8,1,10,1,12,1,70,9,1,1,2,1,2,3,2,74,8,2,1,3,1,3,3,3,78,8,3,1,4, + 1,4,1,4,1,4,1,4,1,4,1,4,1,4,3,4,88,8,4,1,4,1,4,1,4,1,4,1,4,1,4,5,4,96, + 8,4,10,4,12,4,99,9,4,1,5,1,5,1,5,1,5,1,5,1,5,3,5,107,8,5,1,5,1,5,1,5, + 5,5,112,8,5,10,5,12,5,115,9,5,1,5,0,3,2,8,10,6,0,2,4,6,8,10,0,2,1,0,5, + 6,2,0,2,2,7,7,128,0,12,1,0,0,0,2,55,1,0,0,0,4,73,1,0,0,0,6,75,1,0,0,0, + 8,87,1,0,0,0,10,106,1,0,0,0,12,13,3,2,1,0,13,14,5,0,0,1,14,1,1,0,0,0, + 15,16,6,1,-1,0,16,56,3,4,2,0,17,18,5,15,0,0,18,19,5,1,0,0,19,56,5,15, + 0,0,20,21,5,2,0,0,21,56,3,2,1,10,22,23,5,3,0,0,23,24,3,2,1,0,24,25,5, + 4,0,0,25,56,1,0,0,0,26,27,5,8,0,0,27,28,5,3,0,0,28,29,3,2,1,0,29,30,5, + 4,0,0,30,56,1,0,0,0,31,32,5,8,0,0,32,33,5,3,0,0,33,34,3,6,3,0,34,35,5, + 9,0,0,35,36,3,6,3,0,36,37,5,10,0,0,37,38,3,2,1,0,38,39,5,4,0,0,39,56, + 1,0,0,0,40,41,5,15,0,0,41,42,5,3,0,0,42,43,3,2,1,0,43,44,5,4,0,0,44,56, + 1,0,0,0,45,46,5,15,0,0,46,47,5,11,0,0,47,48,3,6,3,0,48,49,5,12,0,0,49, + 56,1,0,0,0,50,51,5,15,0,0,51,52,5,11,0,0,52,53,3,2,1,0,53,54,5,12,0,0, + 54,56,1,0,0,0,55,15,1,0,0,0,55,17,1,0,0,0,55,20,1,0,0,0,55,22,1,0,0,0, + 55,26,1,0,0,0,55,31,1,0,0,0,55,40,1,0,0,0,55,45,1,0,0,0,55,50,1,0,0,0, + 56,68,1,0,0,0,57,58,10,8,0,0,58,59,7,0,0,0,59,67,3,2,1,9,60,61,10,7,0, + 0,61,62,7,1,0,0,62,67,3,2,1,8,63,64,10,6,0,0,64,65,5,16,0,0,65,67,3,2, + 1,7,66,57,1,0,0,0,66,60,1,0,0,0,66,63,1,0,0,0,67,70,1,0,0,0,68,66,1,0, + 0,0,68,69,1,0,0,0,69,3,1,0,0,0,70,68,1,0,0,0,71,74,5,13,0,0,72,74,5,15, + 0,0,73,71,1,0,0,0,73,72,1,0,0,0,74,5,1,0,0,0,75,77,5,14,0,0,76,78,3,8, + 4,0,77,76,1,0,0,0,77,78,1,0,0,0,78,7,1,0,0,0,79,80,6,4,-1,0,80,81,7,1, + 0,0,81,88,3,4,2,0,82,83,7,1,0,0,83,84,5,3,0,0,84,85,3,2,1,0,85,86,5,4, + 0,0,86,88,1,0,0,0,87,79,1,0,0,0,87,82,1,0,0,0,88,97,1,0,0,0,89,90,10, + 4,0,0,90,91,7,0,0,0,91,96,3,10,5,0,92,93,10,3,0,0,93,94,7,1,0,0,94,96, + 3,10,5,0,95,89,1,0,0,0,95,92,1,0,0,0,96,99,1,0,0,0,97,95,1,0,0,0,97,98, + 1,0,0,0,98,9,1,0,0,0,99,97,1,0,0,0,100,101,6,5,-1,0,101,102,5,3,0,0,102, + 103,3,2,1,0,103,104,5,4,0,0,104,107,1,0,0,0,105,107,3,4,2,0,106,100,1, + 0,0,0,106,105,1,0,0,0,107,113,1,0,0,0,108,109,10,3,0,0,109,110,7,0,0, + 0,110,112,3,10,5,4,111,108,1,0,0,0,112,115,1,0,0,0,113,111,1,0,0,0,113, + 114,1,0,0,0,114,11,1,0,0,0,115,113,1,0,0,0,10,55,66,68,73,77,87,95,97, + 106,113 + }; + staticData->serializedATN = antlr4::atn::SerializedATNView(serializedATNSegment, sizeof(serializedATNSegment) / sizeof(serializedATNSegment[0])); + + antlr4::atn::ATNDeserializer deserializer; + staticData->atn = deserializer.deserialize(staticData->serializedATN); + + const size_t count = staticData->atn->getNumberOfDecisions(); + staticData->decisionToDFA.reserve(count); + for (size_t i = 0; i < count; i++) { + staticData->decisionToDFA.emplace_back(staticData->atn->getDecisionState(i), i); + } + exprParserStaticData = std::move(staticData); +} + +} + +ExprParser::ExprParser(TokenStream *input) : ExprParser(input, antlr4::atn::ParserATNSimulatorOptions()) {} + +ExprParser::ExprParser(TokenStream *input, const antlr4::atn::ParserATNSimulatorOptions &options) : Parser(input) { + ExprParser::initialize(); + _interpreter = new atn::ParserATNSimulator(this, *exprParserStaticData->atn, exprParserStaticData->decisionToDFA, exprParserStaticData->sharedContextCache, options); } ExprParser::~ExprParser() { delete _interpreter; } +const atn::ATN& ExprParser::getATN() const { + return *exprParserStaticData->atn; +} + std::string ExprParser::getGrammarFileName() const { return "Expr.g4"; } const std::vector& ExprParser::getRuleNames() const { - return _ruleNames; + return exprParserStaticData->ruleNames; +} + +const dfa::Vocabulary& ExprParser::getVocabulary() const { + return exprParserStaticData->vocabulary; } -dfa::Vocabulary& ExprParser::getVocabulary() const { - return _vocabulary; +antlr4::atn::SerializedATNView ExprParser::getSerializedATN() const { + return exprParserStaticData->serializedATN; } @@ -50,7 +167,8 @@ size_t ExprParser::FullexprContext::getRuleIndex() const { return ExprParser::RuleFullexpr; } -antlrcpp::Any ExprParser::FullexprContext::accept(tree::ParseTreeVisitor *visitor) { + +std::any ExprParser::FullexprContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitFullexpr(this); else @@ -61,7 +179,11 @@ ExprParser::FullexprContext* ExprParser::fullexpr() { FullexprContext *_localctx = _tracker.createInstance(_ctx, getState()); enterRule(_localctx, 0, ExprParser::RuleFullexpr); +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else auto onExit = finally([=] { +#endif exitRule(); }); try { @@ -112,7 +234,8 @@ ExprParser::ShiftContext* ExprParser::TimeSumContext::shift(size_t i) { ExprParser::TimeSumContext::TimeSumContext(ExprContext *ctx) { copyFrom(ctx); } -antlrcpp::Any ExprParser::TimeSumContext::accept(tree::ParseTreeVisitor *visitor) { + +std::any ExprParser::TimeSumContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitTimeSum(this); else @@ -126,7 +249,8 @@ ExprParser::ExprContext* ExprParser::NegationContext::expr() { ExprParser::NegationContext::NegationContext(ExprContext *ctx) { copyFrom(ctx); } -antlrcpp::Any ExprParser::NegationContext::accept(tree::ParseTreeVisitor *visitor) { + +std::any ExprParser::NegationContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitNegation(this); else @@ -140,7 +264,8 @@ ExprParser::AtomContext* ExprParser::UnsignedAtomContext::atom() { ExprParser::UnsignedAtomContext::UnsignedAtomContext(ExprContext *ctx) { copyFrom(ctx); } -antlrcpp::Any ExprParser::UnsignedAtomContext::accept(tree::ParseTreeVisitor *visitor) { + +std::any ExprParser::UnsignedAtomContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitUnsignedAtom(this); else @@ -154,7 +279,8 @@ ExprParser::ExprContext* ExprParser::ExpressionContext::expr() { ExprParser::ExpressionContext::ExpressionContext(ExprContext *ctx) { copyFrom(ctx); } -antlrcpp::Any ExprParser::ExpressionContext::accept(tree::ParseTreeVisitor *visitor) { + +std::any ExprParser::ExpressionContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitExpression(this); else @@ -172,7 +298,8 @@ ExprParser::ExprContext* ExprParser::TimeIndexContext::expr() { ExprParser::TimeIndexContext::TimeIndexContext(ExprContext *ctx) { copyFrom(ctx); } -antlrcpp::Any ExprParser::TimeIndexContext::accept(tree::ParseTreeVisitor *visitor) { + +std::any ExprParser::TimeIndexContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitTimeIndex(this); else @@ -194,7 +321,8 @@ tree::TerminalNode* ExprParser::ComparisonContext::COMPARISON() { ExprParser::ComparisonContext::ComparisonContext(ExprContext *ctx) { copyFrom(ctx); } -antlrcpp::Any ExprParser::ComparisonContext::accept(tree::ParseTreeVisitor *visitor) { + +std::any ExprParser::ComparisonContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitComparison(this); else @@ -208,7 +336,8 @@ ExprParser::ExprContext* ExprParser::AllTimeSumContext::expr() { ExprParser::AllTimeSumContext::AllTimeSumContext(ExprContext *ctx) { copyFrom(ctx); } -antlrcpp::Any ExprParser::AllTimeSumContext::accept(tree::ParseTreeVisitor *visitor) { + +std::any ExprParser::AllTimeSumContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitAllTimeSum(this); else @@ -226,7 +355,8 @@ ExprParser::ShiftContext* ExprParser::TimeShiftContext::shift() { ExprParser::TimeShiftContext::TimeShiftContext(ExprContext *ctx) { copyFrom(ctx); } -antlrcpp::Any ExprParser::TimeShiftContext::accept(tree::ParseTreeVisitor *visitor) { + +std::any ExprParser::TimeShiftContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitTimeShift(this); else @@ -244,7 +374,8 @@ ExprParser::ExprContext* ExprParser::FunctionContext::expr() { ExprParser::FunctionContext::FunctionContext(ExprContext *ctx) { copyFrom(ctx); } -antlrcpp::Any ExprParser::FunctionContext::accept(tree::ParseTreeVisitor *visitor) { + +std::any ExprParser::FunctionContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitFunction(this); else @@ -262,7 +393,8 @@ ExprParser::ExprContext* ExprParser::AddsubContext::expr(size_t i) { ExprParser::AddsubContext::AddsubContext(ExprContext *ctx) { copyFrom(ctx); } -antlrcpp::Any ExprParser::AddsubContext::accept(tree::ParseTreeVisitor *visitor) { + +std::any ExprParser::AddsubContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitAddsub(this); else @@ -280,7 +412,8 @@ tree::TerminalNode* ExprParser::PortFieldContext::IDENTIFIER(size_t i) { ExprParser::PortFieldContext::PortFieldContext(ExprContext *ctx) { copyFrom(ctx); } -antlrcpp::Any ExprParser::PortFieldContext::accept(tree::ParseTreeVisitor *visitor) { + +std::any ExprParser::PortFieldContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitPortField(this); else @@ -298,7 +431,8 @@ ExprParser::ExprContext* ExprParser::MuldivContext::expr(size_t i) { ExprParser::MuldivContext::MuldivContext(ExprContext *ctx) { copyFrom(ctx); } -antlrcpp::Any ExprParser::MuldivContext::accept(tree::ParseTreeVisitor *visitor) { + +std::any ExprParser::MuldivContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitMuldiv(this); else @@ -320,7 +454,11 @@ ExprParser::ExprContext* ExprParser::expr(int precedence) { size_t _la = 0; +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else auto onExit = finally([=] { +#endif unrollRecursionContexts(parentContext); }); try { @@ -400,11 +538,11 @@ ExprParser::ExprContext* ExprParser::expr(int precedence) { setState(32); match(ExprParser::T__2); setState(33); - dynamic_cast(_localctx)->from = shift(); + antlrcpp::downCast(_localctx)->from = shift(); setState(34); match(ExprParser::T__8); setState(35); - dynamic_cast(_localctx)->to = shift(); + antlrcpp::downCast(_localctx)->to = shift(); setState(36); match(ExprParser::T__9); setState(37); @@ -459,6 +597,8 @@ ExprParser::ExprContext* ExprParser::expr(int precedence) { break; } + default: + break; } _ctx->stop = _input->LT(-1); setState(68); @@ -480,12 +620,12 @@ ExprParser::ExprContext* ExprParser::expr(int precedence) { if (!(precpred(_ctx, 8))) throw FailedPredicateException(this, "precpred(_ctx, 8)"); setState(58); - dynamic_cast(_localctx)->op = _input->LT(1); + antlrcpp::downCast(_localctx)->op = _input->LT(1); _la = _input->LA(1); if (!(_la == ExprParser::T__4 || _la == ExprParser::T__5)) { - dynamic_cast(_localctx)->op = _errHandler->recoverInline(this); + antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); } else { _errHandler->reportMatch(this); @@ -504,12 +644,12 @@ ExprParser::ExprContext* ExprParser::expr(int precedence) { if (!(precpred(_ctx, 7))) throw FailedPredicateException(this, "precpred(_ctx, 7)"); setState(61); - dynamic_cast(_localctx)->op = _input->LT(1); + antlrcpp::downCast(_localctx)->op = _input->LT(1); _la = _input->LA(1); if (!(_la == ExprParser::T__1 || _la == ExprParser::T__6)) { - dynamic_cast(_localctx)->op = _errHandler->recoverInline(this); + antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); } else { _errHandler->reportMatch(this); @@ -534,6 +674,8 @@ ExprParser::ExprContext* ExprParser::expr(int precedence) { break; } + default: + break; } } setState(70); @@ -572,7 +714,8 @@ tree::TerminalNode* ExprParser::NumberContext::NUMBER() { ExprParser::NumberContext::NumberContext(AtomContext *ctx) { copyFrom(ctx); } -antlrcpp::Any ExprParser::NumberContext::accept(tree::ParseTreeVisitor *visitor) { + +std::any ExprParser::NumberContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitNumber(this); else @@ -586,7 +729,8 @@ tree::TerminalNode* ExprParser::IdentifierContext::IDENTIFIER() { ExprParser::IdentifierContext::IdentifierContext(AtomContext *ctx) { copyFrom(ctx); } -antlrcpp::Any ExprParser::IdentifierContext::accept(tree::ParseTreeVisitor *visitor) { + +std::any ExprParser::IdentifierContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitIdentifier(this); else @@ -596,7 +740,11 @@ ExprParser::AtomContext* ExprParser::atom() { AtomContext *_localctx = _tracker.createInstance(_ctx, getState()); enterRule(_localctx, 4, ExprParser::RuleAtom); +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else auto onExit = finally([=] { +#endif exitRule(); }); try { @@ -604,7 +752,7 @@ ExprParser::AtomContext* ExprParser::atom() { _errHandler->sync(this); switch (_input->LA(1)) { case ExprParser::NUMBER: { - _localctx = dynamic_cast(_tracker.createInstance(_localctx)); + _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 1); setState(71); match(ExprParser::NUMBER); @@ -612,7 +760,7 @@ ExprParser::AtomContext* ExprParser::atom() { } case ExprParser::IDENTIFIER: { - _localctx = dynamic_cast(_tracker.createInstance(_localctx)); + _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 2); setState(72); match(ExprParser::IDENTIFIER); @@ -652,7 +800,8 @@ size_t ExprParser::ShiftContext::getRuleIndex() const { return ExprParser::RuleShift; } -antlrcpp::Any ExprParser::ShiftContext::accept(tree::ParseTreeVisitor *visitor) { + +std::any ExprParser::ShiftContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitShift(this); else @@ -664,7 +813,11 @@ ExprParser::ShiftContext* ExprParser::shift() { enterRule(_localctx, 6, ExprParser::RuleShift); size_t _la = 0; +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else auto onExit = finally([=] { +#endif exitRule(); }); try { @@ -715,7 +868,8 @@ ExprParser::AtomContext* ExprParser::SignedAtomContext::atom() { ExprParser::SignedAtomContext::SignedAtomContext(Shift_exprContext *ctx) { copyFrom(ctx); } -antlrcpp::Any ExprParser::SignedAtomContext::accept(tree::ParseTreeVisitor *visitor) { + +std::any ExprParser::SignedAtomContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitSignedAtom(this); else @@ -729,7 +883,8 @@ ExprParser::ExprContext* ExprParser::SignedExpressionContext::expr() { ExprParser::SignedExpressionContext::SignedExpressionContext(Shift_exprContext *ctx) { copyFrom(ctx); } -antlrcpp::Any ExprParser::SignedExpressionContext::accept(tree::ParseTreeVisitor *visitor) { + +std::any ExprParser::SignedExpressionContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitSignedExpression(this); else @@ -747,7 +902,8 @@ ExprParser::Right_exprContext* ExprParser::ShiftMuldivContext::right_expr() { ExprParser::ShiftMuldivContext::ShiftMuldivContext(Shift_exprContext *ctx) { copyFrom(ctx); } -antlrcpp::Any ExprParser::ShiftMuldivContext::accept(tree::ParseTreeVisitor *visitor) { + +std::any ExprParser::ShiftMuldivContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitShiftMuldiv(this); else @@ -765,7 +921,8 @@ ExprParser::Right_exprContext* ExprParser::ShiftAddsubContext::right_expr() { ExprParser::ShiftAddsubContext::ShiftAddsubContext(Shift_exprContext *ctx) { copyFrom(ctx); } -antlrcpp::Any ExprParser::ShiftAddsubContext::accept(tree::ParseTreeVisitor *visitor) { + +std::any ExprParser::ShiftAddsubContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitShiftAddsub(this); else @@ -787,7 +944,11 @@ ExprParser::Shift_exprContext* ExprParser::shift_expr(int precedence) { size_t _la = 0; +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else auto onExit = finally([=] { +#endif unrollRecursionContexts(parentContext); }); try { @@ -802,12 +963,12 @@ ExprParser::Shift_exprContext* ExprParser::shift_expr(int precedence) { previousContext = _localctx; setState(80); - dynamic_cast(_localctx)->op = _input->LT(1); + antlrcpp::downCast(_localctx)->op = _input->LT(1); _la = _input->LA(1); if (!(_la == ExprParser::T__1 || _la == ExprParser::T__6)) { - dynamic_cast(_localctx)->op = _errHandler->recoverInline(this); + antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); } else { _errHandler->reportMatch(this); @@ -823,12 +984,12 @@ ExprParser::Shift_exprContext* ExprParser::shift_expr(int precedence) { _ctx = _localctx; previousContext = _localctx; setState(82); - dynamic_cast(_localctx)->op = _input->LT(1); + antlrcpp::downCast(_localctx)->op = _input->LT(1); _la = _input->LA(1); if (!(_la == ExprParser::T__1 || _la == ExprParser::T__6)) { - dynamic_cast(_localctx)->op = _errHandler->recoverInline(this); + antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); } else { _errHandler->reportMatch(this); @@ -843,6 +1004,8 @@ ExprParser::Shift_exprContext* ExprParser::shift_expr(int precedence) { break; } + default: + break; } _ctx->stop = _input->LT(-1); setState(97); @@ -864,12 +1027,12 @@ ExprParser::Shift_exprContext* ExprParser::shift_expr(int precedence) { if (!(precpred(_ctx, 4))) throw FailedPredicateException(this, "precpred(_ctx, 4)"); setState(90); - dynamic_cast(_localctx)->op = _input->LT(1); + antlrcpp::downCast(_localctx)->op = _input->LT(1); _la = _input->LA(1); if (!(_la == ExprParser::T__4 || _la == ExprParser::T__5)) { - dynamic_cast(_localctx)->op = _errHandler->recoverInline(this); + antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); } else { _errHandler->reportMatch(this); @@ -888,12 +1051,12 @@ ExprParser::Shift_exprContext* ExprParser::shift_expr(int precedence) { if (!(precpred(_ctx, 3))) throw FailedPredicateException(this, "precpred(_ctx, 3)"); setState(93); - dynamic_cast(_localctx)->op = _input->LT(1); + antlrcpp::downCast(_localctx)->op = _input->LT(1); _la = _input->LA(1); if (!(_la == ExprParser::T__1 || _la == ExprParser::T__6)) { - dynamic_cast(_localctx)->op = _errHandler->recoverInline(this); + antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); } else { _errHandler->reportMatch(this); @@ -904,6 +1067,8 @@ ExprParser::Shift_exprContext* ExprParser::shift_expr(int precedence) { break; } + default: + break; } } setState(99); @@ -942,7 +1107,8 @@ ExprParser::ExprContext* ExprParser::RightExpressionContext::expr() { ExprParser::RightExpressionContext::RightExpressionContext(Right_exprContext *ctx) { copyFrom(ctx); } -antlrcpp::Any ExprParser::RightExpressionContext::accept(tree::ParseTreeVisitor *visitor) { + +std::any ExprParser::RightExpressionContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitRightExpression(this); else @@ -960,7 +1126,8 @@ ExprParser::Right_exprContext* ExprParser::RightMuldivContext::right_expr(size_t ExprParser::RightMuldivContext::RightMuldivContext(Right_exprContext *ctx) { copyFrom(ctx); } -antlrcpp::Any ExprParser::RightMuldivContext::accept(tree::ParseTreeVisitor *visitor) { + +std::any ExprParser::RightMuldivContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitRightMuldiv(this); else @@ -974,7 +1141,8 @@ ExprParser::AtomContext* ExprParser::RightAtomContext::atom() { ExprParser::RightAtomContext::RightAtomContext(Right_exprContext *ctx) { copyFrom(ctx); } -antlrcpp::Any ExprParser::RightAtomContext::accept(tree::ParseTreeVisitor *visitor) { + +std::any ExprParser::RightAtomContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitRightAtom(this); else @@ -996,7 +1164,11 @@ ExprParser::Right_exprContext* ExprParser::right_expr(int precedence) { size_t _la = 0; +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else auto onExit = finally([=] { +#endif unrollRecursionContexts(parentContext); }); try { @@ -1048,12 +1220,12 @@ ExprParser::Right_exprContext* ExprParser::right_expr(int precedence) { if (!(precpred(_ctx, 3))) throw FailedPredicateException(this, "precpred(_ctx, 3)"); setState(109); - dynamic_cast(_localctx)->op = _input->LT(1); + antlrcpp::downCast(_localctx)->op = _input->LT(1); _la = _input->LA(1); if (!(_la == ExprParser::T__4 || _la == ExprParser::T__5)) { - dynamic_cast(_localctx)->op = _errHandler->recoverInline(this); + antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); } else { _errHandler->reportMatch(this); @@ -1077,9 +1249,9 @@ ExprParser::Right_exprContext* ExprParser::right_expr(int precedence) { bool ExprParser::sempred(RuleContext *context, size_t ruleIndex, size_t predicateIndex) { switch (ruleIndex) { - case 1: return exprSempred(dynamic_cast(context), predicateIndex); - case 4: return shift_exprSempred(dynamic_cast(context), predicateIndex); - case 5: return right_exprSempred(dynamic_cast(context), predicateIndex); + case 1: return exprSempred(antlrcpp::downCast(context), predicateIndex); + case 4: return shift_exprSempred(antlrcpp::downCast(context), predicateIndex); + case 5: return right_exprSempred(antlrcpp::downCast(context), predicateIndex); default: break; @@ -1120,138 +1292,10 @@ bool ExprParser::right_exprSempred(Right_exprContext *_localctx, size_t predicat return true; } -// Static vars and initialization. -std::vector ExprParser::_decisionToDFA; -atn::PredictionContextCache ExprParser::_sharedContextCache; - -// We own the ATN which in turn owns the ATN states. -atn::ATN ExprParser::_atn; -std::vector ExprParser::_serializedATN; - -std::vector ExprParser::_ruleNames = { - "fullexpr", "expr", "atom", "shift", "shift_expr", "right_expr" -}; - -std::vector ExprParser::_literalNames = { - "", "'.'", "'-'", "'('", "')'", "'/'", "'*'", "'+'", "'sum'", "'..'", - "','", "'['", "']'", "", "'t'" -}; - -std::vector ExprParser::_symbolicNames = { - "", "", "", "", "", "", "", "", "", "", "", "", "", "NUMBER", "TIME", - "IDENTIFIER", "COMPARISON", "WS" -}; - -dfa::Vocabulary ExprParser::_vocabulary(_literalNames, _symbolicNames); - -std::vector ExprParser::_tokenNames; - -ExprParser::Initializer::Initializer() { - for (size_t i = 0; i < _symbolicNames.size(); ++i) { - std::string name = _vocabulary.getLiteralName(i); - if (name.empty()) { - name = _vocabulary.getSymbolicName(i); - } - - if (name.empty()) { - _tokenNames.push_back(""); - } else { - _tokenNames.push_back(name); - } - } - - _serializedATN = { - 0x3, 0x608b, 0xa72a, 0x8133, 0xb9ed, 0x417c, 0x3be7, 0x7786, 0x5964, - 0x3, 0x13, 0x77, 0x4, 0x2, 0x9, 0x2, 0x4, 0x3, 0x9, 0x3, 0x4, 0x4, 0x9, - 0x4, 0x4, 0x5, 0x9, 0x5, 0x4, 0x6, 0x9, 0x6, 0x4, 0x7, 0x9, 0x7, 0x3, - 0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, - 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, - 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, - 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, - 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, - 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, - 0x3, 0x5, 0x3, 0x3a, 0xa, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, - 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x7, 0x3, 0x45, 0xa, - 0x3, 0xc, 0x3, 0xe, 0x3, 0x48, 0xb, 0x3, 0x3, 0x4, 0x3, 0x4, 0x5, 0x4, - 0x4c, 0xa, 0x4, 0x3, 0x5, 0x3, 0x5, 0x5, 0x5, 0x50, 0xa, 0x5, 0x3, 0x6, - 0x3, 0x6, 0x3, 0x6, 0x3, 0x6, 0x3, 0x6, 0x3, 0x6, 0x3, 0x6, 0x3, 0x6, - 0x5, 0x6, 0x5a, 0xa, 0x6, 0x3, 0x6, 0x3, 0x6, 0x3, 0x6, 0x3, 0x6, 0x3, - 0x6, 0x3, 0x6, 0x7, 0x6, 0x62, 0xa, 0x6, 0xc, 0x6, 0xe, 0x6, 0x65, 0xb, - 0x6, 0x3, 0x7, 0x3, 0x7, 0x3, 0x7, 0x3, 0x7, 0x3, 0x7, 0x3, 0x7, 0x5, - 0x7, 0x6d, 0xa, 0x7, 0x3, 0x7, 0x3, 0x7, 0x3, 0x7, 0x7, 0x7, 0x72, 0xa, - 0x7, 0xc, 0x7, 0xe, 0x7, 0x75, 0xb, 0x7, 0x3, 0x7, 0x2, 0x5, 0x4, 0xa, - 0xc, 0x8, 0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0x2, 0x4, 0x3, 0x2, 0x7, 0x8, - 0x4, 0x2, 0x4, 0x4, 0x9, 0x9, 0x2, 0x82, 0x2, 0xe, 0x3, 0x2, 0x2, 0x2, - 0x4, 0x39, 0x3, 0x2, 0x2, 0x2, 0x6, 0x4b, 0x3, 0x2, 0x2, 0x2, 0x8, 0x4d, - 0x3, 0x2, 0x2, 0x2, 0xa, 0x59, 0x3, 0x2, 0x2, 0x2, 0xc, 0x6c, 0x3, 0x2, - 0x2, 0x2, 0xe, 0xf, 0x5, 0x4, 0x3, 0x2, 0xf, 0x10, 0x7, 0x2, 0x2, 0x3, - 0x10, 0x3, 0x3, 0x2, 0x2, 0x2, 0x11, 0x12, 0x8, 0x3, 0x1, 0x2, 0x12, - 0x3a, 0x5, 0x6, 0x4, 0x2, 0x13, 0x14, 0x7, 0x11, 0x2, 0x2, 0x14, 0x15, - 0x7, 0x3, 0x2, 0x2, 0x15, 0x3a, 0x7, 0x11, 0x2, 0x2, 0x16, 0x17, 0x7, - 0x4, 0x2, 0x2, 0x17, 0x3a, 0x5, 0x4, 0x3, 0xc, 0x18, 0x19, 0x7, 0x5, - 0x2, 0x2, 0x19, 0x1a, 0x5, 0x4, 0x3, 0x2, 0x1a, 0x1b, 0x7, 0x6, 0x2, - 0x2, 0x1b, 0x3a, 0x3, 0x2, 0x2, 0x2, 0x1c, 0x1d, 0x7, 0xa, 0x2, 0x2, - 0x1d, 0x1e, 0x7, 0x5, 0x2, 0x2, 0x1e, 0x1f, 0x5, 0x4, 0x3, 0x2, 0x1f, - 0x20, 0x7, 0x6, 0x2, 0x2, 0x20, 0x3a, 0x3, 0x2, 0x2, 0x2, 0x21, 0x22, - 0x7, 0xa, 0x2, 0x2, 0x22, 0x23, 0x7, 0x5, 0x2, 0x2, 0x23, 0x24, 0x5, - 0x8, 0x5, 0x2, 0x24, 0x25, 0x7, 0xb, 0x2, 0x2, 0x25, 0x26, 0x5, 0x8, - 0x5, 0x2, 0x26, 0x27, 0x7, 0xc, 0x2, 0x2, 0x27, 0x28, 0x5, 0x4, 0x3, - 0x2, 0x28, 0x29, 0x7, 0x6, 0x2, 0x2, 0x29, 0x3a, 0x3, 0x2, 0x2, 0x2, - 0x2a, 0x2b, 0x7, 0x11, 0x2, 0x2, 0x2b, 0x2c, 0x7, 0x5, 0x2, 0x2, 0x2c, - 0x2d, 0x5, 0x4, 0x3, 0x2, 0x2d, 0x2e, 0x7, 0x6, 0x2, 0x2, 0x2e, 0x3a, - 0x3, 0x2, 0x2, 0x2, 0x2f, 0x30, 0x7, 0x11, 0x2, 0x2, 0x30, 0x31, 0x7, - 0xd, 0x2, 0x2, 0x31, 0x32, 0x5, 0x8, 0x5, 0x2, 0x32, 0x33, 0x7, 0xe, - 0x2, 0x2, 0x33, 0x3a, 0x3, 0x2, 0x2, 0x2, 0x34, 0x35, 0x7, 0x11, 0x2, - 0x2, 0x35, 0x36, 0x7, 0xd, 0x2, 0x2, 0x36, 0x37, 0x5, 0x4, 0x3, 0x2, - 0x37, 0x38, 0x7, 0xe, 0x2, 0x2, 0x38, 0x3a, 0x3, 0x2, 0x2, 0x2, 0x39, - 0x11, 0x3, 0x2, 0x2, 0x2, 0x39, 0x13, 0x3, 0x2, 0x2, 0x2, 0x39, 0x16, - 0x3, 0x2, 0x2, 0x2, 0x39, 0x18, 0x3, 0x2, 0x2, 0x2, 0x39, 0x1c, 0x3, - 0x2, 0x2, 0x2, 0x39, 0x21, 0x3, 0x2, 0x2, 0x2, 0x39, 0x2a, 0x3, 0x2, - 0x2, 0x2, 0x39, 0x2f, 0x3, 0x2, 0x2, 0x2, 0x39, 0x34, 0x3, 0x2, 0x2, - 0x2, 0x3a, 0x46, 0x3, 0x2, 0x2, 0x2, 0x3b, 0x3c, 0xc, 0xa, 0x2, 0x2, - 0x3c, 0x3d, 0x9, 0x2, 0x2, 0x2, 0x3d, 0x45, 0x5, 0x4, 0x3, 0xb, 0x3e, - 0x3f, 0xc, 0x9, 0x2, 0x2, 0x3f, 0x40, 0x9, 0x3, 0x2, 0x2, 0x40, 0x45, - 0x5, 0x4, 0x3, 0xa, 0x41, 0x42, 0xc, 0x8, 0x2, 0x2, 0x42, 0x43, 0x7, - 0x12, 0x2, 0x2, 0x43, 0x45, 0x5, 0x4, 0x3, 0x9, 0x44, 0x3b, 0x3, 0x2, - 0x2, 0x2, 0x44, 0x3e, 0x3, 0x2, 0x2, 0x2, 0x44, 0x41, 0x3, 0x2, 0x2, - 0x2, 0x45, 0x48, 0x3, 0x2, 0x2, 0x2, 0x46, 0x44, 0x3, 0x2, 0x2, 0x2, - 0x46, 0x47, 0x3, 0x2, 0x2, 0x2, 0x47, 0x5, 0x3, 0x2, 0x2, 0x2, 0x48, - 0x46, 0x3, 0x2, 0x2, 0x2, 0x49, 0x4c, 0x7, 0xf, 0x2, 0x2, 0x4a, 0x4c, - 0x7, 0x11, 0x2, 0x2, 0x4b, 0x49, 0x3, 0x2, 0x2, 0x2, 0x4b, 0x4a, 0x3, - 0x2, 0x2, 0x2, 0x4c, 0x7, 0x3, 0x2, 0x2, 0x2, 0x4d, 0x4f, 0x7, 0x10, - 0x2, 0x2, 0x4e, 0x50, 0x5, 0xa, 0x6, 0x2, 0x4f, 0x4e, 0x3, 0x2, 0x2, - 0x2, 0x4f, 0x50, 0x3, 0x2, 0x2, 0x2, 0x50, 0x9, 0x3, 0x2, 0x2, 0x2, - 0x51, 0x52, 0x8, 0x6, 0x1, 0x2, 0x52, 0x53, 0x9, 0x3, 0x2, 0x2, 0x53, - 0x5a, 0x5, 0x6, 0x4, 0x2, 0x54, 0x55, 0x9, 0x3, 0x2, 0x2, 0x55, 0x56, - 0x7, 0x5, 0x2, 0x2, 0x56, 0x57, 0x5, 0x4, 0x3, 0x2, 0x57, 0x58, 0x7, - 0x6, 0x2, 0x2, 0x58, 0x5a, 0x3, 0x2, 0x2, 0x2, 0x59, 0x51, 0x3, 0x2, - 0x2, 0x2, 0x59, 0x54, 0x3, 0x2, 0x2, 0x2, 0x5a, 0x63, 0x3, 0x2, 0x2, - 0x2, 0x5b, 0x5c, 0xc, 0x6, 0x2, 0x2, 0x5c, 0x5d, 0x9, 0x2, 0x2, 0x2, - 0x5d, 0x62, 0x5, 0xc, 0x7, 0x2, 0x5e, 0x5f, 0xc, 0x5, 0x2, 0x2, 0x5f, - 0x60, 0x9, 0x3, 0x2, 0x2, 0x60, 0x62, 0x5, 0xc, 0x7, 0x2, 0x61, 0x5b, - 0x3, 0x2, 0x2, 0x2, 0x61, 0x5e, 0x3, 0x2, 0x2, 0x2, 0x62, 0x65, 0x3, - 0x2, 0x2, 0x2, 0x63, 0x61, 0x3, 0x2, 0x2, 0x2, 0x63, 0x64, 0x3, 0x2, - 0x2, 0x2, 0x64, 0xb, 0x3, 0x2, 0x2, 0x2, 0x65, 0x63, 0x3, 0x2, 0x2, - 0x2, 0x66, 0x67, 0x8, 0x7, 0x1, 0x2, 0x67, 0x68, 0x7, 0x5, 0x2, 0x2, - 0x68, 0x69, 0x5, 0x4, 0x3, 0x2, 0x69, 0x6a, 0x7, 0x6, 0x2, 0x2, 0x6a, - 0x6d, 0x3, 0x2, 0x2, 0x2, 0x6b, 0x6d, 0x5, 0x6, 0x4, 0x2, 0x6c, 0x66, - 0x3, 0x2, 0x2, 0x2, 0x6c, 0x6b, 0x3, 0x2, 0x2, 0x2, 0x6d, 0x73, 0x3, - 0x2, 0x2, 0x2, 0x6e, 0x6f, 0xc, 0x5, 0x2, 0x2, 0x6f, 0x70, 0x9, 0x2, - 0x2, 0x2, 0x70, 0x72, 0x5, 0xc, 0x7, 0x6, 0x71, 0x6e, 0x3, 0x2, 0x2, - 0x2, 0x72, 0x75, 0x3, 0x2, 0x2, 0x2, 0x73, 0x71, 0x3, 0x2, 0x2, 0x2, - 0x73, 0x74, 0x3, 0x2, 0x2, 0x2, 0x74, 0xd, 0x3, 0x2, 0x2, 0x2, 0x75, - 0x73, 0x3, 0x2, 0x2, 0x2, 0xc, 0x39, 0x44, 0x46, 0x4b, 0x4f, 0x59, 0x61, - 0x63, 0x6c, 0x73, - }; - - atn::ATNDeserializer deserializer; - _atn = deserializer.deserialize(_serializedATN); - - size_t count = _atn.getNumberOfDecisions(); - _decisionToDFA.reserve(count); - for (size_t i = 0; i < count; i++) { - _decisionToDFA.emplace_back(_atn.getDecisionState(i), i); - } +void ExprParser::initialize() { +#if ANTLR4_USE_THREAD_LOCAL_CACHE + exprParserInitialize(); +#else + ::antlr4::internal::call_once(exprParserOnceFlag, exprParserInitialize); +#endif } - -ExprParser::Initializer ExprParser::_init; diff --git a/src/libs/antares/antlr-interface/ExprParser.h b/src/libs/antares/antlr-interface/ExprParser.h index 24b2e340dc..4d7f02fd16 100644 --- a/src/libs/antares/antlr-interface/ExprParser.h +++ b/src/libs/antares/antlr-interface/ExprParser.h @@ -1,5 +1,5 @@ -// Generated from Expr.g4 by ANTLR 4.7.2 +// Generated from Expr.g4 by ANTLR 4.13.2 #pragma once @@ -22,14 +22,21 @@ class ExprParser : public antlr4::Parser { RuleRight_expr = 5 }; - ExprParser(antlr4::TokenStream *input); - ~ExprParser(); + explicit ExprParser(antlr4::TokenStream *input); - virtual std::string getGrammarFileName() const override; - virtual const antlr4::atn::ATN& getATN() const override { return _atn; }; - virtual const std::vector& getTokenNames() const override { return _tokenNames; }; // deprecated: use vocabulary instead. - virtual const std::vector& getRuleNames() const override; - virtual antlr4::dfa::Vocabulary& getVocabulary() const override; + ExprParser(antlr4::TokenStream *input, const antlr4::atn::ParserATNSimulatorOptions &options); + + ~ExprParser() override; + + std::string getGrammarFileName() const override; + + const antlr4::atn::ATN& getATN() const override; + + const std::vector& getRuleNames() const override; + + const antlr4::dfa::Vocabulary& getVocabulary() const override; + + antlr4::atn::SerializedATNView getSerializedATN() const override; class FullexprContext; @@ -46,7 +53,8 @@ class ExprParser : public antlr4::Parser { ExprContext *expr(); antlr4::tree::TerminalNode *EOF(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -74,7 +82,8 @@ class ExprParser : public antlr4::Parser { ExprContext *expr(); std::vector shift(); ShiftContext* shift(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; class NegationContext : public ExprContext { @@ -82,7 +91,8 @@ class ExprParser : public antlr4::Parser { NegationContext(ExprContext *ctx); ExprContext *expr(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; class UnsignedAtomContext : public ExprContext { @@ -90,7 +100,8 @@ class ExprParser : public antlr4::Parser { UnsignedAtomContext(ExprContext *ctx); AtomContext *atom(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; class ExpressionContext : public ExprContext { @@ -98,7 +109,8 @@ class ExprParser : public antlr4::Parser { ExpressionContext(ExprContext *ctx); ExprContext *expr(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; class TimeIndexContext : public ExprContext { @@ -107,7 +119,8 @@ class ExprParser : public antlr4::Parser { antlr4::tree::TerminalNode *IDENTIFIER(); ExprContext *expr(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; class ComparisonContext : public ExprContext { @@ -117,7 +130,8 @@ class ExprParser : public antlr4::Parser { std::vector expr(); ExprContext* expr(size_t i); antlr4::tree::TerminalNode *COMPARISON(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; class AllTimeSumContext : public ExprContext { @@ -125,7 +139,8 @@ class ExprParser : public antlr4::Parser { AllTimeSumContext(ExprContext *ctx); ExprContext *expr(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; class TimeShiftContext : public ExprContext { @@ -134,7 +149,8 @@ class ExprParser : public antlr4::Parser { antlr4::tree::TerminalNode *IDENTIFIER(); ShiftContext *shift(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; class FunctionContext : public ExprContext { @@ -143,7 +159,8 @@ class ExprParser : public antlr4::Parser { antlr4::tree::TerminalNode *IDENTIFIER(); ExprContext *expr(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; class AddsubContext : public ExprContext { @@ -153,7 +170,8 @@ class ExprParser : public antlr4::Parser { antlr4::Token *op = nullptr; std::vector expr(); ExprContext* expr(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; class PortFieldContext : public ExprContext { @@ -162,7 +180,8 @@ class ExprParser : public antlr4::Parser { std::vector IDENTIFIER(); antlr4::tree::TerminalNode* IDENTIFIER(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; class MuldivContext : public ExprContext { @@ -172,7 +191,8 @@ class ExprParser : public antlr4::Parser { antlr4::Token *op = nullptr; std::vector expr(); ExprContext* expr(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; ExprContext* expr(); @@ -195,7 +215,8 @@ class ExprParser : public antlr4::Parser { NumberContext(AtomContext *ctx); antlr4::tree::TerminalNode *NUMBER(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; class IdentifierContext : public AtomContext { @@ -203,7 +224,8 @@ class ExprParser : public antlr4::Parser { IdentifierContext(AtomContext *ctx); antlr4::tree::TerminalNode *IDENTIFIER(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; AtomContext* atom(); @@ -215,7 +237,8 @@ class ExprParser : public antlr4::Parser { antlr4::tree::TerminalNode *TIME(); Shift_exprContext *shift_expr(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -240,7 +263,8 @@ class ExprParser : public antlr4::Parser { antlr4::Token *op = nullptr; AtomContext *atom(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; class SignedExpressionContext : public Shift_exprContext { @@ -249,7 +273,8 @@ class ExprParser : public antlr4::Parser { antlr4::Token *op = nullptr; ExprContext *expr(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; class ShiftMuldivContext : public Shift_exprContext { @@ -259,7 +284,8 @@ class ExprParser : public antlr4::Parser { antlr4::Token *op = nullptr; Shift_exprContext *shift_expr(); Right_exprContext *right_expr(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; class ShiftAddsubContext : public Shift_exprContext { @@ -269,7 +295,8 @@ class ExprParser : public antlr4::Parser { antlr4::Token *op = nullptr; Shift_exprContext *shift_expr(); Right_exprContext *right_expr(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; Shift_exprContext* shift_expr(); @@ -292,7 +319,8 @@ class ExprParser : public antlr4::Parser { RightExpressionContext(Right_exprContext *ctx); ExprContext *expr(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; class RightMuldivContext : public Right_exprContext { @@ -302,7 +330,8 @@ class ExprParser : public antlr4::Parser { antlr4::Token *op = nullptr; std::vector right_expr(); Right_exprContext* right_expr(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; class RightAtomContext : public Right_exprContext { @@ -310,33 +339,24 @@ class ExprParser : public antlr4::Parser { RightAtomContext(Right_exprContext *ctx); AtomContext *atom(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; Right_exprContext* right_expr(); Right_exprContext* right_expr(int precedence); - virtual bool sempred(antlr4::RuleContext *_localctx, size_t ruleIndex, size_t predicateIndex) override; + bool sempred(antlr4::RuleContext *_localctx, size_t ruleIndex, size_t predicateIndex) override; + bool exprSempred(ExprContext *_localctx, size_t predicateIndex); bool shift_exprSempred(Shift_exprContext *_localctx, size_t predicateIndex); bool right_exprSempred(Right_exprContext *_localctx, size_t predicateIndex); -private: - static std::vector _decisionToDFA; - static antlr4::atn::PredictionContextCache _sharedContextCache; - static std::vector _ruleNames; - static std::vector _tokenNames; - - static std::vector _literalNames; - static std::vector _symbolicNames; - static antlr4::dfa::Vocabulary _vocabulary; - static antlr4::atn::ATN _atn; - static std::vector _serializedATN; - + // By default the static state used to implement the parser is lazily initialized during the first + // call to the constructor. You can call this function if you wish to initialize the static state + // ahead of time. + static void initialize(); - struct Initializer { - Initializer(); - }; - static Initializer _init; +private: }; diff --git a/src/libs/antares/antlr-interface/ExprVisitor.cpp b/src/libs/antares/antlr-interface/ExprVisitor.cpp index c529765b08..0cdeed41d9 100644 --- a/src/libs/antares/antlr-interface/ExprVisitor.cpp +++ b/src/libs/antares/antlr-interface/ExprVisitor.cpp @@ -1,5 +1,5 @@ -// Generated from Expr.g4 by ANTLR 4.7.2 +// Generated from Expr.g4 by ANTLR 4.13.2 #include "ExprVisitor.h" diff --git a/src/libs/antares/antlr-interface/ExprVisitor.h b/src/libs/antares/antlr-interface/ExprVisitor.h index 231fc85982..e92c3e3402 100644 --- a/src/libs/antares/antlr-interface/ExprVisitor.h +++ b/src/libs/antares/antlr-interface/ExprVisitor.h @@ -1,5 +1,5 @@ -// Generated from Expr.g4 by ANTLR 4.7.2 +// Generated from Expr.g4 by ANTLR 4.13.2 #pragma once @@ -19,51 +19,51 @@ class ExprVisitor : public antlr4::tree::AbstractParseTreeVisitor { /** * Visit parse trees produced by ExprParser. */ - virtual antlrcpp::Any visitFullexpr(ExprParser::FullexprContext *context) = 0; + virtual std::any visitFullexpr(ExprParser::FullexprContext *context) = 0; - virtual antlrcpp::Any visitTimeSum(ExprParser::TimeSumContext *context) = 0; + virtual std::any visitTimeSum(ExprParser::TimeSumContext *context) = 0; - virtual antlrcpp::Any visitNegation(ExprParser::NegationContext *context) = 0; + virtual std::any visitNegation(ExprParser::NegationContext *context) = 0; - virtual antlrcpp::Any visitUnsignedAtom(ExprParser::UnsignedAtomContext *context) = 0; + virtual std::any visitUnsignedAtom(ExprParser::UnsignedAtomContext *context) = 0; - virtual antlrcpp::Any visitExpression(ExprParser::ExpressionContext *context) = 0; + virtual std::any visitExpression(ExprParser::ExpressionContext *context) = 0; - virtual antlrcpp::Any visitTimeIndex(ExprParser::TimeIndexContext *context) = 0; + virtual std::any visitTimeIndex(ExprParser::TimeIndexContext *context) = 0; - virtual antlrcpp::Any visitComparison(ExprParser::ComparisonContext *context) = 0; + virtual std::any visitComparison(ExprParser::ComparisonContext *context) = 0; - virtual antlrcpp::Any visitAllTimeSum(ExprParser::AllTimeSumContext *context) = 0; + virtual std::any visitAllTimeSum(ExprParser::AllTimeSumContext *context) = 0; - virtual antlrcpp::Any visitTimeShift(ExprParser::TimeShiftContext *context) = 0; + virtual std::any visitTimeShift(ExprParser::TimeShiftContext *context) = 0; - virtual antlrcpp::Any visitFunction(ExprParser::FunctionContext *context) = 0; + virtual std::any visitFunction(ExprParser::FunctionContext *context) = 0; - virtual antlrcpp::Any visitAddsub(ExprParser::AddsubContext *context) = 0; + virtual std::any visitAddsub(ExprParser::AddsubContext *context) = 0; - virtual antlrcpp::Any visitPortField(ExprParser::PortFieldContext *context) = 0; + virtual std::any visitPortField(ExprParser::PortFieldContext *context) = 0; - virtual antlrcpp::Any visitMuldiv(ExprParser::MuldivContext *context) = 0; + virtual std::any visitMuldiv(ExprParser::MuldivContext *context) = 0; - virtual antlrcpp::Any visitNumber(ExprParser::NumberContext *context) = 0; + virtual std::any visitNumber(ExprParser::NumberContext *context) = 0; - virtual antlrcpp::Any visitIdentifier(ExprParser::IdentifierContext *context) = 0; + virtual std::any visitIdentifier(ExprParser::IdentifierContext *context) = 0; - virtual antlrcpp::Any visitShift(ExprParser::ShiftContext *context) = 0; + virtual std::any visitShift(ExprParser::ShiftContext *context) = 0; - virtual antlrcpp::Any visitSignedAtom(ExprParser::SignedAtomContext *context) = 0; + virtual std::any visitSignedAtom(ExprParser::SignedAtomContext *context) = 0; - virtual antlrcpp::Any visitSignedExpression(ExprParser::SignedExpressionContext *context) = 0; + virtual std::any visitSignedExpression(ExprParser::SignedExpressionContext *context) = 0; - virtual antlrcpp::Any visitShiftMuldiv(ExprParser::ShiftMuldivContext *context) = 0; + virtual std::any visitShiftMuldiv(ExprParser::ShiftMuldivContext *context) = 0; - virtual antlrcpp::Any visitShiftAddsub(ExprParser::ShiftAddsubContext *context) = 0; + virtual std::any visitShiftAddsub(ExprParser::ShiftAddsubContext *context) = 0; - virtual antlrcpp::Any visitRightExpression(ExprParser::RightExpressionContext *context) = 0; + virtual std::any visitRightExpression(ExprParser::RightExpressionContext *context) = 0; - virtual antlrcpp::Any visitRightMuldiv(ExprParser::RightMuldivContext *context) = 0; + virtual std::any visitRightMuldiv(ExprParser::RightMuldivContext *context) = 0; - virtual antlrcpp::Any visitRightAtom(ExprParser::RightAtomContext *context) = 0; + virtual std::any visitRightAtom(ExprParser::RightAtomContext *context) = 0; }; From b47d32b5bdd0b3828974d12d59ec396e4bb54e5f Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Wed, 23 Oct 2024 17:57:06 +0200 Subject: [PATCH 04/92] Add files --- src/libs/antares/CMakeLists.txt | 4 +- src/solver/modelConverter/CMakeLists.txt | 5 +- .../modelConverter/convertorVisitor.cpp | 27 +++ .../solver/modelConverter/convertorVisitor.h | 173 ++++++++++++++++++ src/tests/src/libs/antares/CMakeLists.txt | 5 +- .../src/solver/modelParser/CMakeLists.txt | 3 +- .../modelParser/testConvertorVisitor.cpp | 26 +++ 7 files changed, 234 insertions(+), 9 deletions(-) create mode 100644 src/solver/modelConverter/convertorVisitor.cpp create mode 100644 src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h create mode 100644 src/tests/src/solver/modelParser/testConvertorVisitor.cpp diff --git a/src/libs/antares/CMakeLists.txt b/src/libs/antares/CMakeLists.txt index 5b4f253052..c06632cd29 100644 --- a/src/libs/antares/CMakeLists.txt +++ b/src/libs/antares/CMakeLists.txt @@ -28,9 +28,7 @@ add_subdirectory(study-loader) add_subdirectory(sys) add_subdirectory(utils) add_subdirectory(writer) -if(WITH_ANTLR4) - add_subdirectory(antlr-interface) -endif() +add_subdirectory(antlr-interface) add_subdirectory(optimization-options) diff --git a/src/solver/modelConverter/CMakeLists.txt b/src/solver/modelConverter/CMakeLists.txt index d679c3f7ff..dbc063b6a7 100644 --- a/src/solver/modelConverter/CMakeLists.txt +++ b/src/solver/modelConverter/CMakeLists.txt @@ -1,6 +1,8 @@ set(SOURCES modelConverter.cpp + convertorVisitor.cpp include/antares/solver/modelConverter/modelConverter.h + include/antares/solver/modelConverter/convertorVisitor.h ) # Create the library @@ -18,8 +20,9 @@ target_link_libraries(modelConverter PRIVATE Antares::antares-solver-libObjectModel Antares::modelParser + Antares::antlr-interface ) install(DIRECTORY include/antares DESTINATION "include" -) \ No newline at end of file +) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp new file mode 100644 index 0000000000..577ef25771 --- /dev/null +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -0,0 +1,27 @@ +/* + * Copyright 2007-2024, RTE (https://www.rte-france.com) + * See AUTHORS.txt + * SPDX-License-Identifier: MPL-2.0 + * This file is part of Antares-Simulator, + * Adequacy and Performance assessment for interconnected energy networks. + * + * Antares_Simulator is free software: you can redistribute it and/or modify + * it under the terms of the Mozilla Public Licence 2.0 as published by + * the Mozilla Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * Antares_Simulator is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * Mozilla Public Licence 2.0 for more details. + * + * You should have received a copy of the Mozilla Public Licence 2.0 + * along with Antares_Simulator. If not, see . + */ + +#include + +namespace Antares::Solver::ModelConverter +{ + +} // namespace Antares::Solver::ModelConverter diff --git a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h new file mode 100644 index 0000000000..e1a1233cb6 --- /dev/null +++ b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h @@ -0,0 +1,173 @@ +/* + * Copyright 2007-2024, RTE (https://www.rte-france.com) + * See AUTHORS.txt + * SPDX-License-Identifier: MPL-2.0 + * This file is part of Antares-Simulator, + * Adequacy and Performance assessment for interconnected energy networks. + * + * Antares_Simulator is free software: you can redistribute it and/or modify + * it under the terms of the Mozilla Public Licence 2.0 as published by + * the Mozilla Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * Antares_Simulator is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * Mozilla Public Licence 2.0 for more details. + * + * You should have received a copy of the Mozilla Public Licence 2.0 + * along with Antares_Simulator. If not, see . + */ + +#pragma once + +/* #include */ +/* #include */ +/* #include */ +/* #include */ + +/* namespace Antares::Solver::ModelConverter */ +/* { */ +/* // Visitor to convert nodes to Antares::Solver::Nodes */ +/* // TODO add reference to model to be able to resolve names as either parameters or variables */ +/* class ConvertorVisitor: public ExprVisitor */ +/* { */ +/* public: */ +/* ConvertorVisitor(Antares::Solver::Registry& registry, */ +/* const Model& model): */ +/* registry_(registry), */ +/* model_(model) */ +/* { */ +/* } */ + +/* virtual antlrcpp::Any visitChildren(antlr4::tree::ParseTree* node) override */ +/* { */ +/* for (auto child: node->children) */ +/* { */ +/* child->accept(this); */ +/* } */ +/* return antlrcpp::Any(); */ +/* } */ + +/* std::any visit(antlr4::tree::ParseTree* tree) override */ +/* { */ +/* return tree->accept(this); */ +/* } */ + +/* std::any visitTerminal(antlr4::tree::TerminalNode* node) override */ +/* { */ +/* return std::any(); */ +/* } */ + +/* std::any visitErrorNode(antlr4::tree::ErrorNode* node) override */ +/* { */ +/* return std::any(); */ +/* } */ + +/* std::any visitIdentifier(ExprParser::IdentifierContext* context) override */ +/* { */ +/* bool is_parameter = false; */ +/* for (const auto& parameter: model_.parameters) */ +/* { */ +/* if (parameter.name == context->getText()) */ +/* { */ +/* is_parameter = true; */ +/* break; */ +/* } */ +/* } */ +/* if (is_parameter) */ +/* { */ +/* return static_cast( */ +/* registry_.create(context->getText())); */ +/* } */ +/* else */ +/* { */ +/* return static_cast( */ +/* registry_.create(context->getText())); */ +/* } */ +/* } */ + +/* std::any visitMuldiv(ExprParser::MuldivContext* context) override */ +/* { */ +/* // Meh */ +/* // Having to know the underlying type of the node is not great. We can eitgher return */ +/* // expression node containing the concrete node to be able to always anycast Or */ +/* // we can return a pair Node/type (difficult to return a type in c++) */ +/* auto toNodePtr = [](const auto& x) */ +/* { return std::any_cast(x); }; */ +/* auto* left = toNodePtr(visit(context->expr(0))); */ +/* auto* right = toNodePtr(visit(context->expr(1))); */ +/* auto mult_node = registry_.create(left, right); */ +/* return dynamic_cast(mult_node); */ +/* } */ + +/* std::any visitFullexpr(ExprParser::FullexprContext* context) override */ +/* { */ +/* return std::any(); */ +/* } */ + +/* std::any visitShift(ExprParser::ShiftContext* context) override */ +/* { */ +/* return std::any(); */ +/* } */ + +/* std::any visitNegation(ExprParser::NegationContext* context) override */ +/* { */ +/* return std::any(); */ +/* } */ + +/* std::any visitExpression(ExprParser::ExpressionContext* context) override */ +/* { */ +/* return std::any(); */ +/* } */ + +/* std::any visitComparison(ExprParser::ComparisonContext* context) override */ +/* { */ +/* return std::any(); */ +/* } */ + +/* std::any visitAddsub(ExprParser::AddsubContext* context) override */ +/* { */ +/* return std::any(); */ +/* } */ + +/* std::any visitPortField(ExprParser::PortFieldContext* context) override */ +/* { */ +/* return std::any(); */ +/* } */ + +/* std::any visitNumber(ExprParser::NumberContext* context) override */ +/* { */ +/* return std::any(); */ +/* } */ + +/* std::any visitTimeIndex(ExprParser::TimeIndexContext* context) override */ +/* { */ +/* return std::any(); */ +/* } */ + +/* std::any visitTimeShift(ExprParser::TimeShiftContext* context) override */ +/* { */ +/* return std::any(); */ +/* } */ + +/* std::any visitFunction(ExprParser::FunctionContext* context) override */ +/* { */ +/* return std::any(); */ +/* } */ + +/* std::any visitTimeShiftRange(ExprParser::TimeShiftRangeContext* context) override */ +/* { */ +/* return std::any(); */ +/* } */ + +/* std::any visitTimeRange(ExprParser::TimeRangeContext* context) override */ +/* { */ +/* return std::any(); */ +/* } */ + +/* Antares::Solver::Registry& registry_; */ +/* const Model& model_; */ +/* }; */ + +/* } // namespace Antares::Solver::ModelConverter */ diff --git a/src/tests/src/libs/antares/CMakeLists.txt b/src/tests/src/libs/antares/CMakeLists.txt index 654f897b0a..97ef92fd0e 100644 --- a/src/tests/src/libs/antares/CMakeLists.txt +++ b/src/tests/src/libs/antares/CMakeLists.txt @@ -5,10 +5,7 @@ add_subdirectory(benchmarking) add_subdirectory(inifile) add_subdirectory(yaml-parser) - -if(WITH_ANTLR4) - add_subdirectory(antlr4-interface) -endif() +add_subdirectory(antlr4-interface) set(src_libs_antares "${CMAKE_SOURCE_DIR}/libs/antares") diff --git a/src/tests/src/solver/modelParser/CMakeLists.txt b/src/tests/src/solver/modelParser/CMakeLists.txt index e694d66126..b3eb1c170e 100644 --- a/src/tests/src/solver/modelParser/CMakeLists.txt +++ b/src/tests/src/solver/modelParser/CMakeLists.txt @@ -2,6 +2,7 @@ set(SOURCE_FILES testModelParser.cpp testModelTranslator.cpp + testConvertorVisitor.cpp test_full.cpp enum_operators.h ) @@ -25,4 +26,4 @@ set_target_properties(${EXECUTABLE_NAME} PROPERTIES FOLDER Unit-tests) add_test(NAME TestModelParser COMMAND TestModelParser) # Set test properties -set_property(TEST TestModelParser PROPERTY LABELS unit) \ No newline at end of file +set_property(TEST TestModelParser PROPERTY LABELS unit) diff --git a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp new file mode 100644 index 0000000000..6d02560646 --- /dev/null +++ b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp @@ -0,0 +1,26 @@ +/* + * Copyright 2007-2024, RTE (https://www.rte-france.com) + * See AUTHORS.txt + * SPDX-License-Identifier: MPL-2.0 + * This file is part of Antares-Simulator, + * Adequacy and Performance assessment for interconnected energy networks. + * + * Antares_Simulator is free software: you can redistribute it and/or modify + * it under the terms of the Mozilla Public Licence 2.0 as published by + * the Mozilla Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * Antares_Simulator is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * Mozilla Public Licence 2.0 for more details. + * + * You should have received a copy of the Mozilla Public Licence 2.0 + * along with Antares_Simulator. If not, see . + */ +#define WIN32_LEAN_AND_MEAN + +#include + +#include "antares/solver/modelConverter/convertorVisitor.h" + From 17ab4741d67184298f599eb6c37175ee0c57b01c Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Wed, 23 Oct 2024 17:57:29 +0200 Subject: [PATCH 05/92] Remove WITH_ANTLR4 cmake option --- src/CMakeLists.txt | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e93c5fcd58..d96fd52184 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -183,9 +183,6 @@ message(STATUS "Build antares tools: ${BUILD_TOOLS}") option(BUILD_ORTOOLS "Build OR-Tools" OFF) message(STATUS "Build OR-Tools: ${BUILD_ORTOOLS}") -option(WITH_ANTLR4 "With antlr4" OFF) -message(STATUS "With antlr4: ${WITH_ANTLR4}") - option(BUILD_MERSENNE_TWISTER_PYBIND11 "Build pybind11 bindings for Mersenne-Twister" OFF) if (${BUILD_MERSENNE_TWISTER_PYBIND11}) find_package(pybind11 REQUIRED) From 9cccbc7507825ed97a8771a9d7c97377985068af Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Thu, 24 Oct 2024 13:59:59 +0200 Subject: [PATCH 06/92] Compile OK --- src/solver/modelConverter/CMakeLists.txt | 1 + .../solver/modelConverter/convertorVisitor.h | 300 +++++++++--------- .../modelParser/testConvertorVisitor.cpp | 2 +- 3 files changed, 152 insertions(+), 151 deletions(-) diff --git a/src/solver/modelConverter/CMakeLists.txt b/src/solver/modelConverter/CMakeLists.txt index dbc063b6a7..a6128d7070 100644 --- a/src/solver/modelConverter/CMakeLists.txt +++ b/src/solver/modelConverter/CMakeLists.txt @@ -21,6 +21,7 @@ target_link_libraries(modelConverter Antares::antares-solver-libObjectModel Antares::modelParser Antares::antlr-interface + Antares::solver-expressions ) install(DIRECTORY include/antares diff --git a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h index e1a1233cb6..3b3f5d0877 100644 --- a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h +++ b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h @@ -21,153 +21,153 @@ #pragma once -/* #include */ -/* #include */ -/* #include */ -/* #include */ - -/* namespace Antares::Solver::ModelConverter */ -/* { */ -/* // Visitor to convert nodes to Antares::Solver::Nodes */ -/* // TODO add reference to model to be able to resolve names as either parameters or variables */ -/* class ConvertorVisitor: public ExprVisitor */ -/* { */ -/* public: */ -/* ConvertorVisitor(Antares::Solver::Registry& registry, */ -/* const Model& model): */ -/* registry_(registry), */ -/* model_(model) */ -/* { */ -/* } */ - -/* virtual antlrcpp::Any visitChildren(antlr4::tree::ParseTree* node) override */ -/* { */ -/* for (auto child: node->children) */ -/* { */ -/* child->accept(this); */ -/* } */ -/* return antlrcpp::Any(); */ -/* } */ - -/* std::any visit(antlr4::tree::ParseTree* tree) override */ -/* { */ -/* return tree->accept(this); */ -/* } */ - -/* std::any visitTerminal(antlr4::tree::TerminalNode* node) override */ -/* { */ -/* return std::any(); */ -/* } */ - -/* std::any visitErrorNode(antlr4::tree::ErrorNode* node) override */ -/* { */ -/* return std::any(); */ -/* } */ - -/* std::any visitIdentifier(ExprParser::IdentifierContext* context) override */ -/* { */ -/* bool is_parameter = false; */ -/* for (const auto& parameter: model_.parameters) */ -/* { */ -/* if (parameter.name == context->getText()) */ -/* { */ -/* is_parameter = true; */ -/* break; */ -/* } */ -/* } */ -/* if (is_parameter) */ -/* { */ -/* return static_cast( */ -/* registry_.create(context->getText())); */ -/* } */ -/* else */ -/* { */ -/* return static_cast( */ -/* registry_.create(context->getText())); */ -/* } */ -/* } */ - -/* std::any visitMuldiv(ExprParser::MuldivContext* context) override */ -/* { */ -/* // Meh */ -/* // Having to know the underlying type of the node is not great. We can eitgher return */ -/* // expression node containing the concrete node to be able to always anycast Or */ -/* // we can return a pair Node/type (difficult to return a type in c++) */ -/* auto toNodePtr = [](const auto& x) */ -/* { return std::any_cast(x); }; */ -/* auto* left = toNodePtr(visit(context->expr(0))); */ -/* auto* right = toNodePtr(visit(context->expr(1))); */ -/* auto mult_node = registry_.create(left, right); */ -/* return dynamic_cast(mult_node); */ -/* } */ - -/* std::any visitFullexpr(ExprParser::FullexprContext* context) override */ -/* { */ -/* return std::any(); */ -/* } */ - -/* std::any visitShift(ExprParser::ShiftContext* context) override */ -/* { */ -/* return std::any(); */ -/* } */ - -/* std::any visitNegation(ExprParser::NegationContext* context) override */ -/* { */ -/* return std::any(); */ -/* } */ - -/* std::any visitExpression(ExprParser::ExpressionContext* context) override */ -/* { */ -/* return std::any(); */ -/* } */ - -/* std::any visitComparison(ExprParser::ComparisonContext* context) override */ -/* { */ -/* return std::any(); */ -/* } */ - -/* std::any visitAddsub(ExprParser::AddsubContext* context) override */ -/* { */ -/* return std::any(); */ -/* } */ - -/* std::any visitPortField(ExprParser::PortFieldContext* context) override */ -/* { */ -/* return std::any(); */ -/* } */ - -/* std::any visitNumber(ExprParser::NumberContext* context) override */ -/* { */ -/* return std::any(); */ -/* } */ - -/* std::any visitTimeIndex(ExprParser::TimeIndexContext* context) override */ -/* { */ -/* return std::any(); */ -/* } */ - -/* std::any visitTimeShift(ExprParser::TimeShiftContext* context) override */ -/* { */ -/* return std::any(); */ -/* } */ - -/* std::any visitFunction(ExprParser::FunctionContext* context) override */ -/* { */ -/* return std::any(); */ -/* } */ - -/* std::any visitTimeShiftRange(ExprParser::TimeShiftRangeContext* context) override */ -/* { */ -/* return std::any(); */ -/* } */ - -/* std::any visitTimeRange(ExprParser::TimeRangeContext* context) override */ -/* { */ -/* return std::any(); */ -/* } */ - -/* Antares::Solver::Registry& registry_; */ -/* const Model& model_; */ -/* }; */ - -/* } // namespace Antares::Solver::ModelConverter */ +#include +#include +#include +#include + +namespace Antares::Solver::ModelConverter +{ +// Visitor to convert nodes to Antares::Solver::Nodes +// TODO add reference to model to be able to resolve names as either parameters or variables +class ConvertorVisitor: public ExprVisitor +{ +public: + ConvertorVisitor(Antares::Solver::Registry& registry, + const ObjectModel::Model& model): + registry_(registry), + model_(model) + { + } + + virtual antlrcpp::Any visitChildren(antlr4::tree::ParseTree* node) override + { + for (auto child: node->children) + { + child->accept(this); + } + return antlrcpp::Any(); + } + + std::any visit(antlr4::tree::ParseTree* tree) override + { + return tree->accept(this); + } + + std::any visitTerminal(antlr4::tree::TerminalNode* node) override + { + return std::any(); + } + + std::any visitErrorNode(antlr4::tree::ErrorNode* node) override + { + return std::any(); + } + + std::any visitIdentifier(ExprParser::IdentifierContext* context) override + { + bool is_parameter = false; + for (const auto& [name, parameter]: model_.Parameters()) + { + if (name == context->getText()) + { + is_parameter = true; + break; + } + } + if (is_parameter) + { + return static_cast( + registry_.create(context->getText())); + } + else + { + return static_cast( + registry_.create(context->getText())); + } + } + + std::any visitMuldiv(ExprParser::MuldivContext* context) override + { + // Meh + // Having to know the underlying type of the node is not great. We can eitgher return + // expression node containing the concrete node to be able to always anycast Or + // we can return a pair Node/type (difficult to return a type in c++) + auto toNodePtr = [](const auto& x) + { return std::any_cast(x); }; + auto* left = toNodePtr(visit(context->expr(0))); + auto* right = toNodePtr(visit(context->expr(1))); + auto mult_node = registry_.create(left, right); + return dynamic_cast(mult_node); + } + + std::any visitFullexpr(ExprParser::FullexprContext* context) override + { + return std::any(); + } + + std::any visitShift(ExprParser::ShiftContext* context) override + { + return std::any(); + } + + std::any visitNegation(ExprParser::NegationContext* context) override + { + return std::any(); + } + + std::any visitExpression(ExprParser::ExpressionContext* context) override + { + return std::any(); + } + + std::any visitComparison(ExprParser::ComparisonContext* context) override + { + return std::any(); + } + + std::any visitAddsub(ExprParser::AddsubContext* context) override + { + return std::any(); + } + + std::any visitPortField(ExprParser::PortFieldContext* context) override + { + return std::any(); + } + + std::any visitNumber(ExprParser::NumberContext* context) override + { + return std::any(); + } + + std::any visitTimeIndex(ExprParser::TimeIndexContext* context) override + { + return std::any(); + } + + std::any visitTimeShift(ExprParser::TimeShiftContext* context) override + { + return std::any(); + } + + std::any visitFunction(ExprParser::FunctionContext* context) override + { + return std::any(); + } + + /* std::any visitTimeShiftRange(ExprParser::TimeShiftRangeContext* context) override */ + /* { */ + /* return std::any(); */ + /* } */ + + /* std::any visitTimeRange(ExprParser::TimeRangeContext* context) override */ + /* { */ + /* return std::any(); */ + /* } */ + + Antares::Solver::Registry& registry_; + const ObjectModel::Model& model_; +}; + +} // namespace Antares::Solver::ModelConverter diff --git a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp index 6d02560646..f9ad4aaca7 100644 --- a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp +++ b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp @@ -22,5 +22,5 @@ #include -#include "antares/solver/modelConverter/convertorVisitor.h" +/* #include "antares/solver/modelConverter/convertorVisitor.h" */ From 2d61969111323491ebe59de07d87653215cf1737 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Thu, 24 Oct 2024 14:22:55 +0200 Subject: [PATCH 07/92] format --- .../include/antares/solver/modelConverter/convertorVisitor.h | 3 ++- src/tests/src/solver/modelParser/testConvertorVisitor.cpp | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h index 3b3f5d0877..063202d047 100644 --- a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h +++ b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h @@ -21,9 +21,10 @@ #pragma once -#include #include + #include +#include #include namespace Antares::Solver::ModelConverter diff --git a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp index f9ad4aaca7..b719f65a8b 100644 --- a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp +++ b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp @@ -23,4 +23,3 @@ #include /* #include "antares/solver/modelConverter/convertorVisitor.h" */ - From 2fc326517d3b5174212df46aed3794825d62028d Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Thu, 24 Oct 2024 14:55:40 +0200 Subject: [PATCH 08/92] find package antlr-runtime in main cmakelists --- src/CMakeLists.txt | 2 ++ src/libs/antares/antlr-interface/CMakeLists.txt | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d96fd52184..6d57164639 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -191,6 +191,8 @@ endif() #Boost header libraries find_package(Boost REQUIRED) +find_package(antlr4-runtime REQUIRED) + #Sirius solver if(POLICY CMP0074) cmake_policy(SET CMP0074 NEW) diff --git a/src/libs/antares/antlr-interface/CMakeLists.txt b/src/libs/antares/antlr-interface/CMakeLists.txt index 4cd06fef3b..727ec96d0e 100644 --- a/src/libs/antares/antlr-interface/CMakeLists.txt +++ b/src/libs/antares/antlr-interface/CMakeLists.txt @@ -13,7 +13,6 @@ ExprLexer.cpp ExprParser.cpp ExprVisitor.cpp ) -find_package(antlr4-runtime CONFIG REQUIRED) add_library(${PROJ} ${SRCS}) add_library(Antares::${PROJ} ALIAS ${PROJ}) From 1b7316d1375a53f821ede1481ca6e705d024e30b Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Thu, 24 Oct 2024 15:24:13 +0200 Subject: [PATCH 09/92] add antlr to vcpkg --- src/vcpkg.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/vcpkg.json b/src/vcpkg.json index b87c13d7b3..775fab0682 100644 --- a/src/vcpkg.json +++ b/src/vcpkg.json @@ -37,6 +37,9 @@ }, { "name": "yaml-cpp" + }, + { + "name": "antlr4" } ] } From 4a0f5faae3156f3a2a34f7b99ec4b9eefd387fcc Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Fri, 25 Oct 2024 12:27:55 +0200 Subject: [PATCH 10/92] move functions to cpp --- .../modelConverter/convertorVisitor.cpp | 132 +++++++++++++++ .../solver/modelConverter/convertorVisitor.h | 153 +++--------------- 2 files changed, 154 insertions(+), 131 deletions(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index 577ef25771..34940116a5 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -23,5 +23,137 @@ namespace Antares::Solver::ModelConverter { +ConvertorVisitor::ConvertorVisitor(Antares::Solver::Registry& registry, + const ObjectModel::Model& model): + registry_(registry), + model_(model) +{ +} + +antlrcpp::Any ConvertorVisitor::visitChildren(antlr4::tree::ParseTree* node) +{ + for (auto child: node->children) + { + child->accept(this); + } + return antlrcpp::Any(); +} + +std::any ConvertorVisitor::visit(antlr4::tree::ParseTree* tree) +{ + return tree->accept(this); +} + +std::any ConvertorVisitor::visitTerminal(antlr4::tree::TerminalNode* node) +{ + return std::any(); +} + +std::any ConvertorVisitor::visitErrorNode(antlr4::tree::ErrorNode* node) +{ + return std::any(); +} + +std::any ConvertorVisitor::visitIdentifier(ExprParser::IdentifierContext* context) +{ + bool is_parameter = false; + for (const auto& [name, parameter]: model_.Parameters()) + { + if (name == context->getText()) + { + is_parameter = true; + break; + } + } + if (is_parameter) + { + return static_cast( + registry_.create(context->getText())); + } + else + { + return static_cast( + registry_.create(context->getText())); + } +} + +std::any ConvertorVisitor::visitMuldiv(ExprParser::MuldivContext* context) +{ + // Meh + // Having to know the underlying type of the node is not great. We can eitgher return + // expression node containing the concrete node to be able to always anycast Or + // we can return a pair Node/type (difficult to return a type in c++) + auto toNodePtr = [](const auto& x) + { return std::any_cast(x); }; + auto* left = toNodePtr(visit(context->expr(0))); + auto* right = toNodePtr(visit(context->expr(1))); + auto mult_node = registry_.create(left, right); + return dynamic_cast(mult_node); +} + +std::any ConvertorVisitor::visitFullexpr(ExprParser::FullexprContext* context) +{ + return std::any(); +} + +std::any ConvertorVisitor::visitShift(ExprParser::ShiftContext* context) +{ + return std::any(); +} + +std::any ConvertorVisitor::visitNegation(ExprParser::NegationContext* context) +{ + return std::any(); +} + +std::any ConvertorVisitor::visitExpression(ExprParser::ExpressionContext* context) +{ + return std::any(); +} + +std::any ConvertorVisitor::visitComparison(ExprParser::ComparisonContext* context) +{ + return std::any(); +} + +std::any ConvertorVisitor::visitAddsub(ExprParser::AddsubContext* context) +{ + return std::any(); +} + +std::any ConvertorVisitor::visitPortField(ExprParser::PortFieldContext* context) +{ + return std::any(); +} + +std::any ConvertorVisitor::visitNumber(ExprParser::NumberContext* context) +{ + return std::any(); +} + +std::any ConvertorVisitor::visitTimeIndex(ExprParser::TimeIndexContext* context) +{ + return std::any(); +} + +std::any ConvertorVisitor::visitTimeShift(ExprParser::TimeShiftContext* context) +{ + return std::any(); +} + +std::any ConvertorVisitor::visitFunction(ExprParser::FunctionContext* context) +{ + return std::any(); +} + +/* std::any ConvertorVisitor::visitTimeShiftRange(ExprParser::TimeShiftRangeContext* context) */ +/* { */ +/* return std::any(); */ +/* } */ + +/* std::any ConvertorVisitor::visitTimeRange(ExprParser::TimeRangeContext* context) */ +/* { */ +/* return std::any(); */ +/* } */ } // namespace Antares::Solver::ModelConverter diff --git a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h index 063202d047..b81460a4a6 100644 --- a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h +++ b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h @@ -35,137 +35,28 @@ class ConvertorVisitor: public ExprVisitor { public: ConvertorVisitor(Antares::Solver::Registry& registry, - const ObjectModel::Model& model): - registry_(registry), - model_(model) - { - } - - virtual antlrcpp::Any visitChildren(antlr4::tree::ParseTree* node) override - { - for (auto child: node->children) - { - child->accept(this); - } - return antlrcpp::Any(); - } - - std::any visit(antlr4::tree::ParseTree* tree) override - { - return tree->accept(this); - } - - std::any visitTerminal(antlr4::tree::TerminalNode* node) override - { - return std::any(); - } - - std::any visitErrorNode(antlr4::tree::ErrorNode* node) override - { - return std::any(); - } - - std::any visitIdentifier(ExprParser::IdentifierContext* context) override - { - bool is_parameter = false; - for (const auto& [name, parameter]: model_.Parameters()) - { - if (name == context->getText()) - { - is_parameter = true; - break; - } - } - if (is_parameter) - { - return static_cast( - registry_.create(context->getText())); - } - else - { - return static_cast( - registry_.create(context->getText())); - } - } - - std::any visitMuldiv(ExprParser::MuldivContext* context) override - { - // Meh - // Having to know the underlying type of the node is not great. We can eitgher return - // expression node containing the concrete node to be able to always anycast Or - // we can return a pair Node/type (difficult to return a type in c++) - auto toNodePtr = [](const auto& x) - { return std::any_cast(x); }; - auto* left = toNodePtr(visit(context->expr(0))); - auto* right = toNodePtr(visit(context->expr(1))); - auto mult_node = registry_.create(left, right); - return dynamic_cast(mult_node); - } - - std::any visitFullexpr(ExprParser::FullexprContext* context) override - { - return std::any(); - } - - std::any visitShift(ExprParser::ShiftContext* context) override - { - return std::any(); - } - - std::any visitNegation(ExprParser::NegationContext* context) override - { - return std::any(); - } - - std::any visitExpression(ExprParser::ExpressionContext* context) override - { - return std::any(); - } - - std::any visitComparison(ExprParser::ComparisonContext* context) override - { - return std::any(); - } - - std::any visitAddsub(ExprParser::AddsubContext* context) override - { - return std::any(); - } - - std::any visitPortField(ExprParser::PortFieldContext* context) override - { - return std::any(); - } - - std::any visitNumber(ExprParser::NumberContext* context) override - { - return std::any(); - } - - std::any visitTimeIndex(ExprParser::TimeIndexContext* context) override - { - return std::any(); - } - - std::any visitTimeShift(ExprParser::TimeShiftContext* context) override - { - return std::any(); - } - - std::any visitFunction(ExprParser::FunctionContext* context) override - { - return std::any(); - } - - /* std::any visitTimeShiftRange(ExprParser::TimeShiftRangeContext* context) override */ - /* { */ - /* return std::any(); */ - /* } */ - - /* std::any visitTimeRange(ExprParser::TimeRangeContext* context) override */ - /* { */ - /* return std::any(); */ - /* } */ + const ObjectModel::Model& model); + + virtual antlrcpp::Any visitChildren(antlr4::tree::ParseTree* node) override; + + std::any visit(antlr4::tree::ParseTree* tree) override; + std::any visitTerminal(antlr4::tree::TerminalNode* node) override; + std::any visitErrorNode(antlr4::tree::ErrorNode* node) override; + std::any visitIdentifier(ExprParser::IdentifierContext* context) override; + std::any visitMuldiv(ExprParser::MuldivContext* context) override; + std::any visitFullexpr(ExprParser::FullexprContext* context) override; + std::any visitShift(ExprParser::ShiftContext* context) override; + std::any visitNegation(ExprParser::NegationContext* context) override; + std::any visitExpression(ExprParser::ExpressionContext* context) override; + std::any visitComparison(ExprParser::ComparisonContext* context) override; + std::any visitAddsub(ExprParser::AddsubContext* context) override; + std::any visitPortField(ExprParser::PortFieldContext* context) override; + std::any visitNumber(ExprParser::NumberContext* context) override; + std::any visitTimeIndex(ExprParser::TimeIndexContext* context) override; + std::any visitTimeShift(ExprParser::TimeShiftContext* context) override; + std::any visitFunction(ExprParser::FunctionContext* context) override; + /* std::any visitTimeShiftRange(ExprParser::TimeShiftRangeContext* context) override; */ + /* std::any visitTimeRange(ExprParser::TimeRangeContext* context) override; */ Antares::Solver::Registry& registry_; const ObjectModel::Model& model_; From 35f9f8030b1afb283df1e6e4260f280e1f6ae336 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Fri, 25 Oct 2024 15:05:51 +0200 Subject: [PATCH 11/92] add node to expression --- src/solver/libModelObject/CMakeLists.txt | 1 + .../include/antares/solver/libObjectModel/expression.h | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/src/solver/libModelObject/CMakeLists.txt b/src/solver/libModelObject/CMakeLists.txt index bb489afd7e..d1272d6b5a 100644 --- a/src/solver/libModelObject/CMakeLists.txt +++ b/src/solver/libModelObject/CMakeLists.txt @@ -28,6 +28,7 @@ target_include_directories(antares-solver-libObjectModel ) target_link_libraries(antares-solver-libObjectModel PUBLIC + Antares::solver-expressions ) install(DIRECTORY include/antares DESTINATION "include" diff --git a/src/solver/libModelObject/include/antares/solver/libObjectModel/expression.h b/src/solver/libModelObject/include/antares/solver/libObjectModel/expression.h index 87fefbc8c5..6c505cc90c 100644 --- a/src/solver/libModelObject/include/antares/solver/libObjectModel/expression.h +++ b/src/solver/libModelObject/include/antares/solver/libObjectModel/expression.h @@ -22,6 +22,8 @@ #include +#include + namespace Antares::Solver::ObjectModel { @@ -40,8 +42,15 @@ class Expression return value_; } + const Nodes::Node* Node() const + { + return node_; + } + private: std::string value_; + + Nodes::Node* node_; }; } // namespace Antares::Solver::ObjectModel From 19f5f6be753bd762b6729f9d7b3d8dfee992c08f Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Fri, 25 Oct 2024 15:08:54 +0200 Subject: [PATCH 12/92] remove warning --- src/solver/modelConverter/modelConverter.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/solver/modelConverter/modelConverter.cpp b/src/solver/modelConverter/modelConverter.cpp index a103c8fcd2..de785f88c2 100644 --- a/src/solver/modelConverter/modelConverter.cpp +++ b/src/solver/modelConverter/modelConverter.cpp @@ -138,10 +138,10 @@ std::vector convertPorts( const Antares::Solver::ModelParser::Model& model) { std::vector ports; - for (const auto& port: model.ports) - { - // ports.emplace_back(Antares::Solver::ObjectModel::Port{port.name, port.type}); - } + /* for (const auto& port: model.ports) */ + /* { */ + /* ports.emplace_back(Antares::Solver::ObjectModel::Port{port.name, port.type}); */ + /* } */ return ports; } From 607029456d71859ba585950a18f3a4eaefcffb0a Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Sat, 26 Oct 2024 14:15:27 +0200 Subject: [PATCH 13/92] Add function and base antlr convert --- src/solver/modelConverter/convertorVisitor.cpp | 17 +++++++++++++++++ src/solver/modelConverter/modelConverter.cpp | 3 ++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index 34940116a5..e7b21f4c92 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -21,8 +21,25 @@ #include +#include "ExprLexer.h" +#include "ExprParser.h" +#include "antlr4-runtime.h" + namespace Antares::Solver::ModelConverter { + +Nodes::Node* convertExpressionToNode(const std::string& exprStr) +{ + Nodes::Node* n; + antlr4::ANTLRInputStream input(exprStr); + ExprLexer lexer(&input); + antlr4::CommonTokenStream tokens(&lexer); + ExprParser parser(&tokens); + tokens.fill(); + + return n; +} + ConvertorVisitor::ConvertorVisitor(Antares::Solver::Registry& registry, const ObjectModel::Model& model): registry_(registry), diff --git a/src/solver/modelConverter/modelConverter.cpp b/src/solver/modelConverter/modelConverter.cpp index de785f88c2..36bfce7254 100644 --- a/src/solver/modelConverter/modelConverter.cpp +++ b/src/solver/modelConverter/modelConverter.cpp @@ -151,9 +151,10 @@ std::vector convertConstraints( std::vector constraints; for (const auto& constraint: model.constraints) { + /* Node* expr = convertExpressionToNode(constraint.expression); */ constraints.emplace_back(Antares::Solver::ObjectModel::Constraint{ constraint.id, - Antares::Solver::ObjectModel::Expression{constraint.expression}}); + Antares::Solver::ObjectModel::Expression{constraint.expression /*, expr */}}); } return constraints; } From 030b34e4e3866d0789ad4673ec86e7091d47e8c2 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Sat, 26 Oct 2024 14:25:55 +0200 Subject: [PATCH 14/92] More c --- src/solver/modelConverter/convertorVisitor.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index e7b21f4c92..56b440b338 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -35,8 +35,11 @@ Nodes::Node* convertExpressionToNode(const std::string& exprStr) ExprLexer lexer(&input); antlr4::CommonTokenStream tokens(&lexer); ExprParser parser(&tokens); - tokens.fill(); + ExprParser::ExprContext* tree = parser.expr(); + + /* ConvertorVisitor visitor; */ + /* n = std::any_cast(visitor.visitChildren(tree)); */ return n; } From 53751482332833051f97d1a34b7ef4f85ee28886 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Sat, 26 Oct 2024 14:33:54 +0200 Subject: [PATCH 15/92] Try to convert, virtual class --- src/solver/modelConverter/convertorVisitor.cpp | 8 +++++--- .../antares/solver/modelConverter/convertorVisitor.h | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index 56b440b338..70c08c697f 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -28,7 +28,9 @@ namespace Antares::Solver::ModelConverter { -Nodes::Node* convertExpressionToNode(const std::string& exprStr) +Nodes::Node* convertExpressionToNode(const std::string& exprStr, + Antares::Solver::Registry& registry, + const ObjectModel::Model& model) { Nodes::Node* n; antlr4::ANTLRInputStream input(exprStr); @@ -38,8 +40,8 @@ Nodes::Node* convertExpressionToNode(const std::string& exprStr) ExprParser::ExprContext* tree = parser.expr(); - /* ConvertorVisitor visitor; */ - /* n = std::any_cast(visitor.visitChildren(tree)); */ + ConvertorVisitor visitor(registry, model); + n = std::any_cast(visitor.visitChildren(tree)); return n; } diff --git a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h index b81460a4a6..b641561293 100644 --- a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h +++ b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h @@ -37,7 +37,7 @@ class ConvertorVisitor: public ExprVisitor ConvertorVisitor(Antares::Solver::Registry& registry, const ObjectModel::Model& model); - virtual antlrcpp::Any visitChildren(antlr4::tree::ParseTree* node) override; + antlrcpp::Any visitChildren(antlr4::tree::ParseTree* node) override; std::any visit(antlr4::tree::ParseTree* tree) override; std::any visitTerminal(antlr4::tree::TerminalNode* node) override; From 7e0cbdfede2199b68e5d346a3431ce588f216899 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Mon, 28 Oct 2024 10:14:59 +0100 Subject: [PATCH 16/92] format --- src/solver/modelConverter/convertorVisitor.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index 70c08c697f..180e3757f3 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -28,9 +28,10 @@ namespace Antares::Solver::ModelConverter { -Nodes::Node* convertExpressionToNode(const std::string& exprStr, - Antares::Solver::Registry& registry, - const ObjectModel::Model& model) +Nodes::Node* convertExpressionToNode( + const std::string& exprStr, + Antares::Solver::Registry& registry, + const ObjectModel::Model& model) { Nodes::Node* n; antlr4::ANTLRInputStream input(exprStr); @@ -45,8 +46,9 @@ Nodes::Node* convertExpressionToNode(const std::string& exprStr, return n; } -ConvertorVisitor::ConvertorVisitor(Antares::Solver::Registry& registry, - const ObjectModel::Model& model): +ConvertorVisitor::ConvertorVisitor( + Antares::Solver::Registry& registry, + const ObjectModel::Model& model): registry_(registry), model_(model) { @@ -105,8 +107,7 @@ std::any ConvertorVisitor::visitMuldiv(ExprParser::MuldivContext* context) // Having to know the underlying type of the node is not great. We can eitgher return // expression node containing the concrete node to be able to always anycast Or // we can return a pair Node/type (difficult to return a type in c++) - auto toNodePtr = [](const auto& x) - { return std::any_cast(x); }; + auto toNodePtr = [](const auto& x) { return std::any_cast(x); }; auto* left = toNodePtr(visit(context->expr(0))); auto* right = toNodePtr(visit(context->expr(1))); auto mult_node = registry_.create(left, right); From e52b8b8a0bb85475555116957c55bbd7f5deb7a7 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Mon, 28 Oct 2024 10:17:13 +0100 Subject: [PATCH 17/92] remove unused function --- src/solver/modelConverter/convertorVisitor.cpp | 10 ---------- .../antares/solver/modelConverter/convertorVisitor.h | 5 +++-- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index 180e3757f3..948b6ea22e 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -169,14 +169,4 @@ std::any ConvertorVisitor::visitFunction(ExprParser::FunctionContext* context) return std::any(); } -/* std::any ConvertorVisitor::visitTimeShiftRange(ExprParser::TimeShiftRangeContext* context) */ -/* { */ -/* return std::any(); */ -/* } */ - -/* std::any ConvertorVisitor::visitTimeRange(ExprParser::TimeRangeContext* context) */ -/* { */ -/* return std::any(); */ -/* } */ - } // namespace Antares::Solver::ModelConverter diff --git a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h index b641561293..d0e6211e8d 100644 --- a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h +++ b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h @@ -42,6 +42,7 @@ class ConvertorVisitor: public ExprVisitor std::any visit(antlr4::tree::ParseTree* tree) override; std::any visitTerminal(antlr4::tree::TerminalNode* node) override; std::any visitErrorNode(antlr4::tree::ErrorNode* node) override; + std::any visitIdentifier(ExprParser::IdentifierContext* context) override; std::any visitMuldiv(ExprParser::MuldivContext* context) override; std::any visitFullexpr(ExprParser::FullexprContext* context) override; @@ -55,8 +56,8 @@ class ConvertorVisitor: public ExprVisitor std::any visitTimeIndex(ExprParser::TimeIndexContext* context) override; std::any visitTimeShift(ExprParser::TimeShiftContext* context) override; std::any visitFunction(ExprParser::FunctionContext* context) override; - /* std::any visitTimeShiftRange(ExprParser::TimeShiftRangeContext* context) override; */ - /* std::any visitTimeRange(ExprParser::TimeRangeContext* context) override; */ + + std::any visitTimeSum(ExprParser::TimeSumContext *context) override; Antares::Solver::Registry& registry_; const ObjectModel::Model& model_; From 33b88f8014efe6ee039436ad7ac899a5691e7ad4 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Mon, 28 Oct 2024 10:37:11 +0100 Subject: [PATCH 18/92] override all functions of ExprVisitor --- src/solver/modelConverter/convertorVisitor.cpp | 2 +- .../antares/solver/modelConverter/convertorVisitor.h | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index 948b6ea22e..9008c39804 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -42,7 +42,7 @@ Nodes::Node* convertExpressionToNode( ExprParser::ExprContext* tree = parser.expr(); ConvertorVisitor visitor(registry, model); - n = std::any_cast(visitor.visitChildren(tree)); + n = std::any_cast(visitor.visitChildren(tree)); return n; } diff --git a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h index d0e6211e8d..0913649631 100644 --- a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h +++ b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h @@ -58,6 +58,15 @@ class ConvertorVisitor: public ExprVisitor std::any visitFunction(ExprParser::FunctionContext* context) override; std::any visitTimeSum(ExprParser::TimeSumContext *context) override; + std::any visitAllTimeSum(ExprParser::AllTimeSumContext *context) override; + std::any visitSignedAtom(ExprParser::SignedAtomContext *context) override; + std::any visitUnsignedAtom(ExprParser::UnsignedAtomContext *context) override; + std::any visitRightAtom(ExprParser::RightAtomContext *context) override; + std::any visitSignedExpression(ExprParser::SignedExpressionContext *context) override; + std::any visitShiftAddsub(ExprParser::ShiftAddsubContext *context) override; + std::any visitShiftMuldiv(ExprParser::ShiftMuldivContext *context) override; + std::any visitRightMuldiv(ExprParser::RightMuldivContext *context) override; + std::any visitRightExpression(ExprParser::RightExpressionContext *context) override; Antares::Solver::Registry& registry_; const ObjectModel::Model& model_; From dd1989b442a9d981e08834d151b13cd3010d31b9 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Mon, 28 Oct 2024 10:41:52 +0100 Subject: [PATCH 19/92] functions body --- .../modelConverter/convertorVisitor.cpp | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index 9008c39804..aac063fc55 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -169,4 +169,54 @@ std::any ConvertorVisitor::visitFunction(ExprParser::FunctionContext* context) return std::any(); } +std::any ConvertorVisitor::visitTimeSum(ExprParser::TimeSumContext* context) +{ + return std::any(); +} + +std::any ConvertorVisitor::visitAllTimeSum(ExprParser::AllTimeSumContext* context) +{ + return std::any(); +} + +std::any ConvertorVisitor::visitSignedAtom(ExprParser::SignedAtomContext* context) +{ + return std::any(); +} + +std::any ConvertorVisitor::visitUnsignedAtom(ExprParser::UnsignedAtomContext* context) +{ + return std::any(); +} + +std::any ConvertorVisitor::visitRightAtom(ExprParser::RightAtomContext* context) +{ + return std::any(); +} + +std::any ConvertorVisitor::visitSignedExpression(ExprParser::SignedExpressionContext* context) +{ + return std::any(); +} + +std::any ConvertorVisitor::visitShiftAddsub(ExprParser::ShiftAddsubContext* context) +{ + return std::any(); +} + +std::any ConvertorVisitor::visitShiftMuldiv(ExprParser::ShiftMuldivContext* context) +{ + return std::any(); +} + +std::any ConvertorVisitor::visitRightMuldiv(ExprParser::RightMuldivContext* context) +{ + return std::any(); +} + +std::any ConvertorVisitor::visitRightExpression(ExprParser::RightExpressionContext* context) +{ + return std::any(); +} + } // namespace Antares::Solver::ModelConverter From 2fb284648c348e9ff08f7e7c0e91d5961a7f37f5 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Mon, 28 Oct 2024 11:02:09 +0100 Subject: [PATCH 20/92] compile ok for tests --- .../solver/modelConverter/convertorVisitor.h | 20 +++++++++---------- .../src/solver/modelParser/CMakeLists.txt | 1 + .../modelParser/testConvertorVisitor.cpp | 7 ++++++- .../src/solver/modelParser/test_full.cpp | 1 - 4 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h index 0913649631..44ef19668f 100644 --- a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h +++ b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h @@ -57,16 +57,16 @@ class ConvertorVisitor: public ExprVisitor std::any visitTimeShift(ExprParser::TimeShiftContext* context) override; std::any visitFunction(ExprParser::FunctionContext* context) override; - std::any visitTimeSum(ExprParser::TimeSumContext *context) override; - std::any visitAllTimeSum(ExprParser::AllTimeSumContext *context) override; - std::any visitSignedAtom(ExprParser::SignedAtomContext *context) override; - std::any visitUnsignedAtom(ExprParser::UnsignedAtomContext *context) override; - std::any visitRightAtom(ExprParser::RightAtomContext *context) override; - std::any visitSignedExpression(ExprParser::SignedExpressionContext *context) override; - std::any visitShiftAddsub(ExprParser::ShiftAddsubContext *context) override; - std::any visitShiftMuldiv(ExprParser::ShiftMuldivContext *context) override; - std::any visitRightMuldiv(ExprParser::RightMuldivContext *context) override; - std::any visitRightExpression(ExprParser::RightExpressionContext *context) override; + std::any visitTimeSum(ExprParser::TimeSumContext* context) override; + std::any visitAllTimeSum(ExprParser::AllTimeSumContext* context) override; + std::any visitSignedAtom(ExprParser::SignedAtomContext* context) override; + std::any visitUnsignedAtom(ExprParser::UnsignedAtomContext* context) override; + std::any visitRightAtom(ExprParser::RightAtomContext* context) override; + std::any visitSignedExpression(ExprParser::SignedExpressionContext* context) override; + std::any visitShiftAddsub(ExprParser::ShiftAddsubContext* context) override; + std::any visitShiftMuldiv(ExprParser::ShiftMuldivContext* context) override; + std::any visitRightMuldiv(ExprParser::RightMuldivContext* context) override; + std::any visitRightExpression(ExprParser::RightExpressionContext* context) override; Antares::Solver::Registry& registry_; const ObjectModel::Model& model_; diff --git a/src/tests/src/solver/modelParser/CMakeLists.txt b/src/tests/src/solver/modelParser/CMakeLists.txt index b3eb1c170e..4f8bc3819d 100644 --- a/src/tests/src/solver/modelParser/CMakeLists.txt +++ b/src/tests/src/solver/modelParser/CMakeLists.txt @@ -17,6 +17,7 @@ target_link_libraries(TestModelParser Antares::modelConverter Antares::modelParser Antares::antares-solver-libObjectModel + Antares::antlr-interface ) # Storing test-toybox under the folder Unit-tests in the IDE diff --git a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp index b719f65a8b..7801d8f609 100644 --- a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp +++ b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp @@ -22,4 +22,9 @@ #include -/* #include "antares/solver/modelConverter/convertorVisitor.h" */ +#include "antares/solver/modelConverter/convertorVisitor.h" + +BOOST_AUTO_TEST_CASE(empty_expression) +{ + std::string expression = ""; +} diff --git a/src/tests/src/solver/modelParser/test_full.cpp b/src/tests/src/solver/modelParser/test_full.cpp index a2a7316192..5cd00d8947 100644 --- a/src/tests/src/solver/modelParser/test_full.cpp +++ b/src/tests/src/solver/modelParser/test_full.cpp @@ -1,4 +1,3 @@ - /* * Copyright 2007-2024, RTE (https://www.rte-france.com) * See AUTHORS.txt From 35aaaad0e6754865f6acadf3bb199817f6b1c366 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Mon, 28 Oct 2024 11:15:18 +0100 Subject: [PATCH 21/92] function in header --- .../antares/solver/modelConverter/convertorVisitor.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h index 44ef19668f..7a57cb7b33 100644 --- a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h +++ b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h @@ -29,6 +29,12 @@ namespace Antares::Solver::ModelConverter { + +Nodes::Node* convertExpressionToNode( + const std::string& exprStr, + Antares::Solver::Registry& registry, + const ObjectModel::Model& model); + // Visitor to convert nodes to Antares::Solver::Nodes // TODO add reference to model to be able to resolve names as either parameters or variables class ConvertorVisitor: public ExprVisitor From a4236e4ce1ae39e8bc5fbf0cd811a312f46665c0 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Mon, 28 Oct 2024 11:52:01 +0100 Subject: [PATCH 22/92] use std::any instead of antlr::any --- src/solver/modelConverter/convertorVisitor.cpp | 5 ++--- .../antares/solver/modelConverter/convertorVisitor.h | 3 ++- .../src/solver/modelParser/testConvertorVisitor.cpp | 10 ++++++++++ 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index aac063fc55..73f8909a24 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -33,7 +33,6 @@ Nodes::Node* convertExpressionToNode( Antares::Solver::Registry& registry, const ObjectModel::Model& model) { - Nodes::Node* n; antlr4::ANTLRInputStream input(exprStr); ExprLexer lexer(&input); antlr4::CommonTokenStream tokens(&lexer); @@ -42,7 +41,7 @@ Nodes::Node* convertExpressionToNode( ExprParser::ExprContext* tree = parser.expr(); ConvertorVisitor visitor(registry, model); - n = std::any_cast(visitor.visitChildren(tree)); + Nodes::Node* n = std::any_cast(visitor.visitChildren(tree)); return n; } @@ -54,7 +53,7 @@ ConvertorVisitor::ConvertorVisitor( { } -antlrcpp::Any ConvertorVisitor::visitChildren(antlr4::tree::ParseTree* node) +std::any ConvertorVisitor::visitChildren(antlr4::tree::ParseTree* node) { for (auto child: node->children) { diff --git a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h index 7a57cb7b33..75875acf8d 100644 --- a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h +++ b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h @@ -43,7 +43,8 @@ class ConvertorVisitor: public ExprVisitor ConvertorVisitor(Antares::Solver::Registry& registry, const ObjectModel::Model& model); - antlrcpp::Any visitChildren(antlr4::tree::ParseTree* node) override; + + std::any visitChildren(antlr4::tree::ParseTree* node) override; std::any visit(antlr4::tree::ParseTree* tree) override; std::any visitTerminal(antlr4::tree::TerminalNode* node) override; diff --git a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp index 7801d8f609..098bacc0e6 100644 --- a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp +++ b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp @@ -24,7 +24,17 @@ #include "antares/solver/modelConverter/convertorVisitor.h" +#include "antares/solver/expressions/Registry.hxx" +#include "antares/solver/libObjectModel/model.h" + +using namespace Antares::Solver; + BOOST_AUTO_TEST_CASE(empty_expression) { + ObjectModel::Model model; + Antares::Solver::Registry registry; + std::string expression = ""; + + auto* node = ModelConverter::convertExpressionToNode(expression, registry, model); } From 96e35ad49bb882337d0bd12aaef28b2b4bcb5895 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Mon, 28 Oct 2024 15:31:33 +0100 Subject: [PATCH 23/92] c --- src/solver/modelConverter/CMakeLists.txt | 1 + src/solver/modelConverter/convertorVisitor.cpp | 6 ++++-- .../src/solver/modelParser/testConvertorVisitor.cpp | 10 ++++++++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/solver/modelConverter/CMakeLists.txt b/src/solver/modelConverter/CMakeLists.txt index a6128d7070..4bbc23cc4b 100644 --- a/src/solver/modelConverter/CMakeLists.txt +++ b/src/solver/modelConverter/CMakeLists.txt @@ -22,6 +22,7 @@ target_link_libraries(modelConverter Antares::modelParser Antares::antlr-interface Antares::solver-expressions + Antares::logs ) install(DIRECTORY include/antares diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index 73f8909a24..1185d61489 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -21,6 +21,8 @@ #include +#include + #include "ExprLexer.h" #include "ExprParser.h" #include "antlr4-runtime.h" @@ -59,7 +61,7 @@ std::any ConvertorVisitor::visitChildren(antlr4::tree::ParseTree* node) { child->accept(this); } - return antlrcpp::Any(); + return this; } std::any ConvertorVisitor::visit(antlr4::tree::ParseTree* tree) @@ -115,7 +117,7 @@ std::any ConvertorVisitor::visitMuldiv(ExprParser::MuldivContext* context) std::any ConvertorVisitor::visitFullexpr(ExprParser::FullexprContext* context) { - return std::any(); + return visitChildren(context); } std::any ConvertorVisitor::visitShift(ExprParser::ShiftContext* context) diff --git a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp index 098bacc0e6..7dfda6c539 100644 --- a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp +++ b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp @@ -29,6 +29,16 @@ using namespace Antares::Solver; +BOOST_AUTO_TEST_CASE(simple_expression) +{ + ObjectModel::Model model; + Antares::Solver::Registry registry; + + std::string expression = "a * b"; + + auto* node = ModelConverter::convertExpressionToNode(expression, registry, model); +} + BOOST_AUTO_TEST_CASE(empty_expression) { ObjectModel::Model model; From 47b29326c7ed657b8a84f9441edf046b8e11e8e7 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Mon, 28 Oct 2024 15:38:05 +0100 Subject: [PATCH 24/92] Try parsing a mult --- src/solver/modelConverter/convertorVisitor.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index 1185d61489..317a426ea5 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -43,7 +43,8 @@ Nodes::Node* convertExpressionToNode( ExprParser::ExprContext* tree = parser.expr(); ConvertorVisitor visitor(registry, model); - Nodes::Node* n = std::any_cast(visitor.visitChildren(tree)); + auto a = visitor.visitChildren(tree); + Nodes::Node* n; return n; } @@ -57,11 +58,11 @@ ConvertorVisitor::ConvertorVisitor( std::any ConvertorVisitor::visitChildren(antlr4::tree::ParseTree* node) { - for (auto child: node->children) - { - child->accept(this); - } - return this; + /* for (auto child: node->children) */ + /* { */ + /* child->accept(this); */ + /* } */ + return node->accept(this); } std::any ConvertorVisitor::visit(antlr4::tree::ParseTree* tree) From 1ef4f27b8bf598a611609b248814797edeee33a3 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Mon, 28 Oct 2024 15:56:02 +0100 Subject: [PATCH 25/92] visitchildren --- src/solver/modelConverter/convertorVisitor.cpp | 12 ++++++------ .../src/solver/modelParser/testConvertorVisitor.cpp | 9 +++++---- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index 317a426ea5..41e493b8c6 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -43,7 +43,7 @@ Nodes::Node* convertExpressionToNode( ExprParser::ExprContext* tree = parser.expr(); ConvertorVisitor visitor(registry, model); - auto a = visitor.visitChildren(tree); + auto a = visitor.visit(tree); Nodes::Node* n; return n; } @@ -58,11 +58,11 @@ ConvertorVisitor::ConvertorVisitor( std::any ConvertorVisitor::visitChildren(antlr4::tree::ParseTree* node) { - /* for (auto child: node->children) */ - /* { */ - /* child->accept(this); */ - /* } */ - return node->accept(this); + for (auto child: node->children) + { + child->accept(this); + } + return std::any(); } std::any ConvertorVisitor::visit(antlr4::tree::ParseTree* tree) diff --git a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp index 7dfda6c539..b2a90f6a8d 100644 --- a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp +++ b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp @@ -29,22 +29,23 @@ using namespace Antares::Solver; -BOOST_AUTO_TEST_CASE(simple_expression) +BOOST_AUTO_TEST_CASE(empty_expression) { ObjectModel::Model model; Antares::Solver::Registry registry; - std::string expression = "a * b"; + std::string expression = ""; auto* node = ModelConverter::convertExpressionToNode(expression, registry, model); } -BOOST_AUTO_TEST_CASE(empty_expression) +BOOST_AUTO_TEST_CASE(simple_expression) { ObjectModel::Model model; Antares::Solver::Registry registry; - std::string expression = ""; + std::string expression = "a * b"; auto* node = ModelConverter::convertExpressionToNode(expression, registry, model); } + From 79eadddb57844c76bf2a7bd3beccdb17344bec41 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Mon, 28 Oct 2024 15:56:40 +0100 Subject: [PATCH 26/92] return std any --- src/solver/modelConverter/convertorVisitor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index 41e493b8c6..4b1438ff98 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -118,7 +118,7 @@ std::any ConvertorVisitor::visitMuldiv(ExprParser::MuldivContext* context) std::any ConvertorVisitor::visitFullexpr(ExprParser::FullexprContext* context) { - return visitChildren(context); + return std::any(); } std::any ConvertorVisitor::visitShift(ExprParser::ShiftContext* context) From 72a0ff618915df19d8a4d681e2c24ecb127548b5 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Mon, 28 Oct 2024 17:07:52 +0100 Subject: [PATCH 27/92] number context, atom context --- .../modelConverter/convertorVisitor.cpp | 13 +++++--- .../modelParser/testConvertorVisitor.cpp | 31 +++++++++++++------ 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index 4b1438ff98..e9b28fa56a 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -109,11 +109,11 @@ std::any ConvertorVisitor::visitMuldiv(ExprParser::MuldivContext* context) // Having to know the underlying type of the node is not great. We can eitgher return // expression node containing the concrete node to be able to always anycast Or // we can return a pair Node/type (difficult to return a type in c++) - auto toNodePtr = [](const auto& x) { return std::any_cast(x); }; + auto toNodePtr = [](const auto& x) { return std::any_cast(x); }; auto* left = toNodePtr(visit(context->expr(0))); auto* right = toNodePtr(visit(context->expr(1))); - auto mult_node = registry_.create(left, right); - return dynamic_cast(mult_node); + auto mult_node = registry_.create(left, right); + return dynamic_cast(mult_node); } std::any ConvertorVisitor::visitFullexpr(ExprParser::FullexprContext* context) @@ -153,7 +153,10 @@ std::any ConvertorVisitor::visitPortField(ExprParser::PortFieldContext* context) std::any ConvertorVisitor::visitNumber(ExprParser::NumberContext* context) { - return std::any(); + double d = stod(context->NUMBER()->getText()); + auto n = registry_.create(d); + + return static_cast(n); } std::any ConvertorVisitor::visitTimeIndex(ExprParser::TimeIndexContext* context) @@ -188,7 +191,7 @@ std::any ConvertorVisitor::visitSignedAtom(ExprParser::SignedAtomContext* contex std::any ConvertorVisitor::visitUnsignedAtom(ExprParser::UnsignedAtomContext* context) { - return std::any(); + return visit(context->atom()); } std::any ConvertorVisitor::visitRightAtom(ExprParser::RightAtomContext* context) diff --git a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp index b2a90f6a8d..9a1d23297b 100644 --- a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp +++ b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp @@ -22,6 +22,8 @@ #include +#include "antares/solver/expressions/visitors/AstDOTStyleVisitor.h" + #include "antares/solver/modelConverter/convertorVisitor.h" #include "antares/solver/expressions/Registry.hxx" @@ -29,23 +31,32 @@ using namespace Antares::Solver; -BOOST_AUTO_TEST_CASE(empty_expression) -{ - ObjectModel::Model model; - Antares::Solver::Registry registry; +/* BOOST_AUTO_TEST_CASE(empty_expression) */ +/* { */ +/* ObjectModel::Model model; */ +/* Antares::Solver::Registry registry; */ - std::string expression = ""; +/* std::string expression = ""; */ - auto* node = ModelConverter::convertExpressionToNode(expression, registry, model); -} +/* auto* node = ModelConverter::convertExpressionToNode(expression, registry, model); */ +/* } */ BOOST_AUTO_TEST_CASE(simple_expression) { ObjectModel::Model model; - Antares::Solver::Registry registry; + Antares::Solver::Registry registry; - std::string expression = "a * b"; + auto twelve = registry.create(12); + std::cout << twelve->value() << std::endl; + + std::string expression = "1 * 2"; auto* node = ModelConverter::convertExpressionToNode(expression, registry, model); -} + auto mult = dynamic_cast(node); + + + /* std::ofstream out("/tmp/abc.dot"); */ + /* Visitors::AstDOTStyleVisitor dot; */ + /* dot(out, node); */ +} From 804725ef34b1bf6d8fc196f937dcad52f87eb7da Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Mon, 28 Oct 2024 17:30:07 +0100 Subject: [PATCH 28/92] OK --- src/solver/modelConverter/convertorVisitor.cpp | 7 +++---- .../src/solver/modelParser/testConvertorVisitor.cpp | 9 +++------ 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index e9b28fa56a..7187e4ef58 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -44,8 +44,7 @@ Nodes::Node* convertExpressionToNode( ConvertorVisitor visitor(registry, model); auto a = visitor.visit(tree); - Nodes::Node* n; - return n; + return std::any_cast(a); } ConvertorVisitor::ConvertorVisitor( @@ -153,7 +152,7 @@ std::any ConvertorVisitor::visitPortField(ExprParser::PortFieldContext* context) std::any ConvertorVisitor::visitNumber(ExprParser::NumberContext* context) { - double d = stod(context->NUMBER()->getText()); + double d = stod(context->getText()); auto n = registry_.create(d); return static_cast(n); @@ -191,7 +190,7 @@ std::any ConvertorVisitor::visitSignedAtom(ExprParser::SignedAtomContext* contex std::any ConvertorVisitor::visitUnsignedAtom(ExprParser::UnsignedAtomContext* context) { - return visit(context->atom()); + return context->atom()->accept(this); } std::any ConvertorVisitor::visitRightAtom(ExprParser::RightAtomContext* context) diff --git a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp index 9a1d23297b..c7b2623423 100644 --- a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp +++ b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp @@ -53,10 +53,7 @@ BOOST_AUTO_TEST_CASE(simple_expression) auto* node = ModelConverter::convertExpressionToNode(expression, registry, model); - auto mult = dynamic_cast(node); - - - /* std::ofstream out("/tmp/abc.dot"); */ - /* Visitors::AstDOTStyleVisitor dot; */ - /* dot(out, node); */ + std::ofstream out("/tmp/abc.dot"); + Visitors::AstDOTStyleVisitor dot; + dot(out, node); } From 00803862e345c04515124ae31c1412bfda4ad439 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Mon, 28 Oct 2024 17:32:14 +0100 Subject: [PATCH 29/92] format --- src/solver/modelConverter/convertorVisitor.cpp | 4 ++-- .../antares/solver/modelConverter/convertorVisitor.h | 1 - src/tests/src/solver/modelParser/testConvertorVisitor.cpp | 6 ++---- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index 7187e4ef58..9ef41b0498 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -19,10 +19,10 @@ * along with Antares_Simulator. If not, see . */ -#include - #include +#include + #include "ExprLexer.h" #include "ExprParser.h" #include "antlr4-runtime.h" diff --git a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h index 75875acf8d..8cb29ae7b3 100644 --- a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h +++ b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h @@ -43,7 +43,6 @@ class ConvertorVisitor: public ExprVisitor ConvertorVisitor(Antares::Solver::Registry& registry, const ObjectModel::Model& model); - std::any visitChildren(antlr4::tree::ParseTree* node) override; std::any visit(antlr4::tree::ParseTree* tree) override; diff --git a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp index c7b2623423..8429f48334 100644 --- a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp +++ b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp @@ -22,12 +22,10 @@ #include -#include "antares/solver/expressions/visitors/AstDOTStyleVisitor.h" - -#include "antares/solver/modelConverter/convertorVisitor.h" - #include "antares/solver/expressions/Registry.hxx" +#include "antares/solver/expressions/visitors/AstDOTStyleVisitor.h" #include "antares/solver/libObjectModel/model.h" +#include "antares/solver/modelConverter/convertorVisitor.h" using namespace Antares::Solver; From 349a0bb186f5fc57886f80e1705db85f27d41ddd Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Tue, 29 Oct 2024 11:08:32 +0100 Subject: [PATCH 30/92] remove functions --- .../modelConverter/convertorVisitor.cpp | 23 +------------------ .../solver/modelConverter/convertorVisitor.h | 4 ---- 2 files changed, 1 insertion(+), 26 deletions(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index 9ef41b0498..2fd79ac416 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -55,30 +55,11 @@ ConvertorVisitor::ConvertorVisitor( { } -std::any ConvertorVisitor::visitChildren(antlr4::tree::ParseTree* node) -{ - for (auto child: node->children) - { - child->accept(this); - } - return std::any(); -} - std::any ConvertorVisitor::visit(antlr4::tree::ParseTree* tree) { return tree->accept(this); } -std::any ConvertorVisitor::visitTerminal(antlr4::tree::TerminalNode* node) -{ - return std::any(); -} - -std::any ConvertorVisitor::visitErrorNode(antlr4::tree::ErrorNode* node) -{ - return std::any(); -} - std::any ConvertorVisitor::visitIdentifier(ExprParser::IdentifierContext* context) { bool is_parameter = false; @@ -153,9 +134,7 @@ std::any ConvertorVisitor::visitPortField(ExprParser::PortFieldContext* context) std::any ConvertorVisitor::visitNumber(ExprParser::NumberContext* context) { double d = stod(context->getText()); - auto n = registry_.create(d); - - return static_cast(n); + return registry_.create(d); } std::any ConvertorVisitor::visitTimeIndex(ExprParser::TimeIndexContext* context) diff --git a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h index 8cb29ae7b3..edf2ce76b6 100644 --- a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h +++ b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h @@ -43,11 +43,7 @@ class ConvertorVisitor: public ExprVisitor ConvertorVisitor(Antares::Solver::Registry& registry, const ObjectModel::Model& model); - std::any visitChildren(antlr4::tree::ParseTree* node) override; - std::any visit(antlr4::tree::ParseTree* tree) override; - std::any visitTerminal(antlr4::tree::TerminalNode* node) override; - std::any visitErrorNode(antlr4::tree::ErrorNode* node) override; std::any visitIdentifier(ExprParser::IdentifierContext* context) override; std::any visitMuldiv(ExprParser::MuldivContext* context) override; From b2d7246f7e2de97a9a52991077a3b10593e60b13 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Tue, 29 Oct 2024 11:39:38 +0100 Subject: [PATCH 31/92] operator for muldiv --- .../modelConverter/convertorVisitor.cpp | 27 ++++++++++++------- .../modelParser/testConvertorVisitor.cpp | 9 +++---- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index 2fd79ac416..7eac0e7a67 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -43,8 +43,8 @@ Nodes::Node* convertExpressionToNode( ExprParser::ExprContext* tree = parser.expr(); ConvertorVisitor visitor(registry, model); - auto a = visitor.visit(tree); - return std::any_cast(a); + auto node = visitor.visit(tree); + return std::any_cast(node); } ConvertorVisitor::ConvertorVisitor( @@ -73,13 +73,12 @@ std::any ConvertorVisitor::visitIdentifier(ExprParser::IdentifierContext* contex } if (is_parameter) { - return static_cast( - registry_.create(context->getText())); + return static_cast( + registry_.create(context->getText())); } else { - return static_cast( - registry_.create(context->getText())); + return static_cast(registry_.create(context->getText())); } } @@ -92,8 +91,18 @@ std::any ConvertorVisitor::visitMuldiv(ExprParser::MuldivContext* context) auto toNodePtr = [](const auto& x) { return std::any_cast(x); }; auto* left = toNodePtr(visit(context->expr(0))); auto* right = toNodePtr(visit(context->expr(1))); - auto mult_node = registry_.create(left, right); - return dynamic_cast(mult_node); + + std::string op = context->op->getText(); + if (op == "*") + { + return dynamic_cast(registry_.create(left, right)); + } + else if (op == "/") + { + return static_cast(registry_.create(left, right)); + } + + return std::any(); } std::any ConvertorVisitor::visitFullexpr(ExprParser::FullexprContext* context) @@ -134,7 +143,7 @@ std::any ConvertorVisitor::visitPortField(ExprParser::PortFieldContext* context) std::any ConvertorVisitor::visitNumber(ExprParser::NumberContext* context) { double d = stod(context->getText()); - return registry_.create(d); + return static_cast(registry_.create(d)); } std::any ConvertorVisitor::visitTimeIndex(ExprParser::TimeIndexContext* context) diff --git a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp index 8429f48334..16acc5b262 100644 --- a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp +++ b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp @@ -44,14 +44,13 @@ BOOST_AUTO_TEST_CASE(simple_expression) ObjectModel::Model model; Antares::Solver::Registry registry; - auto twelve = registry.create(12); - std::cout << twelve->value() << std::endl; - std::string expression = "1 * 2"; + auto* nodeMult = ModelConverter::convertExpressionToNode(expression, registry, model); - auto* node = ModelConverter::convertExpressionToNode(expression, registry, model); + expression = "6 / 3"; + auto* nodeDiv = ModelConverter::convertExpressionToNode(expression, registry, model); std::ofstream out("/tmp/abc.dot"); Visitors::AstDOTStyleVisitor dot; - dot(out, node); + dot(out, nodeDiv); } From 950c4abe902a87e1a18a4df9a005d1ab2fab6c8b Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Tue, 29 Oct 2024 12:13:59 +0100 Subject: [PATCH 32/92] check for empty string, test value for mul and div --- .../modelParser/testConvertorVisitor.cpp | 47 ++++++++++++++----- 1 file changed, 34 insertions(+), 13 deletions(-) diff --git a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp index 16acc5b262..64fdd5dc39 100644 --- a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp +++ b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp @@ -29,28 +29,49 @@ using namespace Antares::Solver; -/* BOOST_AUTO_TEST_CASE(empty_expression) */ -/* { */ -/* ObjectModel::Model model; */ -/* Antares::Solver::Registry registry; */ +struct Fixture +{ + ObjectModel::Model model; + Antares::Solver::Registry registry; +}; + +// TODO remove, used for debug +static void printTree(Nodes::Node* n) +{ + std::ofstream out("/tmp/tree.dot"); + Visitors::AstDOTStyleVisitor dot; + dot(out, n); +} -/* std::string expression = ""; */ +static Nodes::LiteralNode* toLiteral(Nodes::Node* n) +{ + return dynamic_cast(n); +} -/* auto* node = ModelConverter::convertExpressionToNode(expression, registry, model); */ -/* } */ +BOOST_FIXTURE_TEST_CASE(empty_expression, Fixture) +{ + auto* node = ModelConverter::convertExpressionToNode("", registry, model); + BOOST_CHECK_EQUAL(node, nullptr); +} -BOOST_AUTO_TEST_CASE(simple_expression) +BOOST_FIXTURE_TEST_CASE(mulDiv, Fixture) { ObjectModel::Model model; Antares::Solver::Registry registry; std::string expression = "1 * 2"; - auto* nodeMult = ModelConverter::convertExpressionToNode(expression, registry, model); + auto* n = ModelConverter::convertExpressionToNode(expression, registry, model); + BOOST_CHECK_EQUAL(n->name(), "MultiplicationNode"); + + auto* nodeMult = dynamic_cast(n); + BOOST_CHECK_EQUAL(toLiteral(nodeMult->left())->value(), 1); + BOOST_CHECK_EQUAL(toLiteral(nodeMult->right())->value(), 2); expression = "6 / 3"; - auto* nodeDiv = ModelConverter::convertExpressionToNode(expression, registry, model); + n = ModelConverter::convertExpressionToNode(expression, registry, model); + BOOST_CHECK_EQUAL(n->name(), "DivisionNode"); - std::ofstream out("/tmp/abc.dot"); - Visitors::AstDOTStyleVisitor dot; - dot(out, nodeDiv); + auto* nodeDiv = dynamic_cast(n); + BOOST_CHECK_EQUAL(toLiteral(nodeDiv->left())->value(), 6); + BOOST_CHECK_EQUAL(toLiteral(nodeDiv->right())->value(), 3); } From 7b39d932d85b6848e52d67ba6ded1c210fd5c860 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Tue, 29 Oct 2024 12:14:16 +0100 Subject: [PATCH 33/92] check for empty string --- src/solver/modelConverter/convertorVisitor.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index 7eac0e7a67..bce009addf 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -35,6 +35,11 @@ Nodes::Node* convertExpressionToNode( Antares::Solver::Registry& registry, const ObjectModel::Model& model) { + if (exprStr.empty()) + { + return nullptr; + } + antlr4::ANTLRInputStream input(exprStr); ExprLexer lexer(&input); antlr4::CommonTokenStream tokens(&lexer); @@ -95,7 +100,7 @@ std::any ConvertorVisitor::visitMuldiv(ExprParser::MuldivContext* context) std::string op = context->op->getText(); if (op == "*") { - return dynamic_cast(registry_.create(left, right)); + return static_cast(registry_.create(left, right)); } else if (op == "/") { From 13249f34108d1cd654a2c40c2144b92cc1980f2d Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Tue, 29 Oct 2024 12:27:13 +0100 Subject: [PATCH 34/92] ternery return --- .../modelConverter/convertorVisitor.cpp | 44 +++++++------------ 1 file changed, 15 insertions(+), 29 deletions(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index bce009addf..6dfe99cfc4 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -30,10 +30,11 @@ namespace Antares::Solver::ModelConverter { -Nodes::Node* convertExpressionToNode( - const std::string& exprStr, - Antares::Solver::Registry& registry, - const ObjectModel::Model& model) +using namespace Antares::Solver::Nodes; + +Node* convertExpressionToNode(const std::string& exprStr, + Antares::Solver::Registry& registry, + const ObjectModel::Model& model) { if (exprStr.empty()) { @@ -49,12 +50,11 @@ Nodes::Node* convertExpressionToNode( ConvertorVisitor visitor(registry, model); auto node = visitor.visit(tree); - return std::any_cast(node); + return std::any_cast(node); } -ConvertorVisitor::ConvertorVisitor( - Antares::Solver::Registry& registry, - const ObjectModel::Model& model): +ConvertorVisitor::ConvertorVisitor(Antares::Solver::Registry& registry, + const ObjectModel::Model& model): registry_(registry), model_(model) { @@ -76,15 +76,9 @@ std::any ConvertorVisitor::visitIdentifier(ExprParser::IdentifierContext* contex break; } } - if (is_parameter) - { - return static_cast( - registry_.create(context->getText())); - } - else - { - return static_cast(registry_.create(context->getText())); - } + + return (is_parameter) ? static_cast(registry_.create(context->getText())) + : static_cast(registry_.create(context->getText())); } std::any ConvertorVisitor::visitMuldiv(ExprParser::MuldivContext* context) @@ -93,21 +87,13 @@ std::any ConvertorVisitor::visitMuldiv(ExprParser::MuldivContext* context) // Having to know the underlying type of the node is not great. We can eitgher return // expression node containing the concrete node to be able to always anycast Or // we can return a pair Node/type (difficult to return a type in c++) - auto toNodePtr = [](const auto& x) { return std::any_cast(x); }; + auto toNodePtr = [](const auto& x) { return std::any_cast(x); }; auto* left = toNodePtr(visit(context->expr(0))); auto* right = toNodePtr(visit(context->expr(1))); std::string op = context->op->getText(); - if (op == "*") - { - return static_cast(registry_.create(left, right)); - } - else if (op == "/") - { - return static_cast(registry_.create(left, right)); - } - - return std::any(); + return (op == "*") ? static_cast(registry_.create(left, right)) + : static_cast(registry_.create(left, right)); } std::any ConvertorVisitor::visitFullexpr(ExprParser::FullexprContext* context) @@ -148,7 +134,7 @@ std::any ConvertorVisitor::visitPortField(ExprParser::PortFieldContext* context) std::any ConvertorVisitor::visitNumber(ExprParser::NumberContext* context) { double d = stod(context->getText()); - return static_cast(registry_.create(d)); + return static_cast(registry_.create(d)); } std::any ConvertorVisitor::visitTimeIndex(ExprParser::TimeIndexContext* context) From 14f8bffe3f000fb247e4f24375d8140b46f6537e Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Tue, 29 Oct 2024 14:28:11 +0100 Subject: [PATCH 35/92] negation --- src/solver/modelConverter/convertorVisitor.cpp | 14 ++++++++------ .../solver/modelParser/testConvertorVisitor.cpp | 9 +++++++++ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index 6dfe99cfc4..9e5c7480bf 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -60,6 +60,11 @@ ConvertorVisitor::ConvertorVisitor(Antares::Solver::Registry& registry, { } +static Node* toNodePtr(const std::any& a) +{ + return std::any_cast(a); +} + std::any ConvertorVisitor::visit(antlr4::tree::ParseTree* tree) { return tree->accept(this); @@ -83,11 +88,7 @@ std::any ConvertorVisitor::visitIdentifier(ExprParser::IdentifierContext* contex std::any ConvertorVisitor::visitMuldiv(ExprParser::MuldivContext* context) { - // Meh - // Having to know the underlying type of the node is not great. We can eitgher return - // expression node containing the concrete node to be able to always anycast Or - // we can return a pair Node/type (difficult to return a type in c++) - auto toNodePtr = [](const auto& x) { return std::any_cast(x); }; + /* auto toNodePtr = [](const auto& x) { }; */ auto* left = toNodePtr(visit(context->expr(0))); auto* right = toNodePtr(visit(context->expr(1))); @@ -108,7 +109,8 @@ std::any ConvertorVisitor::visitShift(ExprParser::ShiftContext* context) std::any ConvertorVisitor::visitNegation(ExprParser::NegationContext* context) { - return std::any(); + auto n = toNodePtr(context->expr()->accept(this)); + return static_cast(registry_.create(n)); } std::any ConvertorVisitor::visitExpression(ExprParser::ExpressionContext* context) diff --git a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp index 64fdd5dc39..da12aff0f4 100644 --- a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp +++ b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp @@ -75,3 +75,12 @@ BOOST_FIXTURE_TEST_CASE(mulDiv, Fixture) BOOST_CHECK_EQUAL(toLiteral(nodeDiv->left())->value(), 6); BOOST_CHECK_EQUAL(toLiteral(nodeDiv->right())->value(), 3); } + +BOOST_FIXTURE_TEST_CASE(negation, Fixture) +{ + std::string expression = "-7"; + auto* n = ModelConverter::convertExpressionToNode(expression, registry, model); + BOOST_CHECK_EQUAL(n->name(), "NegationNode"); + auto* nodeNeg = dynamic_cast(n); + BOOST_CHECK_EQUAL(toLiteral(nodeNeg->child())->value(), 7); +} From 06ce508b60de7e495ddd11c2d0df10457998cefe Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Tue, 29 Oct 2024 15:04:02 +0100 Subject: [PATCH 36/92] add sub --- .../modelConverter/convertorVisitor.cpp | 8 +++- .../modelParser/testConvertorVisitor.cpp | 41 +++++++++++++++---- 2 files changed, 38 insertions(+), 11 deletions(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index 9e5c7480bf..bcee9843a2 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -88,7 +88,6 @@ std::any ConvertorVisitor::visitIdentifier(ExprParser::IdentifierContext* contex std::any ConvertorVisitor::visitMuldiv(ExprParser::MuldivContext* context) { - /* auto toNodePtr = [](const auto& x) { }; */ auto* left = toNodePtr(visit(context->expr(0))); auto* right = toNodePtr(visit(context->expr(1))); @@ -125,7 +124,12 @@ std::any ConvertorVisitor::visitComparison(ExprParser::ComparisonContext* contex std::any ConvertorVisitor::visitAddsub(ExprParser::AddsubContext* context) { - return std::any(); + auto* left = toNodePtr(visit(context->expr(0))); + auto* right = toNodePtr(visit(context->expr(1))); + + std::string op = context->op->getText(); + return (op == "+") ? static_cast(registry_.create(left, right)) + : static_cast(registry_.create(left, right)); } std::any ConvertorVisitor::visitPortField(ExprParser::PortFieldContext* context) diff --git a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp index da12aff0f4..e652d81846 100644 --- a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp +++ b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp @@ -54,6 +54,38 @@ BOOST_FIXTURE_TEST_CASE(empty_expression, Fixture) BOOST_CHECK_EQUAL(node, nullptr); } +BOOST_FIXTURE_TEST_CASE(negation, Fixture) +{ + std::string expression = "-7"; + auto* n = ModelConverter::convertExpressionToNode(expression, registry, model); + BOOST_CHECK_EQUAL(n->name(), "NegationNode"); + auto* nodeNeg = dynamic_cast(n); + BOOST_CHECK_EQUAL(toLiteral(nodeNeg->child())->value(), 7); +} + +BOOST_FIXTURE_TEST_CASE(AddSub, Fixture) +{ + ObjectModel::Model model; + Antares::Solver::Registry registry; + + std::string expression = "1 + 2"; + auto* n = ModelConverter::convertExpressionToNode(expression, registry, model); + BOOST_CHECK_EQUAL(n->name(), "SumNode"); + + auto* nodeSum = dynamic_cast(n); + auto operands = nodeSum->getOperands(); + BOOST_CHECK_EQUAL(toLiteral(operands[0])->value(), 1); + BOOST_CHECK_EQUAL(toLiteral(operands[1])->value(), 2); + + expression = "6 - 3"; + n = ModelConverter::convertExpressionToNode(expression, registry, model); + BOOST_CHECK_EQUAL(n->name(), "SubtractionNode"); + + auto* nodeSub = dynamic_cast(n); + BOOST_CHECK_EQUAL(toLiteral(nodeSub->left())->value(), 6); + BOOST_CHECK_EQUAL(toLiteral(nodeSub->right())->value(), 3); +} + BOOST_FIXTURE_TEST_CASE(mulDiv, Fixture) { ObjectModel::Model model; @@ -75,12 +107,3 @@ BOOST_FIXTURE_TEST_CASE(mulDiv, Fixture) BOOST_CHECK_EQUAL(toLiteral(nodeDiv->left())->value(), 6); BOOST_CHECK_EQUAL(toLiteral(nodeDiv->right())->value(), 3); } - -BOOST_FIXTURE_TEST_CASE(negation, Fixture) -{ - std::string expression = "-7"; - auto* n = ModelConverter::convertExpressionToNode(expression, registry, model); - BOOST_CHECK_EQUAL(n->name(), "NegationNode"); - auto* nodeNeg = dynamic_cast(n); - BOOST_CHECK_EQUAL(toLiteral(nodeNeg->child())->value(), 7); -} From a8b4ca6c92c745f0d9b484c90cbc3f20ed5e9d62 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Tue, 29 Oct 2024 15:35:21 +0100 Subject: [PATCH 37/92] expression, right expr --- src/solver/modelConverter/convertorVisitor.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index bcee9843a2..f0c980ba2c 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -114,7 +114,7 @@ std::any ConvertorVisitor::visitNegation(ExprParser::NegationContext* context) std::any ConvertorVisitor::visitExpression(ExprParser::ExpressionContext* context) { - return std::any(); + return context->expr()->accept(this); } std::any ConvertorVisitor::visitComparison(ExprParser::ComparisonContext* context) @@ -205,7 +205,7 @@ std::any ConvertorVisitor::visitRightMuldiv(ExprParser::RightMuldivContext* cont std::any ConvertorVisitor::visitRightExpression(ExprParser::RightExpressionContext* context) { - return std::any(); + return context->expr()->accept(this); } } // namespace Antares::Solver::ModelConverter From 689a16bf57275eadeefefd8590a5a195c9a85833 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Wed, 30 Oct 2024 10:30:54 +0100 Subject: [PATCH 38/92] expression, right exprc --- src/solver/modelConverter/convertorVisitor.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index f0c980ba2c..a425ed1c1e 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -170,7 +170,12 @@ std::any ConvertorVisitor::visitAllTimeSum(ExprParser::AllTimeSumContext* contex std::any ConvertorVisitor::visitSignedAtom(ExprParser::SignedAtomContext* context) { - return std::any(); + auto a = context->atom()->accept(this); + if (context->op->getText() == "-") + { + return static_cast(registry_.create(toNodePtr(a))); + } + return a; } std::any ConvertorVisitor::visitUnsignedAtom(ExprParser::UnsignedAtomContext* context) From 8fbe1a862a17c36001fa85314c3185e16dd176ce Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Wed, 30 Oct 2024 10:31:05 +0100 Subject: [PATCH 39/92] signed atom --- src/solver/modelConverter/convertorVisitor.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index a425ed1c1e..f64ea58942 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -168,6 +168,7 @@ std::any ConvertorVisitor::visitAllTimeSum(ExprParser::AllTimeSumContext* contex return std::any(); } +// shift related, not tested std::any ConvertorVisitor::visitSignedAtom(ExprParser::SignedAtomContext* context) { auto a = context->atom()->accept(this); From a6d74c209df96d586bef66f312e4601cac3dbba2 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Wed, 30 Oct 2024 10:51:38 +0100 Subject: [PATCH 40/92] use tonodeptr --- src/solver/modelConverter/convertorVisitor.cpp | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index f64ea58942..7712ea1e20 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -32,6 +32,11 @@ namespace Antares::Solver::ModelConverter using namespace Antares::Solver::Nodes; +static Node* toNodePtr(const std::any& a) +{ + return std::any_cast(a); +} + Node* convertExpressionToNode(const std::string& exprStr, Antares::Solver::Registry& registry, const ObjectModel::Model& model) @@ -49,8 +54,7 @@ Node* convertExpressionToNode(const std::string& exprStr, ExprParser::ExprContext* tree = parser.expr(); ConvertorVisitor visitor(registry, model); - auto node = visitor.visit(tree); - return std::any_cast(node); + return toNodePtr(visitor.visit(tree)); } ConvertorVisitor::ConvertorVisitor(Antares::Solver::Registry& registry, @@ -59,12 +63,6 @@ ConvertorVisitor::ConvertorVisitor(Antares::Solver::Registry& registry, model_(model) { } - -static Node* toNodePtr(const std::any& a) -{ - return std::any_cast(a); -} - std::any ConvertorVisitor::visit(antlr4::tree::ParseTree* tree) { return tree->accept(this); From 9138c21f954b60136074d9b1d666100937754a91 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Wed, 30 Oct 2024 10:53:20 +0100 Subject: [PATCH 41/92] remove warnings --- .../modelConverter/convertorVisitor.cpp | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index 7712ea1e20..b57da9685d 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -94,12 +94,12 @@ std::any ConvertorVisitor::visitMuldiv(ExprParser::MuldivContext* context) : static_cast(registry_.create(left, right)); } -std::any ConvertorVisitor::visitFullexpr(ExprParser::FullexprContext* context) +std::any ConvertorVisitor::visitFullexpr([[maybe_unused]] ExprParser::FullexprContext* context) { return std::any(); } -std::any ConvertorVisitor::visitShift(ExprParser::ShiftContext* context) +std::any ConvertorVisitor::visitShift([[maybe_unused]] ExprParser::ShiftContext* context) { return std::any(); } @@ -115,7 +115,7 @@ std::any ConvertorVisitor::visitExpression(ExprParser::ExpressionContext* contex return context->expr()->accept(this); } -std::any ConvertorVisitor::visitComparison(ExprParser::ComparisonContext* context) +std::any ConvertorVisitor::visitComparison([[maybe_unused]] ExprParser::ComparisonContext* context) { return std::any(); } @@ -130,7 +130,7 @@ std::any ConvertorVisitor::visitAddsub(ExprParser::AddsubContext* context) : static_cast(registry_.create(left, right)); } -std::any ConvertorVisitor::visitPortField(ExprParser::PortFieldContext* context) +std::any ConvertorVisitor::visitPortField([[maybe_unused]] ExprParser::PortFieldContext* context) { return std::any(); } @@ -141,27 +141,27 @@ std::any ConvertorVisitor::visitNumber(ExprParser::NumberContext* context) return static_cast(registry_.create(d)); } -std::any ConvertorVisitor::visitTimeIndex(ExprParser::TimeIndexContext* context) +std::any ConvertorVisitor::visitTimeIndex([[maybe_unused]] ExprParser::TimeIndexContext* context) { return std::any(); } -std::any ConvertorVisitor::visitTimeShift(ExprParser::TimeShiftContext* context) +std::any ConvertorVisitor::visitTimeShift([[maybe_unused]] ExprParser::TimeShiftContext* context) { return std::any(); } -std::any ConvertorVisitor::visitFunction(ExprParser::FunctionContext* context) +std::any ConvertorVisitor::visitFunction([[maybe_unused]] ExprParser::FunctionContext* context) { return std::any(); } -std::any ConvertorVisitor::visitTimeSum(ExprParser::TimeSumContext* context) +std::any ConvertorVisitor::visitTimeSum([[maybe_unused]] ExprParser::TimeSumContext* context) { return std::any(); } -std::any ConvertorVisitor::visitAllTimeSum(ExprParser::AllTimeSumContext* context) +std::any ConvertorVisitor::visitAllTimeSum([[maybe_unused]] ExprParser::AllTimeSumContext* context) { return std::any(); } @@ -182,27 +182,27 @@ std::any ConvertorVisitor::visitUnsignedAtom(ExprParser::UnsignedAtomContext* co return context->atom()->accept(this); } -std::any ConvertorVisitor::visitRightAtom(ExprParser::RightAtomContext* context) +std::any ConvertorVisitor::visitRightAtom([[maybe_unused]] ExprParser::RightAtomContext* context) { return std::any(); } -std::any ConvertorVisitor::visitSignedExpression(ExprParser::SignedExpressionContext* context) +std::any ConvertorVisitor::visitSignedExpression([[maybe_unused]] ExprParser::SignedExpressionContext* context) { return std::any(); } -std::any ConvertorVisitor::visitShiftAddsub(ExprParser::ShiftAddsubContext* context) +std::any ConvertorVisitor::visitShiftAddsub([[maybe_unused]] ExprParser::ShiftAddsubContext* context) { return std::any(); } -std::any ConvertorVisitor::visitShiftMuldiv(ExprParser::ShiftMuldivContext* context) +std::any ConvertorVisitor::visitShiftMuldiv([[maybe_unused]] ExprParser::ShiftMuldivContext* context) { return std::any(); } -std::any ConvertorVisitor::visitRightMuldiv(ExprParser::RightMuldivContext* context) +std::any ConvertorVisitor::visitRightMuldiv([[maybe_unused]] ExprParser::RightMuldivContext* context) { return std::any(); } From d0729a8b390fb58fcfea2ca8db99e4d9691e0543 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Wed, 30 Oct 2024 11:04:16 +0100 Subject: [PATCH 42/92] comparison --- .../modelConverter/convertorVisitor.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index b57da9685d..5571b65cc7 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -115,9 +115,24 @@ std::any ConvertorVisitor::visitExpression(ExprParser::ExpressionContext* contex return context->expr()->accept(this); } -std::any ConvertorVisitor::visitComparison([[maybe_unused]] ExprParser::ComparisonContext* context) +std::any ConvertorVisitor::visitComparison(ExprParser::ComparisonContext* context) { - return std::any(); + auto* left = toNodePtr(visit(context->expr(0))); + auto* right = toNodePtr(visit(context->expr(1))); + + std::string op = context->getText(); + if (op == "=") + { + return static_cast(registry_.create(left, right)); + } + else if (op == "<=") + { + return static_cast(registry_.create(left, right)); + } + else + { + return static_cast(registry_.create(left, right)); + } } std::any ConvertorVisitor::visitAddsub(ExprParser::AddsubContext* context) From 24b8cb620d1ba8f559819df74660c480b8120677 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Wed, 30 Oct 2024 11:13:19 +0100 Subject: [PATCH 43/92] test comparison --- .../modelConverter/convertorVisitor.cpp | 2 +- .../modelParser/testConvertorVisitor.cpp | 25 ++++++++++++++----- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index 5571b65cc7..ab14210887 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -120,7 +120,7 @@ std::any ConvertorVisitor::visitComparison(ExprParser::ComparisonContext* contex auto* left = toNodePtr(visit(context->expr(0))); auto* right = toNodePtr(visit(context->expr(1))); - std::string op = context->getText(); + std::string op = context->COMPARISON()->getText(); if (op == "=") { return static_cast(registry_.create(left, right)); diff --git a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp index e652d81846..0a466c20b9 100644 --- a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp +++ b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp @@ -65,9 +65,6 @@ BOOST_FIXTURE_TEST_CASE(negation, Fixture) BOOST_FIXTURE_TEST_CASE(AddSub, Fixture) { - ObjectModel::Model model; - Antares::Solver::Registry registry; - std::string expression = "1 + 2"; auto* n = ModelConverter::convertExpressionToNode(expression, registry, model); BOOST_CHECK_EQUAL(n->name(), "SumNode"); @@ -88,9 +85,6 @@ BOOST_FIXTURE_TEST_CASE(AddSub, Fixture) BOOST_FIXTURE_TEST_CASE(mulDiv, Fixture) { - ObjectModel::Model model; - Antares::Solver::Registry registry; - std::string expression = "1 * 2"; auto* n = ModelConverter::convertExpressionToNode(expression, registry, model); BOOST_CHECK_EQUAL(n->name(), "MultiplicationNode"); @@ -107,3 +101,22 @@ BOOST_FIXTURE_TEST_CASE(mulDiv, Fixture) BOOST_CHECK_EQUAL(toLiteral(nodeDiv->left())->value(), 6); BOOST_CHECK_EQUAL(toLiteral(nodeDiv->right())->value(), 3); } + +BOOST_FIXTURE_TEST_CASE(comparison, Fixture) +{ + std::string expression = "1 = 2"; + auto* n = ModelConverter::convertExpressionToNode(expression, registry, model); + BOOST_CHECK_EQUAL(n->name(), "EqualNode"); + + expression = "1 <= 5"; + n = ModelConverter::convertExpressionToNode(expression, registry, model); + BOOST_CHECK_EQUAL(n->name(), "LessThanOrEqualNode"); + + expression = "8364 >= 27"; + n = ModelConverter::convertExpressionToNode(expression, registry, model); + BOOST_CHECK_EQUAL(n->name(), "GreaterThanOrEqualNode"); + + auto* nodeGreater = dynamic_cast(n); + BOOST_CHECK_EQUAL(toLiteral(nodeGreater->left())->value(), 8364); + BOOST_CHECK_EQUAL(toLiteral(nodeGreater->right())->value(), 27); +} From e24612e656dc093ac23b5bc988f7331013545236 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Wed, 30 Oct 2024 11:16:34 +0100 Subject: [PATCH 44/92] visitFullexpr --- src/solver/modelConverter/convertorVisitor.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index ab14210887..8af44ec10a 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -94,14 +94,9 @@ std::any ConvertorVisitor::visitMuldiv(ExprParser::MuldivContext* context) : static_cast(registry_.create(left, right)); } -std::any ConvertorVisitor::visitFullexpr([[maybe_unused]] ExprParser::FullexprContext* context) +std::any ConvertorVisitor::visitFullexpr(ExprParser::FullexprContext* context) { - return std::any(); -} - -std::any ConvertorVisitor::visitShift([[maybe_unused]] ExprParser::ShiftContext* context) -{ - return std::any(); + return context->expr()->accept(this); } std::any ConvertorVisitor::visitNegation(ExprParser::NegationContext* context) @@ -202,7 +197,7 @@ std::any ConvertorVisitor::visitRightAtom([[maybe_unused]] ExprParser::RightAtom return std::any(); } -std::any ConvertorVisitor::visitSignedExpression([[maybe_unused]] ExprParser::SignedExpressionContext* context) +std::any ConvertorVisitor::visitShift([[maybe_unused]] ExprParser::ShiftContext* context) { return std::any(); } @@ -222,6 +217,11 @@ std::any ConvertorVisitor::visitRightMuldiv([[maybe_unused]] ExprParser::RightMu return std::any(); } +std::any ConvertorVisitor::visitSignedExpression([[maybe_unused]] ExprParser::SignedExpressionContext* context) +{ + return std::any(); +} + std::any ConvertorVisitor::visitRightExpression(ExprParser::RightExpressionContext* context) { return context->expr()->accept(this); From e00b6fb6a1321c81dce164e93c8829cc4c6459ea Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Wed, 30 Oct 2024 11:27:33 +0100 Subject: [PATCH 45/92] medium expression --- src/tests/src/solver/modelParser/testConvertorVisitor.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp index 0a466c20b9..7bd0efee93 100644 --- a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp +++ b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp @@ -120,3 +120,10 @@ BOOST_FIXTURE_TEST_CASE(comparison, Fixture) BOOST_CHECK_EQUAL(toLiteral(nodeGreater->left())->value(), 8364); BOOST_CHECK_EQUAL(toLiteral(nodeGreater->right())->value(), 27); } + + +BOOST_FIXTURE_TEST_CASE(medium_expression, Fixture) +{ + std::string expression = "(12 * (3 - 1) + abc) / -(42 + 3 + 4)"; + auto* n = ModelConverter::convertExpressionToNode(expression, registry, model); +} From dd9686b4f6c3c1dd72a9a0c7a8432984203c47ff Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Wed, 30 Oct 2024 11:57:30 +0100 Subject: [PATCH 46/92] test identifier --- .../modelParser/testConvertorVisitor.cpp | 30 +++++++++++++++++-- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp index 7bd0efee93..1b95fcb646 100644 --- a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp +++ b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp @@ -24,8 +24,10 @@ #include "antares/solver/expressions/Registry.hxx" #include "antares/solver/expressions/visitors/AstDOTStyleVisitor.h" -#include "antares/solver/libObjectModel/model.h" +#include "antares/solver/libObjectModel/library.h" #include "antares/solver/modelConverter/convertorVisitor.h" +#include "antares/solver/modelConverter/modelConverter.h" +#include "antares/solver/modelParser/Library.h" using namespace Antares::Solver; @@ -63,6 +65,29 @@ BOOST_FIXTURE_TEST_CASE(negation, Fixture) BOOST_CHECK_EQUAL(toLiteral(nodeNeg->child())->value(), 7); } +BOOST_FIXTURE_TEST_CASE(identifier, Fixture) +{ + ModelParser::Library library; + ModelParser::Model model0{ + .id = "model0", + .description = "description", + .parameters = {{"param1", true, false}, {"param2", false, false}}, + .variables = {{"varP", "7", "pmin", ModelParser::ValueType::CONTINUOUS}}, + .ports = {}, + .port_field_definitions = {}, + .constraints = {}, + .objective = "objectives"}; + + library.models = {model0}; + ObjectModel::Library lib = ModelConverter::convert(library); + + auto& model = lib.Models().at("model0"); + + std::string expression = "param1"; + auto* n = ModelConverter::convertExpressionToNode(expression, registry, model); + BOOST_CHECK_EQUAL(n->name(), "ParameterNode"); +} + BOOST_FIXTURE_TEST_CASE(AddSub, Fixture) { std::string expression = "1 + 2"; @@ -121,9 +146,8 @@ BOOST_FIXTURE_TEST_CASE(comparison, Fixture) BOOST_CHECK_EQUAL(toLiteral(nodeGreater->right())->value(), 27); } - BOOST_FIXTURE_TEST_CASE(medium_expression, Fixture) { std::string expression = "(12 * (3 - 1) + abc) / -(42 + 3 + 4)"; - auto* n = ModelConverter::convertExpressionToNode(expression, registry, model); + ModelConverter::convertExpressionToNode(expression, registry, model); } From d36ebf8eba6069e8c444852c35e6247c9916160a Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Wed, 30 Oct 2024 12:16:56 +0100 Subject: [PATCH 47/92] format --- src/solver/modelConverter/convertorVisitor.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index 8af44ec10a..9b63081cb0 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -63,6 +63,7 @@ ConvertorVisitor::ConvertorVisitor(Antares::Solver::Registry& registry, model_(model) { } + std::any ConvertorVisitor::visit(antlr4::tree::ParseTree* tree) { return tree->accept(this); @@ -202,22 +203,26 @@ std::any ConvertorVisitor::visitShift([[maybe_unused]] ExprParser::ShiftContext* return std::any(); } -std::any ConvertorVisitor::visitShiftAddsub([[maybe_unused]] ExprParser::ShiftAddsubContext* context) +std::any ConvertorVisitor::visitShiftAddsub( + [[maybe_unused]] ExprParser::ShiftAddsubContext* context) { return std::any(); } -std::any ConvertorVisitor::visitShiftMuldiv([[maybe_unused]] ExprParser::ShiftMuldivContext* context) +std::any ConvertorVisitor::visitShiftMuldiv( + [[maybe_unused]] ExprParser::ShiftMuldivContext* context) { return std::any(); } -std::any ConvertorVisitor::visitRightMuldiv([[maybe_unused]] ExprParser::RightMuldivContext* context) +std::any ConvertorVisitor::visitRightMuldiv( + [[maybe_unused]] ExprParser::RightMuldivContext* context) { return std::any(); } -std::any ConvertorVisitor::visitSignedExpression([[maybe_unused]] ExprParser::SignedExpressionContext* context) +std::any ConvertorVisitor::visitSignedExpression( + [[maybe_unused]] ExprParser::SignedExpressionContext* context) { return std::any(); } From 30e2bc0343267c506ed6b849823b3ad82912d0a7 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Thu, 31 Oct 2024 12:45:41 +0100 Subject: [PATCH 48/92] use model parser --- src/solver/modelConverter/convertorVisitor.cpp | 8 ++++---- .../antares/solver/modelConverter/convertorVisitor.h | 9 +++++---- .../src/solver/modelParser/testConvertorVisitor.cpp | 9 ++------- 3 files changed, 11 insertions(+), 15 deletions(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index 9b63081cb0..c628803951 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -39,7 +39,7 @@ static Node* toNodePtr(const std::any& a) Node* convertExpressionToNode(const std::string& exprStr, Antares::Solver::Registry& registry, - const ObjectModel::Model& model) + const ModelParser::Model& model) { if (exprStr.empty()) { @@ -58,7 +58,7 @@ Node* convertExpressionToNode(const std::string& exprStr, } ConvertorVisitor::ConvertorVisitor(Antares::Solver::Registry& registry, - const ObjectModel::Model& model): + const ModelParser::Model& model): registry_(registry), model_(model) { @@ -72,9 +72,9 @@ std::any ConvertorVisitor::visit(antlr4::tree::ParseTree* tree) std::any ConvertorVisitor::visitIdentifier(ExprParser::IdentifierContext* context) { bool is_parameter = false; - for (const auto& [name, parameter]: model_.Parameters()) + for (const auto& param: model_.parameters) { - if (name == context->getText()) + if (param.id == context->getText()) { is_parameter = true; break; diff --git a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h index edf2ce76b6..f30565f486 100644 --- a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h +++ b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h @@ -25,7 +25,8 @@ #include #include -#include + +#include "antares/solver/modelParser/Library.h" namespace Antares::Solver::ModelConverter { @@ -33,7 +34,7 @@ namespace Antares::Solver::ModelConverter Nodes::Node* convertExpressionToNode( const std::string& exprStr, Antares::Solver::Registry& registry, - const ObjectModel::Model& model); + const ModelParser::Model& model); // Visitor to convert nodes to Antares::Solver::Nodes // TODO add reference to model to be able to resolve names as either parameters or variables @@ -41,7 +42,7 @@ class ConvertorVisitor: public ExprVisitor { public: ConvertorVisitor(Antares::Solver::Registry& registry, - const ObjectModel::Model& model); + const ModelParser::Model& model); std::any visit(antlr4::tree::ParseTree* tree) override; @@ -71,7 +72,7 @@ class ConvertorVisitor: public ExprVisitor std::any visitRightExpression(ExprParser::RightExpressionContext* context) override; Antares::Solver::Registry& registry_; - const ObjectModel::Model& model_; + const ModelParser::Model& model_; }; } // namespace Antares::Solver::ModelConverter diff --git a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp index 1b95fcb646..4c71d91a24 100644 --- a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp +++ b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp @@ -33,7 +33,7 @@ using namespace Antares::Solver; struct Fixture { - ObjectModel::Model model; + ModelParser::Model model; Antares::Solver::Registry registry; }; @@ -78,13 +78,8 @@ BOOST_FIXTURE_TEST_CASE(identifier, Fixture) .constraints = {}, .objective = "objectives"}; - library.models = {model0}; - ObjectModel::Library lib = ModelConverter::convert(library); - - auto& model = lib.Models().at("model0"); - std::string expression = "param1"; - auto* n = ModelConverter::convertExpressionToNode(expression, registry, model); + auto* n = ModelConverter::convertExpressionToNode(expression, registry, model0); BOOST_CHECK_EQUAL(n->name(), "ParameterNode"); } From 29d129cf77e62a7f1f8777caab50bf7c15913ee6 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Thu, 31 Oct 2024 14:01:15 +0100 Subject: [PATCH 49/92] format --- .../include/antares/solver/modelConverter/convertorVisitor.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h index f30565f486..893a3565db 100644 --- a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h +++ b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h @@ -25,7 +25,6 @@ #include #include - #include "antares/solver/modelParser/Library.h" namespace Antares::Solver::ModelConverter From cbe5ce45464eea0bcb3ef559ef08e6dcc84c8e87 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Thu, 31 Oct 2024 17:34:56 +0100 Subject: [PATCH 50/92] expression constructor --- .../include/antares/solver/libObjectModel/expression.h | 5 +++-- .../include/antares/solver/modelConverter/convertorVisitor.h | 3 +-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/solver/libModelObject/include/antares/solver/libObjectModel/expression.h b/src/solver/libModelObject/include/antares/solver/libObjectModel/expression.h index 6c505cc90c..083f7e2415 100644 --- a/src/solver/libModelObject/include/antares/solver/libObjectModel/expression.h +++ b/src/solver/libModelObject/include/antares/solver/libObjectModel/expression.h @@ -32,8 +32,9 @@ class Expression public: Expression() = default; - explicit Expression(std::string value): - value_(std::move(value)) + explicit Expression(std::string value, Nodes::Node* node): + value_(std::move(value)), + node_(node) { } diff --git a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h index 893a3565db..5239ed8b4f 100644 --- a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h +++ b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h @@ -40,8 +40,7 @@ Nodes::Node* convertExpressionToNode( class ConvertorVisitor: public ExprVisitor { public: - ConvertorVisitor(Antares::Solver::Registry& registry, - const ModelParser::Model& model); + ConvertorVisitor(Registry& registry, const ModelParser::Model& model); std::any visit(antlr4::tree::ParseTree* tree) override; From af42591b32d23a377c45eed1fdf57dfcb68a720f Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Thu, 31 Oct 2024 17:37:42 +0100 Subject: [PATCH 51/92] remove Antares::Solver --- src/solver/modelConverter/modelConverter.cpp | 102 +++++++++---------- 1 file changed, 51 insertions(+), 51 deletions(-) diff --git a/src/solver/modelConverter/modelConverter.cpp b/src/solver/modelConverter/modelConverter.cpp index 36bfce7254..e6b99ff1e0 100644 --- a/src/solver/modelConverter/modelConverter.cpp +++ b/src/solver/modelConverter/modelConverter.cpp @@ -41,19 +41,19 @@ namespace Antares::Solver::ModelConverter * \param model The ModelParser::Model object containing parameters. * \return A vector of ObjectModel::Parameter objects. */ -std::vector convertTypes( - const Antares::Solver::ModelParser::Library& library) +std::vector convertTypes( + const ModelParser::Library& library) { - // Convert portTypes to Antares::Solver::ObjectModel::PortType - std::vector out; + // Convert portTypes to ObjectModel::PortType + std::vector out; for (const auto& portType: library.port_types) { - std::vector fields; + std::vector fields; for (const auto& field: portType.fields) { - fields.emplace_back(Antares::Solver::ObjectModel::PortField{field}); + fields.emplace_back(ObjectModel::PortField{field}); } - Antares::Solver::ObjectModel::PortType portTypeModel(portType.id, + ObjectModel::PortType portTypeModel(portType.id, portType.description, std::move(fields)); out.emplace_back(std::move(portTypeModel)); @@ -68,18 +68,18 @@ std::vector convertTypes( * \return The corresponding ObjectModel::ValueType. * \throws std::runtime_error if the type is unknown. */ -std::vector convertParameters( - const Antares::Solver::ModelParser::Model& model) +std::vector convertParameters( + const ModelParser::Model& model) { - std::vector parameters; + std::vector parameters; for (const auto& parameter: model.parameters) { - parameters.emplace_back(Antares::Solver::ObjectModel::Parameter{ + parameters.emplace_back(ObjectModel::Parameter{ parameter.id, - Antares::Solver::ObjectModel::ValueType::FLOAT, // TODO: change to correct type - static_cast( + ObjectModel::ValueType::FLOAT, // TODO: change to correct type + static_cast( parameter.time_dependent), - static_cast( + static_cast( parameter.scenario_dependent)}); } return parameters; @@ -91,19 +91,19 @@ std::vector convertParameters( * \param model The ModelParser::Model object containing variables. * \return A vector of ObjectModel::Variable objects. */ -Antares::Solver::ObjectModel::ValueType convertType(Antares::Solver::ModelParser::ValueType type) +ObjectModel::ValueType convertType(ModelParser::ValueType type) { using namespace std::string_literals; switch (type) { - case Antares::Solver::ModelParser::ValueType::CONTINUOUS: - return Antares::Solver::ObjectModel::ValueType::FLOAT; - case Antares::Solver::ModelParser::ValueType::INTEGER: - return Antares::Solver::ObjectModel::ValueType::INTEGER; - case Antares::Solver::ModelParser::ValueType::BOOL: - return Antares::Solver::ObjectModel::ValueType::BOOL; + case ModelParser::ValueType::CONTINUOUS: + return ObjectModel::ValueType::FLOAT; + case ModelParser::ValueType::INTEGER: + return ObjectModel::ValueType::INTEGER; + case ModelParser::ValueType::BOOL: + return ObjectModel::ValueType::BOOL; default: - throw std::runtime_error("Unknown type: " + Antares::Solver::ModelParser::toString(type)); + throw std::runtime_error("Unknown type: " + ModelParser::toString(type)); } } @@ -113,16 +113,16 @@ Antares::Solver::ObjectModel::ValueType convertType(Antares::Solver::ModelParser * \param model The ModelParser::Model object containing ports. * \return A vector of ObjectModel::Port objects. */ -std::vector convertVariables( - const Antares::Solver::ModelParser::Model& model) +std::vector convertVariables( + const ModelParser::Model& model) { - std::vector variables; + std::vector variables; for (const auto& variable: model.variables) { - variables.emplace_back(Antares::Solver::ObjectModel::Variable{ + variables.emplace_back(ObjectModel::Variable{ variable.id, - Antares::Solver::ObjectModel::Expression{variable.lower_bound}, - Antares::Solver::ObjectModel::Expression{variable.upper_bound}, + ObjectModel::Expression{variable.lower_bound}, + ObjectModel::Expression{variable.upper_bound}, convertType(variable.variable_type)}); } return variables; @@ -134,27 +134,27 @@ std::vector convertVariables( * \param model The ModelParser::Model object containing constraints. * \return A vector of ObjectModel::Constraint objects. */ -std::vector convertPorts( - const Antares::Solver::ModelParser::Model& model) +std::vector convertPorts( + const ModelParser::Model& model) { - std::vector ports; + std::vector ports; /* for (const auto& port: model.ports) */ /* { */ - /* ports.emplace_back(Antares::Solver::ObjectModel::Port{port.name, port.type}); */ + /* ports.emplace_back(ObjectModel::Port{port.name, port.type}); */ /* } */ return ports; } -std::vector convertConstraints( - const Antares::Solver::ModelParser::Model& model) +std::vector convertConstraints( + const ModelParser::Model& model) { - std::vector constraints; + std::vector constraints; for (const auto& constraint: model.constraints) { /* Node* expr = convertExpressionToNode(constraint.expression); */ - constraints.emplace_back(Antares::Solver::ObjectModel::Constraint{ + constraints.emplace_back(ObjectModel::Constraint{ constraint.id, - Antares::Solver::ObjectModel::Expression{constraint.expression /*, expr */}}); + ObjectModel::Expression{constraint.expression /*, expr */}}); } return constraints; } @@ -165,21 +165,21 @@ std::vector convertConstraints( * \param library The ModelParser::Library object containing models. * \return A vector of ObjectModel::Model objects. */ -std::vector convertModels( - const Antares::Solver::ModelParser::Library& library) +std::vector convertModels( + const ModelParser::Library& library) { - std::vector models; + std::vector models; for (const auto& model: library.models) { - Antares::Solver::ObjectModel::ModelBuilder modelBuilder; - std::vector parameters = convertParameters(model); - std::vector variables = convertVariables(model); - std::vector ports = convertPorts(model); - std::vector constraints = convertConstraints( + ObjectModel::ModelBuilder modelBuilder; + std::vector parameters = convertParameters(model); + std::vector variables = convertVariables(model); + std::vector ports = convertPorts(model); + std::vector constraints = convertConstraints( model); auto modelObj = modelBuilder.withId(model.id) - .withObjective(Antares::Solver::ObjectModel::Expression{model.objective}) + .withObjective(ObjectModel::Expression{model.objective}) .withParameters(std::move(parameters)) .withVariables(std::move(variables)) .withPorts(std::move(ports)) @@ -196,12 +196,12 @@ std::vector convertModels( * \param library The ModelParser::Library object to convert. * \return The corresponding ObjectModel::Library object. */ -Antares::Solver::ObjectModel::Library convert(const Antares::Solver::ModelParser::Library& library) +ObjectModel::Library convert(const ModelParser::Library& library) { - Antares::Solver::ObjectModel::LibraryBuilder builder; - std::vector portTypes = convertTypes(library); - std::vector models = convertModels(library); - Antares::Solver::ObjectModel::Library lib = builder.withId(library.id) + ObjectModel::LibraryBuilder builder; + std::vector portTypes = convertTypes(library); + std::vector models = convertModels(library); + ObjectModel::Library lib = builder.withId(library.id) .withDescription(library.description) .withPortTypes(std::move(portTypes)) .withModels(std::move(models)) From ee4ebe4b88e5ada223175e2878a54d7c7f5701fe Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Mon, 4 Nov 2024 10:57:10 +0100 Subject: [PATCH 52/92] use registry in all functions --- .../solver/modelConverter/convertorVisitor.h | 9 ++- .../solver/modelConverter/modelConverter.h | 6 +- src/solver/modelConverter/modelConverter.cpp | 67 +++++++++---------- .../modelParser/testModelTranslator.cpp | 59 ++++++++-------- .../src/solver/modelParser/test_full.cpp | 3 +- 5 files changed, 70 insertions(+), 74 deletions(-) diff --git a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h index 5239ed8b4f..273981a7e5 100644 --- a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h +++ b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h @@ -30,10 +30,9 @@ namespace Antares::Solver::ModelConverter { -Nodes::Node* convertExpressionToNode( - const std::string& exprStr, - Antares::Solver::Registry& registry, - const ModelParser::Model& model); +Nodes::Node* convertExpressionToNode(const std::string& exprStr, + Registry& registry, + const ModelParser::Model& model); // Visitor to convert nodes to Antares::Solver::Nodes // TODO add reference to model to be able to resolve names as either parameters or variables @@ -69,7 +68,7 @@ class ConvertorVisitor: public ExprVisitor std::any visitRightMuldiv(ExprParser::RightMuldivContext* context) override; std::any visitRightExpression(ExprParser::RightExpressionContext* context) override; - Antares::Solver::Registry& registry_; + Registry& registry_; const ModelParser::Model& model_; }; diff --git a/src/solver/modelConverter/include/antares/solver/modelConverter/modelConverter.h b/src/solver/modelConverter/include/antares/solver/modelConverter/modelConverter.h index 4d2212b749..07026cdc11 100644 --- a/src/solver/modelConverter/include/antares/solver/modelConverter/modelConverter.h +++ b/src/solver/modelConverter/include/antares/solver/modelConverter/modelConverter.h @@ -1,4 +1,3 @@ - /* * Copyright 2007-2024, RTE (https://www.rte-france.com) * See AUTHORS.txt @@ -22,6 +21,9 @@ #pragma once +#include +#include + namespace Antares::Solver { namespace ObjectModel @@ -37,5 +39,5 @@ class Library; namespace Antares::Solver::ModelConverter { -Antares::Solver::ObjectModel::Library convert(const Antares::Solver::ModelParser::Library& library); +ObjectModel::Library convert(const ModelParser::Library& library, Registry& registry); } diff --git a/src/solver/modelConverter/modelConverter.cpp b/src/solver/modelConverter/modelConverter.cpp index e6b99ff1e0..c0b66d654c 100644 --- a/src/solver/modelConverter/modelConverter.cpp +++ b/src/solver/modelConverter/modelConverter.cpp @@ -30,6 +30,7 @@ #include "antares/solver/libObjectModel/port.h" #include "antares/solver/libObjectModel/portType.h" #include "antares/solver/libObjectModel/variable.h" +#include "antares/solver/modelConverter/convertorVisitor.h" #include "antares/solver/modelParser/Library.h" namespace Antares::Solver::ModelConverter @@ -41,8 +42,7 @@ namespace Antares::Solver::ModelConverter * \param model The ModelParser::Model object containing parameters. * \return A vector of ObjectModel::Parameter objects. */ -std::vector convertTypes( - const ModelParser::Library& library) +std::vector convertTypes(const ModelParser::Library& library) { // Convert portTypes to ObjectModel::PortType std::vector out; @@ -53,9 +53,7 @@ std::vector convertTypes( { fields.emplace_back(ObjectModel::PortField{field}); } - ObjectModel::PortType portTypeModel(portType.id, - portType.description, - std::move(fields)); + ObjectModel::PortType portTypeModel(portType.id, portType.description, std::move(fields)); out.emplace_back(std::move(portTypeModel)); } return out; @@ -68,8 +66,7 @@ std::vector convertTypes( * \return The corresponding ObjectModel::ValueType. * \throws std::runtime_error if the type is unknown. */ -std::vector convertParameters( - const ModelParser::Model& model) +std::vector convertParameters(const ModelParser::Model& model) { std::vector parameters; for (const auto& parameter: model.parameters) @@ -77,10 +74,8 @@ std::vector convertParameters( parameters.emplace_back(ObjectModel::Parameter{ parameter.id, ObjectModel::ValueType::FLOAT, // TODO: change to correct type - static_cast( - parameter.time_dependent), - static_cast( - parameter.scenario_dependent)}); + static_cast(parameter.time_dependent), + static_cast(parameter.scenario_dependent)}); } return parameters; } @@ -113,16 +108,18 @@ ObjectModel::ValueType convertType(ModelParser::ValueType type) * \param model The ModelParser::Model object containing ports. * \return A vector of ObjectModel::Port objects. */ -std::vector convertVariables( - const ModelParser::Model& model) +std::vector convertVariables(const ModelParser::Model& model, + Registry& registry) { std::vector variables; for (const auto& variable: model.variables) { variables.emplace_back(ObjectModel::Variable{ variable.id, - ObjectModel::Expression{variable.lower_bound}, - ObjectModel::Expression{variable.upper_bound}, + ObjectModel::Expression{variable.lower_bound, + convertExpressionToNode(variable.lower_bound, registry, model)}, + ObjectModel::Expression{variable.upper_bound, + convertExpressionToNode(variable.upper_bound, registry, model)}, convertType(variable.variable_type)}); } return variables; @@ -134,8 +131,7 @@ std::vector convertVariables( * \param model The ModelParser::Model object containing constraints. * \return A vector of ObjectModel::Constraint objects. */ -std::vector convertPorts( - const ModelParser::Model& model) +std::vector convertPorts([[maybe_unused]] const ModelParser::Model& model) { std::vector ports; /* for (const auto& port: model.ports) */ @@ -145,16 +141,16 @@ std::vector convertPorts( return ports; } -std::vector convertConstraints( - const ModelParser::Model& model) +std::vector convertConstraints(const ModelParser::Model& model, + Registry& registry) { std::vector constraints; for (const auto& constraint: model.constraints) { - /* Node* expr = convertExpressionToNode(constraint.expression); */ - constraints.emplace_back(ObjectModel::Constraint{ - constraint.id, - ObjectModel::Expression{constraint.expression /*, expr */}}); + Nodes::Node* expr = convertExpressionToNode(constraint.expression, registry, model); + constraints.emplace_back( + ObjectModel::Constraint{constraint.id, + ObjectModel::Expression{constraint.expression, expr}}); } return constraints; } @@ -165,21 +161,22 @@ std::vector convertConstraints( * \param library The ModelParser::Library object containing models. * \return A vector of ObjectModel::Model objects. */ -std::vector convertModels( - const ModelParser::Library& library) +std::vector convertModels(const ModelParser::Library& library, + Registry& registry) { std::vector models; for (const auto& model: library.models) { ObjectModel::ModelBuilder modelBuilder; std::vector parameters = convertParameters(model); - std::vector variables = convertVariables(model); + std::vector variables = convertVariables(model, registry); std::vector ports = convertPorts(model); - std::vector constraints = convertConstraints( - model); + std::vector constraints = convertConstraints(model, registry); + + auto nodeObjective = convertExpressionToNode(model.objective, registry, model); auto modelObj = modelBuilder.withId(model.id) - .withObjective(ObjectModel::Expression{model.objective}) + .withObjective(ObjectModel::Expression{model.objective, nodeObjective}) .withParameters(std::move(parameters)) .withVariables(std::move(variables)) .withPorts(std::move(ports)) @@ -196,16 +193,16 @@ std::vector convertModels( * \param library The ModelParser::Library object to convert. * \return The corresponding ObjectModel::Library object. */ -ObjectModel::Library convert(const ModelParser::Library& library) +ObjectModel::Library convert(const ModelParser::Library& library, Registry& registry) { ObjectModel::LibraryBuilder builder; std::vector portTypes = convertTypes(library); - std::vector models = convertModels(library); + std::vector models = convertModels(library, registry); ObjectModel::Library lib = builder.withId(library.id) - .withDescription(library.description) - .withPortTypes(std::move(portTypes)) - .withModels(std::move(models)) - .build(); + .withDescription(library.description) + .withPortTypes(std::move(portTypes)) + .withModels(std::move(models)) + .build(); return lib; } diff --git a/src/tests/src/solver/modelParser/testModelTranslator.cpp b/src/tests/src/solver/modelParser/testModelTranslator.cpp index 8f0e5aff19..63d699201b 100644 --- a/src/tests/src/solver/modelParser/testModelTranslator.cpp +++ b/src/tests/src/solver/modelParser/testModelTranslator.cpp @@ -1,5 +1,4 @@ -/* - * Copyright 2007-2024, RTE (https://www.rte-france.com) +/* * Copyright 2007-2024, RTE (https://www.rte-france.com) * See AUTHORS.txt * SPDX-License-Identifier: MPL-2.0 * This file is part of Antares-Simulator, @@ -33,11 +32,16 @@ using namespace Antares::Solver; -// Test empty library -BOOST_AUTO_TEST_CASE(Empty_library_is_valid) +struct Fixture { ModelParser::Library library; - ObjectModel::Library lib = ModelConverter::convert(library); + Registry registry; +}; + +// Test empty library +BOOST_FIXTURE_TEST_CASE(Empty_library_is_valid, Fixture) +{ + ObjectModel::Library lib = ModelConverter::convert(library, registry); BOOST_CHECK(lib.Id().empty()); BOOST_CHECK(lib.Description().empty()); BOOST_CHECK(lib.PortTypes().empty()); @@ -45,24 +49,22 @@ BOOST_AUTO_TEST_CASE(Empty_library_is_valid) } // Test library with id and description -BOOST_AUTO_TEST_CASE(library_id_description_properly_translated) +BOOST_FIXTURE_TEST_CASE(library_id_description_properly_translated, Fixture) { - ModelParser::Library library; library.id = "test_id"; library.description = "test_description"; - ObjectModel::Library lib = ModelConverter::convert(library); + ObjectModel::Library lib = ModelConverter::convert(library, registry); BOOST_CHECK_EQUAL(lib.Id(), "test_id"); BOOST_CHECK_EQUAL(lib.Description(), "test_description"); } // Test library with port types -BOOST_AUTO_TEST_CASE(port_type_with_empty_fileds_properly_translated) +BOOST_FIXTURE_TEST_CASE(port_type_with_empty_fileds_properly_translated, Fixture) { - ModelParser::Library library; ModelParser::PortType portType1{"port1", "flow port", {}}; ModelParser::PortType portType2{"port2", "impedance port", {}}; library.port_types = {portType1, portType2}; - ObjectModel::Library lib = ModelConverter::convert(library); + ObjectModel::Library lib = ModelConverter::convert(library, registry); BOOST_REQUIRE_EQUAL(lib.PortTypes().size(), 2); BOOST_CHECK_EQUAL(lib.PortTypes().at("port1").Id(), "port1"); BOOST_CHECK_EQUAL(lib.PortTypes().at("port1").Description(), "flow port"); @@ -80,13 +82,12 @@ BOOST_AUTO_TEST_CASE(port_type_with_empty_fileds_properly_translated) } // Test library with port types and fields -BOOST_AUTO_TEST_CASE(portType_with_fields_properly_translated) +BOOST_FIXTURE_TEST_CASE(portType_with_fields_properly_translated, Fixture) { - ModelParser::Library library; ModelParser::PortType portType1{"port1", "flow port", {"field1", "field2"}}; ModelParser::PortType portType2{"port2", "impedance port", {"field3", "field4"}}; library.port_types = {portType1, portType2}; - ObjectModel::Library lib = ModelConverter::convert(library); + ObjectModel::Library lib = ModelConverter::convert(library, registry); BOOST_REQUIRE_EQUAL(lib.PortTypes().at("port1").Fields().size(), 2); BOOST_CHECK_EQUAL(lib.PortTypes().at("port1").Fields()[0].Id(), "field1"); BOOST_CHECK_EQUAL(lib.PortTypes().at("port1").Fields()[1].Id(), "field2"); @@ -96,9 +97,8 @@ BOOST_AUTO_TEST_CASE(portType_with_fields_properly_translated) } // Test library with models -BOOST_AUTO_TEST_CASE(empty_model_properly_translated) +BOOST_FIXTURE_TEST_CASE(empty_model_properly_translated, Fixture) { - ModelParser::Library library; ModelParser::Model model1{.id = "model1", .description = "description", .parameters = {}, @@ -108,16 +108,15 @@ BOOST_AUTO_TEST_CASE(empty_model_properly_translated) .constraints = {}, .objective = "objectives"}; library.models = {model1}; - ObjectModel::Library lib = ModelConverter::convert(library); + ObjectModel::Library lib = ModelConverter::convert(library, registry); BOOST_REQUIRE_EQUAL(lib.Models().size(), 1); BOOST_CHECK_EQUAL(lib.Models().at("model1").Id(), "model1"); BOOST_CHECK_EQUAL(lib.Models().at("model1").Objective().Value(), "objectives"); } // Test library with models and parameters -BOOST_AUTO_TEST_CASE(model_parameters_properly_translated) +BOOST_FIXTURE_TEST_CASE(model_parameters_properly_translated, Fixture) { - ModelParser::Library library; ModelParser::Model model1{.id = "model1", .description = "description", .parameters = {{"param1", true, false}, {"param2", false, false}}, @@ -127,7 +126,7 @@ BOOST_AUTO_TEST_CASE(model_parameters_properly_translated) .constraints{}, .objective = "objectives"}; library.models = {model1}; - ObjectModel::Library lib = ModelConverter::convert(library); + ObjectModel::Library lib = ModelConverter::convert(library, registry); auto& model = lib.Models().at("model1"); BOOST_REQUIRE_EQUAL(model.Parameters().size(), 2); auto& parameter1 = model.Parameters().at("param1"); @@ -143,9 +142,8 @@ BOOST_AUTO_TEST_CASE(model_parameters_properly_translated) } // Test library with models and variables -BOOST_AUTO_TEST_CASE(model_variables_properly_translated) +BOOST_FIXTURE_TEST_CASE(model_variables_properly_translated, Fixture) { - ModelParser::Library library; ModelParser::Model model1{ .id = "model1", .description = "description", @@ -157,7 +155,7 @@ BOOST_AUTO_TEST_CASE(model_variables_properly_translated) .constraints = {}, .objective = "objectives"}; library.models = {model1}; - ObjectModel::Library lib = ModelConverter::convert(library); + ObjectModel::Library lib = ModelConverter::convert(library, registry); auto& model = lib.Models().at("model1"); BOOST_REQUIRE_EQUAL(model.Variables().size(), 2); auto& variable1 = model.Variables().at("var1"); @@ -176,6 +174,7 @@ BOOST_AUTO_TEST_CASE(model_variables_properly_translated) BOOST_AUTO_TEST_CASE(model_ports_properly_translated, *boost::unit_test::disabled()) { ModelParser::Library library; + Registry registry; ModelParser::Model model1{.id = "model1", .description = "description", .parameters = {}, @@ -185,8 +184,8 @@ BOOST_AUTO_TEST_CASE(model_ports_properly_translated, *boost::unit_test::disable .constraints = {}, .objective = "objectives"}; library.models = {model1}; - ObjectModel::Library lib = ModelConverter::convert(library); - auto& model = lib.Models().at("model1"); + ObjectModel::Library lib = ModelConverter::convert(library, registry); + [[maybe_unused]] auto& model = lib.Models().at("model1"); // BOOST_REQUIRE_EQUAL(model.Ports().size(), 2); // auto& port1 = model.Ports().at("port1"); // auto& port2 = model.Ports().at("port2"); @@ -197,9 +196,8 @@ BOOST_AUTO_TEST_CASE(model_ports_properly_translated, *boost::unit_test::disable } // Test library with models and constraints -BOOST_AUTO_TEST_CASE(model_constraints_properly_translated) +BOOST_FIXTURE_TEST_CASE(model_constraints_properly_translated, Fixture) { - ModelParser::Library library; ModelParser::Model model1{.id = "model1", .description = "description", .parameters = {}, @@ -210,7 +208,7 @@ BOOST_AUTO_TEST_CASE(model_constraints_properly_translated) {"constraint2", "expression2"}}, .objective = "objectives"}; library.models = {model1}; - ObjectModel::Library lib = ModelConverter::convert(library); + ObjectModel::Library lib = ModelConverter::convert(library, registry); auto& model = lib.Models().at("model1"); BOOST_REQUIRE_EQUAL(model.getConstraints().size(), 2); auto& constraint1 = model.getConstraints().at("constraint1"); @@ -222,9 +220,8 @@ BOOST_AUTO_TEST_CASE(model_constraints_properly_translated) } // Test with 2 models -BOOST_AUTO_TEST_CASE(multiple_models_properly_translated) +BOOST_FIXTURE_TEST_CASE(multiple_models_properly_translated, Fixture) { - ModelParser::Library library; ModelParser::Model model1{ .id = "model1", .description = "description", @@ -245,7 +242,7 @@ BOOST_AUTO_TEST_CASE(multiple_models_properly_translated) .constraints = {}, .objective = "objectives"}; library.models = {model1, model2}; - ObjectModel::Library lib = ModelConverter::convert(library); + ObjectModel::Library lib = ModelConverter::convert(library, registry); BOOST_REQUIRE_EQUAL(lib.Models().size(), 2); auto& modelo1 = lib.Models().at("model1"); BOOST_REQUIRE_EQUAL(modelo1.Parameters().size(), 2); diff --git a/src/tests/src/solver/modelParser/test_full.cpp b/src/tests/src/solver/modelParser/test_full.cpp index 5cd00d8947..9bca796959 100644 --- a/src/tests/src/solver/modelParser/test_full.cpp +++ b/src/tests/src/solver/modelParser/test_full.cpp @@ -260,9 +260,10 @@ BOOST_AUTO_TEST_CASE(test_full) try { + Registry registry; ModelParser::Parser parser; ModelParser::Library libraryObj = parser.parse(library); - ObjectModel::Library lib = ModelConverter::convert(libraryObj); + ObjectModel::Library lib = ModelConverter::convert(libraryObj, registry); BOOST_CHECK_EQUAL(lib.Id(), "basic"); BOOST_CHECK_EQUAL(lib.Description(), "Basic library"); From dc865bd9d88f394b6da1f8c869a8918a0e9e883d Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Mon, 4 Nov 2024 11:26:19 +0100 Subject: [PATCH 53/92] Use simpler expressions in test_full --- .../src/solver/modelParser/test_full.cpp | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/tests/src/solver/modelParser/test_full.cpp b/src/tests/src/solver/modelParser/test_full.cpp index 9bca796959..6e5228825e 100644 --- a/src/tests/src/solver/modelParser/test_full.cpp +++ b/src/tests/src/solver/modelParser/test_full.cpp @@ -115,7 +115,7 @@ BOOST_AUTO_TEST_CASE(test_full) - port: injection_port field: flow definition: generation - objective: expec(sum(cost * generation)) + objective: cost * generation - id: node description: A basic balancing node model @@ -124,7 +124,7 @@ BOOST_AUTO_TEST_CASE(test_full) type: flow binding-constraints: - id: balance - expression: sum_connections(injection_port.flow) = 0 + expression: injection_port = 0 - id: spillage description: A basic spillage model @@ -202,7 +202,7 @@ BOOST_AUTO_TEST_CASE(test_full) definition: injection - withdrawal constraints: - id: Level equation - expression: level[t] - level[t-1] - efficiency * injection + withdrawal = inflows + expression: level - level - efficiency * injection + withdrawal = inflows - id: thermal-cluster-dhd description: DHD model for thermal cluster @@ -250,12 +250,12 @@ BOOST_AUTO_TEST_CASE(test_full) - id: Min generation expression: generation >= nb_on * p_min - id: Number of units variation - expression: nb_on = nb_on[t-1] + nb_start - nb_stop + expression: nb_on = nb_on + nb_start - nb_stop - id: Min up time - expression: sum(t-d_min_up + 1 .. t, nb_start) <= nb_on + expression: t-d_min_up + 1 <= nb_on - id: Min down time - expression: sum(t-d_min_down + 1 .. t, nb_stop) <= nb_units_max[t-d_min_down] - nb_on - objective: expec(sum(cost * generation)) + expression: t-d_min_down + 1 <= nb_units_max - nb_on + objective: cost * generation )"s; try @@ -279,7 +279,7 @@ BOOST_AUTO_TEST_CASE(test_full) BOOST_REQUIRE_EQUAL(lib.Models().size(), 7); auto& model0 = lib.Models().at("generator"); BOOST_CHECK_EQUAL(model0.Id(), "generator"); - BOOST_CHECK_EQUAL(model0.Objective().Value(), "expec(sum(cost * generation))"); + BOOST_CHECK_EQUAL(model0.Objective().Value(), "cost * generation"); BOOST_REQUIRE_EQUAL(model0.getConstraints().size(), 0); BOOST_REQUIRE_EQUAL(model0.Parameters().size(), 2); @@ -420,7 +420,7 @@ BOOST_AUTO_TEST_CASE(test_full) ObjectModel::ValueType::FLOAT); checkConstraint(model5.getConstraints().at("Level equation"), "Level equation", - "level[t] - level[t-1] - efficiency * injection + withdrawal = inflows"); + "level - level - efficiency * injection + withdrawal = inflows"); auto& model6 = lib.Models().at("thermal-cluster-dhd"); BOOST_CHECK_EQUAL(model6.Id(), "thermal-cluster-dhd"); @@ -492,15 +492,15 @@ BOOST_AUTO_TEST_CASE(test_full) "generation >= nb_on * p_min"); checkConstraint(model6.getConstraints().at("Number of units variation"), "Number of units variation", - "nb_on = nb_on[t-1] + nb_start - nb_stop"); + "nb_on = nb_on + nb_start - nb_stop"); checkConstraint(model6.getConstraints().at("Min up time"), "Min up time", - "sum(t-d_min_up + 1 .. t, nb_start) <= nb_on"); + "t-d_min_up + 1 <= nb_on"); checkConstraint( model6.getConstraints().at("Min down time"), "Min down time", - "sum(t-d_min_down + 1 .. t, nb_stop) <= nb_units_max[t-d_min_down] - nb_on"); - BOOST_CHECK_EQUAL(model6.Objective().Value(), "expec(sum(cost * generation))"); + "t-d_min_down + 1 <= nb_units_max - nb_on"); + BOOST_CHECK_EQUAL(model6.Objective().Value(), "cost * generation"); } catch (const YAML::Exception& e) { From 5da3115a62ab110907d2ea4931e39119f8a5e8f0 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Mon, 4 Nov 2024 11:34:05 +0100 Subject: [PATCH 54/92] format --- src/tests/src/solver/modelParser/test_full.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/tests/src/solver/modelParser/test_full.cpp b/src/tests/src/solver/modelParser/test_full.cpp index 6e5228825e..191c7780da 100644 --- a/src/tests/src/solver/modelParser/test_full.cpp +++ b/src/tests/src/solver/modelParser/test_full.cpp @@ -496,10 +496,9 @@ BOOST_AUTO_TEST_CASE(test_full) checkConstraint(model6.getConstraints().at("Min up time"), "Min up time", "t-d_min_up + 1 <= nb_on"); - checkConstraint( - model6.getConstraints().at("Min down time"), - "Min down time", - "t-d_min_down + 1 <= nb_units_max - nb_on"); + checkConstraint(model6.getConstraints().at("Min down time"), + "Min down time", + "t-d_min_down + 1 <= nb_units_max - nb_on"); BOOST_CHECK_EQUAL(model6.Objective().Value(), "cost * generation"); } catch (const YAML::Exception& e) From 602851e96e3a8c7967d1fbc01b295dad482c53f3 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Mon, 4 Nov 2024 16:13:37 +0100 Subject: [PATCH 55/92] check for param AND variable --- .../modelConverter/convertorVisitor.cpp | 17 ++++++---- src/tests/cucumber/behave.ini | 3 ++ .../modelParser/testConvertorVisitor.cpp | 14 ++++++-- .../modelParser/testModelTranslator.cpp | 33 ++++++++++--------- 4 files changed, 43 insertions(+), 24 deletions(-) create mode 100644 src/tests/cucumber/behave.ini diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index c628803951..5f88f46a62 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -71,18 +71,23 @@ std::any ConvertorVisitor::visit(antlr4::tree::ParseTree* tree) std::any ConvertorVisitor::visitIdentifier(ExprParser::IdentifierContext* context) { - bool is_parameter = false; for (const auto& param: model_.parameters) { - if (param.id == context->getText()) + if (param.id == context->IDENTIFIER()->getText()) { - is_parameter = true; - break; + return static_cast(registry_.create(param.id)); } } - return (is_parameter) ? static_cast(registry_.create(context->getText())) - : static_cast(registry_.create(context->getText())); + for (const auto& var: model_.variables) + { + if (var.id == context->getText()) + { + return static_cast(registry_.create(var.id)); + } + } + + return std::any(); } std::any ConvertorVisitor::visitMuldiv(ExprParser::MuldivContext* context) diff --git a/src/tests/cucumber/behave.ini b/src/tests/cucumber/behave.ini new file mode 100644 index 0000000000..78c53094dd --- /dev/null +++ b/src/tests/cucumber/behave.ini @@ -0,0 +1,3 @@ +[behave.userdata] +antares-solver = /home/payetvin/Antares_Simulator/_build/solver/antares-solver +resources-path = /home/payetvin/Antares_Simulator/src/tests/resources/Antares_Simulator_Tests_NR \ No newline at end of file diff --git a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp index 4c71d91a24..172901ba96 100644 --- a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp +++ b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp @@ -143,6 +143,16 @@ BOOST_FIXTURE_TEST_CASE(comparison, Fixture) BOOST_FIXTURE_TEST_CASE(medium_expression, Fixture) { - std::string expression = "(12 * (3 - 1) + abc) / -(42 + 3 + 4)"; - ModelConverter::convertExpressionToNode(expression, registry, model); + ModelParser::Model model0{ + .id = "model0", + .description = "description", + .parameters = {{"param1", true, false}, {"param2", false, false}}, + .variables = {{"varP", "7", "param1", ModelParser::ValueType::CONTINUOUS}}, + .ports = {}, + .port_field_definitions = {}, + .constraints = {}, + .objective = "objectives"}; + + std::string expression = "(12 * (3 - 1) + param1) / -(42 + 3 + varP)"; + ModelConverter::convertExpressionToNode(expression, registry, model0); } diff --git a/src/tests/src/solver/modelParser/testModelTranslator.cpp b/src/tests/src/solver/modelParser/testModelTranslator.cpp index 63d699201b..cedb751586 100644 --- a/src/tests/src/solver/modelParser/testModelTranslator.cpp +++ b/src/tests/src/solver/modelParser/testModelTranslator.cpp @@ -101,17 +101,17 @@ BOOST_FIXTURE_TEST_CASE(empty_model_properly_translated, Fixture) { ModelParser::Model model1{.id = "model1", .description = "description", - .parameters = {}, + .parameters = {{"param1", true, false}}, .variables = {}, .ports = {}, .port_field_definitions = {}, .constraints = {}, - .objective = "objectives"}; + .objective = "param1"}; library.models = {model1}; ObjectModel::Library lib = ModelConverter::convert(library, registry); BOOST_REQUIRE_EQUAL(lib.Models().size(), 1); BOOST_CHECK_EQUAL(lib.Models().at("model1").Id(), "model1"); - BOOST_CHECK_EQUAL(lib.Models().at("model1").Objective().Value(), "objectives"); + BOOST_CHECK_EQUAL(lib.Models().at("model1").Objective().Value(), "param1"); } // Test library with models and parameters @@ -124,7 +124,7 @@ BOOST_FIXTURE_TEST_CASE(model_parameters_properly_translated, Fixture) .ports = {}, .port_field_definitions{}, .constraints{}, - .objective = "objectives"}; + .objective = ""}; library.models = {model1}; ObjectModel::Library lib = ModelConverter::convert(library, registry); auto& model = lib.Models().at("model1"); @@ -147,13 +147,13 @@ BOOST_FIXTURE_TEST_CASE(model_variables_properly_translated, Fixture) ModelParser::Model model1{ .id = "model1", .description = "description", - .parameters = {}, + .parameters = {{"pmax", true, false}}, .variables = {{"var1", "7", "pmax", ModelParser::ValueType::BOOL}, - {"var2", "99999999.9999999", "vcost", ModelParser::ValueType::INTEGER}}, + {"var2", "99999999.9999999", "var1", ModelParser::ValueType::INTEGER}}, .ports = {}, .port_field_definitions = {}, .constraints = {}, - .objective = "objectives"}; + .objective = "var1"}; library.models = {model1}; ObjectModel::Library lib = ModelConverter::convert(library, registry); auto& model = lib.Models().at("model1"); @@ -166,7 +166,7 @@ BOOST_FIXTURE_TEST_CASE(model_variables_properly_translated, Fixture) BOOST_CHECK_EQUAL(variable1.Type(), ObjectModel::ValueType::BOOL); BOOST_CHECK_EQUAL(variable2.Id(), "var2"); BOOST_CHECK_EQUAL(variable2.LowerBound().Value(), "99999999.9999999"); - BOOST_CHECK_EQUAL(variable2.UpperBound().Value(), "vcost"); + BOOST_CHECK_EQUAL(variable2.UpperBound().Value(), "var1"); BOOST_CHECK_EQUAL(variable2.Type(), ObjectModel::ValueType::INTEGER); } @@ -182,7 +182,7 @@ BOOST_AUTO_TEST_CASE(model_ports_properly_translated, *boost::unit_test::disable .ports = {{"port1", "flow"}, {"port2", "impedance"}}, .port_field_definitions = {}, .constraints = {}, - .objective = "objectives"}; + .objective = ""}; library.models = {model1}; ObjectModel::Library lib = ModelConverter::convert(library, registry); [[maybe_unused]] auto& model = lib.Models().at("model1"); @@ -200,13 +200,14 @@ BOOST_FIXTURE_TEST_CASE(model_constraints_properly_translated, Fixture) { ModelParser::Model model1{.id = "model1", .description = "description", - .parameters = {}, + .parameters = {{"expression1", true, false}, + {"expression2", true, false}}, .variables = {}, .ports = {}, .port_field_definitions = {}, .constraints = {{"constraint1", "expression1"}, {"constraint2", "expression2"}}, - .objective = "objectives"}; + .objective = ""}; library.models = {model1}; ObjectModel::Library lib = ModelConverter::convert(library, registry); auto& model = lib.Models().at("model1"); @@ -226,21 +227,21 @@ BOOST_FIXTURE_TEST_CASE(multiple_models_properly_translated, Fixture) .id = "model1", .description = "description", .parameters = {{"param1", true, false}, {"param2", false, false}}, - .variables = {{"varP", "7", "pmin", ModelParser::ValueType::CONTINUOUS}}, + .variables = {{"varP", "7", "param2", ModelParser::ValueType::CONTINUOUS}}, .ports = {}, .port_field_definitions = {}, .constraints = {}, - .objective = "objectives"}; + .objective = ""}; ModelParser::Model model2{ .id = "model2", .description = "description", .parameters = {}, - .variables = {{"var1", "7", "pmax", ModelParser::ValueType::BOOL}, - {"var2", "99999999.9999999", "vcost", ModelParser::ValueType::INTEGER}}, + .variables = {{"var1", "7", "8", ModelParser::ValueType::BOOL}, + {"var2", "99999999.9999999", "var1", ModelParser::ValueType::INTEGER}}, .ports = {}, .port_field_definitions = {}, .constraints = {}, - .objective = "objectives"}; + .objective = ""}; library.models = {model1, model2}; ObjectModel::Library lib = ModelConverter::convert(library, registry); BOOST_REQUIRE_EQUAL(lib.Models().size(), 2); From 795543e727073fc004ed298953c2c1c95f884d41 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Mon, 4 Nov 2024 16:20:15 +0100 Subject: [PATCH 56/92] add error log --- src/solver/modelConverter/convertorVisitor.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index 5f88f46a62..acdfda0b2a 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -21,6 +21,7 @@ #include +#include #include #include "ExprLexer.h" @@ -87,6 +88,8 @@ std::any ConvertorVisitor::visitIdentifier(ExprParser::IdentifierContext* contex } } + logs.error() << "No parameter or variable found with this name: " << context->getText(); + return std::any(); } From a40892658722cf39a0825105aed732967fc0afa5 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Mon, 4 Nov 2024 16:39:32 +0100 Subject: [PATCH 57/92] format --- src/tests/src/solver/modelParser/testModelTranslator.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tests/src/solver/modelParser/testModelTranslator.cpp b/src/tests/src/solver/modelParser/testModelTranslator.cpp index cedb751586..1d3bc00dd7 100644 --- a/src/tests/src/solver/modelParser/testModelTranslator.cpp +++ b/src/tests/src/solver/modelParser/testModelTranslator.cpp @@ -201,7 +201,7 @@ BOOST_FIXTURE_TEST_CASE(model_constraints_properly_translated, Fixture) ModelParser::Model model1{.id = "model1", .description = "description", .parameters = {{"expression1", true, false}, - {"expression2", true, false}}, + {"expression2", true, false}}, .variables = {}, .ports = {}, .port_field_definitions = {}, From 847bc0ab3e4078c7b3532dc80e6f43c6fcb76104 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Tue, 5 Nov 2024 13:02:41 +0100 Subject: [PATCH 58/92] Throw runtime for not implemented node --- .../modelConverter/convertorVisitor.cpp | 24 +++++++++++++++++++ .../solver/modelConverter/convertorVisitor.h | 3 +-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index acdfda0b2a..aba0534857 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -149,8 +149,10 @@ std::any ConvertorVisitor::visitAddsub(ExprParser::AddsubContext* context) : static_cast(registry_.create(left, right)); } +// TODO implement this std::any ConvertorVisitor::visitPortField([[maybe_unused]] ExprParser::PortFieldContext* context) { + throw std::runtime_error(std::string("Node portfield not implemented yet")); return std::any(); } @@ -160,28 +162,38 @@ std::any ConvertorVisitor::visitNumber(ExprParser::NumberContext* context) return static_cast(registry_.create(d)); } +// TODO implement this std::any ConvertorVisitor::visitTimeIndex([[maybe_unused]] ExprParser::TimeIndexContext* context) { + throw std::runtime_error(std::string("Node time index not implemented yet")); return std::any(); } +// TODO implement this std::any ConvertorVisitor::visitTimeShift([[maybe_unused]] ExprParser::TimeShiftContext* context) { + throw std::runtime_error(std::string("Node time shift not implemented yet")); return std::any(); } +// TODO implement this std::any ConvertorVisitor::visitFunction([[maybe_unused]] ExprParser::FunctionContext* context) { + throw std::runtime_error(std::string("Node function not implemented yet")); return std::any(); } +// TODO implement this std::any ConvertorVisitor::visitTimeSum([[maybe_unused]] ExprParser::TimeSumContext* context) { + throw std::runtime_error(std::string("Node time sum not implemented yet")); return std::any(); } +// TODO implement this std::any ConvertorVisitor::visitAllTimeSum([[maybe_unused]] ExprParser::AllTimeSumContext* context) { + throw std::runtime_error(std::string("Node all time sum not implemented yet")); return std::any(); } @@ -201,37 +213,49 @@ std::any ConvertorVisitor::visitUnsignedAtom(ExprParser::UnsignedAtomContext* co return context->atom()->accept(this); } +// TODO implement this std::any ConvertorVisitor::visitRightAtom([[maybe_unused]] ExprParser::RightAtomContext* context) { + throw std::runtime_error(std::string("Node right atom not implemented yet")); return std::any(); } +// TODO implement this std::any ConvertorVisitor::visitShift([[maybe_unused]] ExprParser::ShiftContext* context) { + throw std::runtime_error(std::string("Node shift not implemented yet")); return std::any(); } +// TODO implement this std::any ConvertorVisitor::visitShiftAddsub( [[maybe_unused]] ExprParser::ShiftAddsubContext* context) { + throw std::runtime_error(std::string("Node shift add sub not implemented yet")); return std::any(); } +// TODO implement this std::any ConvertorVisitor::visitShiftMuldiv( [[maybe_unused]] ExprParser::ShiftMuldivContext* context) { + throw std::runtime_error(std::string("Node shift mul div not implemented yet")); return std::any(); } +// TODO implement this std::any ConvertorVisitor::visitRightMuldiv( [[maybe_unused]] ExprParser::RightMuldivContext* context) { + throw std::runtime_error(std::string("Node right mul div not implemented yet")); return std::any(); } +// TODO implement this std::any ConvertorVisitor::visitSignedExpression( [[maybe_unused]] ExprParser::SignedExpressionContext* context) { + throw std::runtime_error(std::string("Node signed expression not implemented yet")); return std::any(); } diff --git a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h index 273981a7e5..e3f5542897 100644 --- a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h +++ b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h @@ -34,8 +34,7 @@ Nodes::Node* convertExpressionToNode(const std::string& exprStr, Registry& registry, const ModelParser::Model& model); -// Visitor to convert nodes to Antares::Solver::Nodes -// TODO add reference to model to be able to resolve names as either parameters or variables +/// Visitor to convert ANTLR expressions to Antares::Solver::Nodes class ConvertorVisitor: public ExprVisitor { public: From def6253a3c097b81236cd3ed4adaa3c56ad5746b Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Tue, 5 Nov 2024 13:56:10 +0100 Subject: [PATCH 59/92] Add exception if no param or var found --- src/solver/modelConverter/convertorVisitor.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index aba0534857..72cb486d92 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -70,6 +70,15 @@ std::any ConvertorVisitor::visit(antlr4::tree::ParseTree* tree) return tree->accept(this); } +class NoParameterOrVariableWithThisName: public std::exception +{ +public: + const char* what() const noexcept override + { + return "No parameter or variable found for this identifier"; + } +}; + std::any ConvertorVisitor::visitIdentifier(ExprParser::IdentifierContext* context) { for (const auto& param: model_.parameters) @@ -89,8 +98,7 @@ std::any ConvertorVisitor::visitIdentifier(ExprParser::IdentifierContext* contex } logs.error() << "No parameter or variable found with this name: " << context->getText(); - - return std::any(); + throw NoParameterOrVariableWithThisName(); } std::any ConvertorVisitor::visitMuldiv(ExprParser::MuldivContext* context) From 2fe9db93c69bcb24877d9c7c5cffd5d7508f23e6 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Tue, 5 Nov 2024 14:53:57 +0100 Subject: [PATCH 60/92] ast dot vonst --- .../antares/solver/expressions/visitors/AstDOTStyleVisitor.h | 2 +- src/solver/expressions/visitors/AstDOTStyleVisitor.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/solver/expressions/include/antares/solver/expressions/visitors/AstDOTStyleVisitor.h b/src/solver/expressions/include/antares/solver/expressions/visitors/AstDOTStyleVisitor.h index a8e4e1ff43..d1e1fcd581 100644 --- a/src/solver/expressions/include/antares/solver/expressions/visitors/AstDOTStyleVisitor.h +++ b/src/solver/expressions/include/antares/solver/expressions/visitors/AstDOTStyleVisitor.h @@ -116,7 +116,7 @@ class AstDOTStyleVisitor: public NodeVisitor * @param os The output stream to which the DOT representation is written. * @param root The root of the expression to be output. */ - void operator()(std::ostream& os, Nodes::Node* root); + void operator()(std::ostream& os, const Nodes::Node* root); private: void visit(const Nodes::SumNode* node, std::ostream& os) override; diff --git a/src/solver/expressions/visitors/AstDOTStyleVisitor.cpp b/src/solver/expressions/visitors/AstDOTStyleVisitor.cpp index fb74a129df..2538ec1360 100644 --- a/src/solver/expressions/visitors/AstDOTStyleVisitor.cpp +++ b/src/solver/expressions/visitors/AstDOTStyleVisitor.cpp @@ -258,7 +258,7 @@ void AstDOTStyleVisitor::EndTreeGraph(std::ostream& os) nbNodesPerType_.clear(); } -void AstDOTStyleVisitor::operator()(std::ostream& os, Nodes::Node* root) +void AstDOTStyleVisitor::operator()(std::ostream& os, const Nodes::Node* root) { NewTreeGraph(os); dispatch(root, os); From 6956bef41b19776ed2e38d7a91af5aeed2fa68ce Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Wed, 6 Nov 2024 11:32:28 +0100 Subject: [PATCH 61/92] remove cucumber behave --- src/tests/cucumber/behave.ini | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 src/tests/cucumber/behave.ini diff --git a/src/tests/cucumber/behave.ini b/src/tests/cucumber/behave.ini deleted file mode 100644 index 78c53094dd..0000000000 --- a/src/tests/cucumber/behave.ini +++ /dev/null @@ -1,3 +0,0 @@ -[behave.userdata] -antares-solver = /home/payetvin/Antares_Simulator/_build/solver/antares-solver -resources-path = /home/payetvin/Antares_Simulator/src/tests/resources/Antares_Simulator_Tests_NR \ No newline at end of file From 557980669243d46289caa7110103f27ebd9183f3 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Wed, 6 Nov 2024 13:09:35 +0100 Subject: [PATCH 62/92] Message for exception --- src/solver/modelConverter/convertorVisitor.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index 72cb486d92..cf01873261 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -73,10 +73,18 @@ std::any ConvertorVisitor::visit(antlr4::tree::ParseTree* tree) class NoParameterOrVariableWithThisName: public std::exception { public: + NoParameterOrVariableWithThisName(std::string id): + id_(id) + { + } + const char* what() const noexcept override { - return "No parameter or variable found for this identifier"; + return ("No parameter or variable found for this identifier: " + id_).c_str(); } + +private: + std::string id_ = ""; }; std::any ConvertorVisitor::visitIdentifier(ExprParser::IdentifierContext* context) @@ -98,7 +106,7 @@ std::any ConvertorVisitor::visitIdentifier(ExprParser::IdentifierContext* contex } logs.error() << "No parameter or variable found with this name: " << context->getText(); - throw NoParameterOrVariableWithThisName(); + throw NoParameterOrVariableWithThisName(context->getText()); } std::any ConvertorVisitor::visitMuldiv(ExprParser::MuldivContext* context) From 225cd632d54f8d7ceabae8ad51d4cd1437c630bc Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Wed, 6 Nov 2024 15:47:04 +0100 Subject: [PATCH 63/92] update sonarcloud properties --- sonar-project.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sonar-project.properties b/sonar-project.properties index 2a76f458da..4e499b93f4 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -12,8 +12,8 @@ sonar.sources=src sonar.tests=src/tests sonar.sourceEncoding=UTF-8 -sonar.exclusions=src/ext/**,src/tests/**,src/ui/** -sonar.coverage.exclusions=src/ext/**,src/tests/**,src/analyzer/**,src/distrib/**,src/tools/**,src/ui/** +sonar.exclusions=src/ext/**,src/tests/**,src/ui/**,src/libs/antares/antlr-interface/** +sonar.coverage.exclusions=src/ext/**,src/tests/**,src/analyzer/**,src/distrib/**,src/tools/**,src/ui/**,src/libs/antares/antlr-interface/** sonar.coverageReportPaths=coverage.xml sonar.cfamily.threads=4 From 8405111f3940f3d23832690c95021413ca5f9663 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Wed, 6 Nov 2024 16:11:04 +0100 Subject: [PATCH 64/92] test exception --- .../modelConverter/convertorVisitor.cpp | 8 ++--- .../modelParser/testConvertorVisitor.cpp | 31 +++++++++++++++++++ 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index cf01873261..690ba75852 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -73,18 +73,18 @@ std::any ConvertorVisitor::visit(antlr4::tree::ParseTree* tree) class NoParameterOrVariableWithThisName: public std::exception { public: - NoParameterOrVariableWithThisName(std::string id): - id_(id) + NoParameterOrVariableWithThisName(const std::string& id) { + msg_ = "No parameter or variable found for this identifier: " + id; } const char* what() const noexcept override { - return ("No parameter or variable found for this identifier: " + id_).c_str(); + return msg_.c_str(); } private: - std::string id_ = ""; + std::string msg_; }; std::any ConvertorVisitor::visitIdentifier(ExprParser::IdentifierContext* context) diff --git a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp index 172901ba96..2d2be338bb 100644 --- a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp +++ b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp @@ -81,6 +81,37 @@ BOOST_FIXTURE_TEST_CASE(identifier, Fixture) std::string expression = "param1"; auto* n = ModelConverter::convertExpressionToNode(expression, registry, model0); BOOST_CHECK_EQUAL(n->name(), "ParameterNode"); + + expression = "varP"; + n = ModelConverter::convertExpressionToNode(expression, registry, model0); + BOOST_CHECK_EQUAL(n->name(), "VariableNode"); +} + +bool expectedMessage(const std::exception& ex) +{ + BOOST_CHECK_EQUAL(ex.what(), + std::string("No parameter or variable found for this identifier: abc")); + return true; +} + +BOOST_FIXTURE_TEST_CASE(identifierNotFound, Fixture) +{ + ModelParser::Library library; + ModelParser::Model model0{ + .id = "model0", + .description = "description", + .parameters = {{"param1", true, false}, {"param2", false, false}}, + .variables = {{"varP", "7", "pmin", ModelParser::ValueType::CONTINUOUS}, + {"var2", "0", "param2", ModelParser::ValueType::CONTINUOUS}}, + .ports = {}, + .port_field_definitions = {}, + .constraints = {}, + .objective = "objectives"}; + + std::string expression = "abc"; // not a param or var + BOOST_CHECK_EXCEPTION(ModelConverter::convertExpressionToNode(expression, registry, model0), + std::exception, + expectedMessage); } BOOST_FIXTURE_TEST_CASE(AddSub, Fixture) From 78b6c51d81e969b0e7a96a2610a037ce550e7634 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Thu, 7 Nov 2024 14:22:28 +0100 Subject: [PATCH 65/92] remove yuni logs --- src/solver/modelConverter/CMakeLists.txt | 1 - src/solver/modelConverter/convertorVisitor.cpp | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/solver/modelConverter/CMakeLists.txt b/src/solver/modelConverter/CMakeLists.txt index 4bbc23cc4b..a6128d7070 100644 --- a/src/solver/modelConverter/CMakeLists.txt +++ b/src/solver/modelConverter/CMakeLists.txt @@ -22,7 +22,6 @@ target_link_libraries(modelConverter Antares::modelParser Antares::antlr-interface Antares::solver-expressions - Antares::logs ) install(DIRECTORY include/antares diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index 690ba75852..fc2edb2d82 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -21,7 +21,7 @@ #include -#include +/* #include */ #include #include "ExprLexer.h" @@ -105,7 +105,7 @@ std::any ConvertorVisitor::visitIdentifier(ExprParser::IdentifierContext* contex } } - logs.error() << "No parameter or variable found with this name: " << context->getText(); + /* logs.error() << "No parameter or variable found with this name: " << context->getText(); */ throw NoParameterOrVariableWithThisName(context->getText()); } From c8733fcc9558dea426262190adc0072c11800048 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Fri, 8 Nov 2024 12:55:49 +0100 Subject: [PATCH 66/92] medium expr compare --- .../modelParser/testConvertorVisitor.cpp | 31 +++++++++++++------ 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp index 2d2be338bb..ab2710b18f 100644 --- a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp +++ b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp @@ -24,6 +24,7 @@ #include "antares/solver/expressions/Registry.hxx" #include "antares/solver/expressions/visitors/AstDOTStyleVisitor.h" +#include "antares/solver/expressions/visitors/CompareVisitor.h" #include "antares/solver/libObjectModel/library.h" #include "antares/solver/modelConverter/convertorVisitor.h" #include "antares/solver/modelConverter/modelConverter.h" @@ -37,14 +38,6 @@ struct Fixture Antares::Solver::Registry registry; }; -// TODO remove, used for debug -static void printTree(Nodes::Node* n) -{ - std::ofstream out("/tmp/tree.dot"); - Visitors::AstDOTStyleVisitor dot; - dot(out, n); -} - static Nodes::LiteralNode* toLiteral(Nodes::Node* n) { return dynamic_cast(n); @@ -184,6 +177,24 @@ BOOST_FIXTURE_TEST_CASE(medium_expression, Fixture) .constraints = {}, .objective = "objectives"}; - std::string expression = "(12 * (3 - 1) + param1) / -(42 + 3 + varP)"; - ModelConverter::convertExpressionToNode(expression, registry, model0); + std::string expression = "(12 * (4 - 1) + param1) / -(42 + 3 + varP)"; + auto* n = ModelConverter::convertExpressionToNode(expression, registry, model0); + + auto* param = registry.create("param1"); + auto* var = registry.create("varP"); + auto *l3 = registry.create(3); + auto* l42 = registry.create(42); + auto* l1 = registry.create(1); + auto* l4 = registry.create(4); + auto* l12 = registry.create(12); + auto* sub = registry.create(l4, l1); + auto* mult = registry.create(l12, sub); + auto* sum1 = registry.create(mult, param); + auto* sum2 = registry.create(l42, l3); + auto* sum3 = registry.create(sum2, var); + auto* neg = registry.create(sum3); + auto* div = registry.create(sum1, neg); + + Visitors::CompareVisitor cmp; + BOOST_CHECK(cmp.dispatch(n, div)); } From b4dd0f8397dde23cd3cc07b3885fb433824a634d Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Fri, 8 Nov 2024 15:56:17 +0100 Subject: [PATCH 67/92] format --- src/tests/src/solver/modelParser/testConvertorVisitor.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp index ab2710b18f..b40e526aaf 100644 --- a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp +++ b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp @@ -182,10 +182,10 @@ BOOST_FIXTURE_TEST_CASE(medium_expression, Fixture) auto* param = registry.create("param1"); auto* var = registry.create("varP"); - auto *l3 = registry.create(3); + auto* l3 = registry.create(3); auto* l42 = registry.create(42); auto* l1 = registry.create(1); - auto* l4 = registry.create(4); + auto* l4 = registry.create(4); auto* l12 = registry.create(12); auto* sub = registry.create(l4, l1); auto* mult = registry.create(l12, sub); From 7a3412b3106ce431744dfe48d8cc7fa207d917a4 Mon Sep 17 00:00:00 2001 From: Abdoulbari Zaher <32519851+a-zakir@users.noreply.github.com> Date: Fri, 15 Nov 2024 16:31:10 +0100 Subject: [PATCH 68/92] Fix build errors caused by conflicts between windows.h and antlr4-runtime.h (#2475) --- src/solver/expressions/CMakeLists.txt | 3 +- .../expressions/visitors/AstDOTStyleVisitor.h | 1 + .../solver/expressions/visitors/NodeVisitor.h | 23 +++++++++- .../expressions/visitors/EvalVisitor.cpp | 1 + .../expressions/visitors/NodeVisitor.cpp | 46 +++++++++++++++++++ 5 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 src/solver/expressions/visitors/NodeVisitor.cpp diff --git a/src/solver/expressions/CMakeLists.txt b/src/solver/expressions/CMakeLists.txt index 5f30a6779d..f495ffebbb 100644 --- a/src/solver/expressions/CMakeLists.txt +++ b/src/solver/expressions/CMakeLists.txt @@ -21,6 +21,7 @@ set(SRC_Expressions visitors/PortFieldSumSubstitutionVisitor.cpp visitors/AstDOTStyleVisitor.cpp visitors/InvalidNode.cpp + visitors/NodeVisitor.cpp hashable.cpp @@ -78,8 +79,8 @@ target_include_directories(solver-expressions ) target_link_libraries(solver-expressions PUBLIC - Antares::logs Boost::headers + Antares::logs ) diff --git a/src/solver/expressions/include/antares/solver/expressions/visitors/AstDOTStyleVisitor.h b/src/solver/expressions/include/antares/solver/expressions/visitors/AstDOTStyleVisitor.h index d1e1fcd581..f2a0240e69 100644 --- a/src/solver/expressions/include/antares/solver/expressions/visitors/AstDOTStyleVisitor.h +++ b/src/solver/expressions/include/antares/solver/expressions/visitors/AstDOTStyleVisitor.h @@ -20,6 +20,7 @@ */ #pragma once +#include #include #include diff --git a/src/solver/expressions/include/antares/solver/expressions/visitors/NodeVisitor.h b/src/solver/expressions/include/antares/solver/expressions/visitors/NodeVisitor.h index 9b88019376..3681224ee6 100644 --- a/src/solver/expressions/include/antares/solver/expressions/visitors/NodeVisitor.h +++ b/src/solver/expressions/include/antares/solver/expressions/visitors/NodeVisitor.h @@ -19,11 +19,11 @@ ** along with Antares_Simulator. If not, see . */ #pragma once +#include #include #include #include -#include #include #include #include @@ -31,6 +31,19 @@ namespace Antares::Solver::Visitors { +// we use LogSink because the inclusion of somehow results in the +// inclusion of (very bad idea in a header!) which conflict with antlr4 headers (defines +// in the former become enums in the latter etc...) +struct LogSink +{ + using LogFunction = std::function; + + LogFunction info; + LogFunction warning; + LogFunction error; +}; + +LogSink RedirectToAntaresLogs(); template RetT tryVisit(const Nodes::Node* node, VisitorT& visitor, Args... args) @@ -119,7 +132,7 @@ class NodeVisitor: public IName } catch (std::exception&) { - logs.error() << "Antares::Solver::Visitor: could not visit the node!"; + log_.error("Antares::Solver::Visitor: could not visit the node!"); throw; } } @@ -269,5 +282,11 @@ class NodeVisitor: public IName * @return The result of processing the ComponentParameterNode. */ virtual R visit(const Nodes::ComponentParameterNode*, Args... args) = 0; + +private: + // we use LogSink because the inclusion of somehow results in the + // inclusion of (very bad idea in a header!) which conflict with antlr4 headers + // (defines in the former become enums in the latter etc...) + LogSink log_ = RedirectToAntaresLogs(); }; } // namespace Antares::Solver::Visitors diff --git a/src/solver/expressions/visitors/EvalVisitor.cpp b/src/solver/expressions/visitors/EvalVisitor.cpp index 4d0b45e119..aa89bd5cc9 100644 --- a/src/solver/expressions/visitors/EvalVisitor.cpp +++ b/src/solver/expressions/visitors/EvalVisitor.cpp @@ -21,6 +21,7 @@ #include "antares/solver/expressions/visitors/EvalVisitor.h" +#include #include #include diff --git a/src/solver/expressions/visitors/NodeVisitor.cpp b/src/solver/expressions/visitors/NodeVisitor.cpp new file mode 100644 index 0000000000..6499f72328 --- /dev/null +++ b/src/solver/expressions/visitors/NodeVisitor.cpp @@ -0,0 +1,46 @@ +/* +** Copyright 2007-2024, RTE (https://www.rte-france.com) +** See AUTHORS.txt +** SPDX-License-Identifier: MPL-2.0 +** This file is part of Antares-Simulator, +** Adequacy and Performance assessment for interconnected energy networks. +** +** Antares_Simulator is free software: you can redistribute it and/or modify +** it under the terms of the Mozilla Public Licence 2.0 as published by +** the Mozilla Foundation, either version 2 of the License, or +** (at your option) any later version. +** +** Antares_Simulator is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** Mozilla Public Licence 2.0 for more details. +** +** You should have received a copy of the Mozilla Public Licence 2.0 +** along with Antares_Simulator. If not, see . +*/ + +#include +#include + +namespace Antares::Solver::Visitors +{ +static void ToYuniInfo(const std::string& msg) +{ + logs.info() << msg; +} + +static void ToYuniWarning(const std::string& msg) +{ + logs.warning() << msg; +} + +static void ToYuniError(const std::string& msg) +{ + logs.error() << msg; +} + +LogSink RedirectToAntaresLogs() +{ + return {.info = ToYuniInfo, .warning = ToYuniWarning, .error = ToYuniError}; +} +} // namespace Antares::Solver::Visitors From 7594a480e5e23264c2505c476e2b5588ce2db5db Mon Sep 17 00:00:00 2001 From: Florian OMNES <26088210+flomnes@users.noreply.github.com> Date: Wed, 20 Nov 2024 18:09:26 +0100 Subject: [PATCH 69/92] Remove unused CMakeList.txt --- src/solver/libModelObject/CMakeLists.txt | 35 ------------------------ 1 file changed, 35 deletions(-) delete mode 100644 src/solver/libModelObject/CMakeLists.txt diff --git a/src/solver/libModelObject/CMakeLists.txt b/src/solver/libModelObject/CMakeLists.txt deleted file mode 100644 index d1272d6b5a..0000000000 --- a/src/solver/libModelObject/CMakeLists.txt +++ /dev/null @@ -1,35 +0,0 @@ -project(LibObjectModel) - -set(SRC_model - library.cpp - model.cpp - - include/antares/solver/libObjectModel/library.h - include/antares/solver/libObjectModel/model.h - include/antares/solver/libObjectModel/parameter.h - include/antares/solver/libObjectModel/valueType.h - include/antares/solver/libObjectModel/variable.h - include/antares/solver/libObjectModel/constraint.h - include/antares/solver/libObjectModel/expression.h - include/antares/solver/libObjectModel/port.h - include/antares/solver/libObjectModel/portField.h - include/antares/solver/libObjectModel/portFieldDefinition.h - include/antares/solver/libObjectModel/portType.h -) - -source_group("libObjectModel" FILES ${SRC_model}) -add_library(antares-solver-libObjectModel - ${SRC_model}) -add_library(Antares::antares-solver-libObjectModel ALIAS antares-solver-libObjectModel) - -target_include_directories(antares-solver-libObjectModel - PUBLIC - $ -) -target_link_libraries(antares-solver-libObjectModel - PUBLIC - Antares::solver-expressions -) -install(DIRECTORY include/antares - DESTINATION "include" -) From 95c04b5a999047dd0368c23369c1c9c416fe2a40 Mon Sep 17 00:00:00 2001 From: Florian OMNES <26088210+flomnes@users.noreply.github.com> Date: Wed, 20 Nov 2024 18:10:41 +0100 Subject: [PATCH 70/92] Fix comments --- src/solver/modelConverter/modelConverter.cpp | 28 ++++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/solver/modelConverter/modelConverter.cpp b/src/solver/modelConverter/modelConverter.cpp index c2674c4f2f..74bb1e4c0e 100644 --- a/src/solver/modelConverter/modelConverter.cpp +++ b/src/solver/modelConverter/modelConverter.cpp @@ -35,10 +35,10 @@ namespace Antares::Solver::ModelConverter { /** - * \brief Converts parameters from ModelParser::Model to ObjectModel::Parameter. + * \brief Converts parameters from ModelParser::Model to SystemModel::Parameter. * * \param model The ModelParser::Model object containing parameters. - * \return A vector of ObjectModel::Parameter objects. + * \return A vector of SystemModel::Parameter objects. */ std::vector convertTypes( const Antares::Solver::ModelParser::Library& library) @@ -61,10 +61,10 @@ std::vector convertTypes( } /** - * \brief Converts a ModelParser::ValueType to an ObjectModel::ValueType. + * \brief Converts a ModelParser::ValueType to an SystemModel::ValueType. * * \param type The ModelParser::ValueType to convert. - * \return The corresponding ObjectModel::ValueType. + * \return The corresponding SystemModel::ValueType. * \throws std::runtime_error if the type is unknown. */ std::vector convertParameters( @@ -85,10 +85,10 @@ std::vector convertParameters( } /** - * \brief Converts variables from ModelParser::Model to ObjectModel::Variable. + * \brief Converts variables from ModelParser::Model to SystemModel::Variable. * * \param model The ModelParser::Model object containing variables. - * \return A vector of ObjectModel::Variable objects. + * \return A vector of SystemModel::Variable objects. */ Antares::Study::SystemModel::ValueType convertType(Antares::Solver::ModelParser::ValueType type) { @@ -107,10 +107,10 @@ Antares::Study::SystemModel::ValueType convertType(Antares::Solver::ModelParser: } /** - * \brief Converts ports from ModelParser::Model to ObjectModel::Port. + * \brief Converts ports from ModelParser::Model to SystemModel::Port. * * \param model The ModelParser::Model object containing ports. - * \return A vector of ObjectModel::Port objects. + * \return A vector of SystemModel::Port objects. */ std::vector convertVariables(const ModelParser::Model& model, Registry& registry) @@ -132,10 +132,10 @@ std::vector convertVariables(const ModelP } /** - * \brief Converts constraints from ModelParser::Model to ObjectModel::Constraint. + * \brief Converts constraints from ModelParser::Model to SystemModel::Constraint. * * \param model The ModelParser::Model object containing constraints. - * \return A vector of ObjectModel::Constraint objects. + * \return A vector of SystemModel::Constraint objects. */ std::vector convertPorts( const Antares::Solver::ModelParser::Model& model) @@ -162,10 +162,10 @@ std::vector convertConstraints( } /** - * \brief Converts models from ModelParser::Library to ObjectModel::Model. + * \brief Converts models from ModelParser::Library to SystemModel::Model. * * \param library The ModelParser::Library object containing models. - * \return A vector of ObjectModel::Model objects. + * \return A vector of SystemModel::Model objects. */ std::vector convertModels( const Antares::Solver::ModelParser::Library& library) @@ -196,10 +196,10 @@ std::vector convertModels( } /** - * \brief Converts a ModelParser::Library object to an ObjectModel::Library object. + * \brief Converts a ModelParser::Library object to an SystemModel::Library object. * * \param library The ModelParser::Library object to convert. - * \return The corresponding ObjectModel::Library object. + * \return The corresponding SystemModel::Library object. */ Antares::Study::SystemModel::Library convert(const Antares::Solver::ModelParser::Library& library) { From 5e7d0c851921c4a7b0fd32945b78d3e9d17ff345 Mon Sep 17 00:00:00 2001 From: Florian OMNES <26088210+flomnes@users.noreply.github.com> Date: Wed, 20 Nov 2024 18:13:58 +0100 Subject: [PATCH 71/92] Rename Fixture -> FixtureConvertVisitor to avoid possible linking conflicts --- .../modelParser/testConvertorVisitor.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp index b40e526aaf..09e925f8fa 100644 --- a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp +++ b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp @@ -32,7 +32,7 @@ using namespace Antares::Solver; -struct Fixture +struct FixtureConvertVisitor { ModelParser::Model model; Antares::Solver::Registry registry; @@ -43,13 +43,13 @@ static Nodes::LiteralNode* toLiteral(Nodes::Node* n) return dynamic_cast(n); } -BOOST_FIXTURE_TEST_CASE(empty_expression, Fixture) +BOOST_FIXTURE_TEST_CASE(empty_expression, FixtureConvertVisitor) { auto* node = ModelConverter::convertExpressionToNode("", registry, model); BOOST_CHECK_EQUAL(node, nullptr); } -BOOST_FIXTURE_TEST_CASE(negation, Fixture) +BOOST_FIXTURE_TEST_CASE(negation, FixtureConvertVisitor) { std::string expression = "-7"; auto* n = ModelConverter::convertExpressionToNode(expression, registry, model); @@ -58,7 +58,7 @@ BOOST_FIXTURE_TEST_CASE(negation, Fixture) BOOST_CHECK_EQUAL(toLiteral(nodeNeg->child())->value(), 7); } -BOOST_FIXTURE_TEST_CASE(identifier, Fixture) +BOOST_FIXTURE_TEST_CASE(identifier, FixtureConvertVisitor) { ModelParser::Library library; ModelParser::Model model0{ @@ -87,7 +87,7 @@ bool expectedMessage(const std::exception& ex) return true; } -BOOST_FIXTURE_TEST_CASE(identifierNotFound, Fixture) +BOOST_FIXTURE_TEST_CASE(identifierNotFound, FixtureConvertVisitor) { ModelParser::Library library; ModelParser::Model model0{ @@ -107,7 +107,7 @@ BOOST_FIXTURE_TEST_CASE(identifierNotFound, Fixture) expectedMessage); } -BOOST_FIXTURE_TEST_CASE(AddSub, Fixture) +BOOST_FIXTURE_TEST_CASE(AddSub, FixtureConvertVisitor) { std::string expression = "1 + 2"; auto* n = ModelConverter::convertExpressionToNode(expression, registry, model); @@ -127,7 +127,7 @@ BOOST_FIXTURE_TEST_CASE(AddSub, Fixture) BOOST_CHECK_EQUAL(toLiteral(nodeSub->right())->value(), 3); } -BOOST_FIXTURE_TEST_CASE(mulDiv, Fixture) +BOOST_FIXTURE_TEST_CASE(mulDiv, FixtureConvertVisitor) { std::string expression = "1 * 2"; auto* n = ModelConverter::convertExpressionToNode(expression, registry, model); @@ -146,7 +146,7 @@ BOOST_FIXTURE_TEST_CASE(mulDiv, Fixture) BOOST_CHECK_EQUAL(toLiteral(nodeDiv->right())->value(), 3); } -BOOST_FIXTURE_TEST_CASE(comparison, Fixture) +BOOST_FIXTURE_TEST_CASE(comparison, FixtureConvertVisitor) { std::string expression = "1 = 2"; auto* n = ModelConverter::convertExpressionToNode(expression, registry, model); @@ -165,7 +165,7 @@ BOOST_FIXTURE_TEST_CASE(comparison, Fixture) BOOST_CHECK_EQUAL(toLiteral(nodeGreater->right())->value(), 27); } -BOOST_FIXTURE_TEST_CASE(medium_expression, Fixture) +BOOST_FIXTURE_TEST_CASE(medium_expression, FixtureConvertVisitor) { ModelParser::Model model0{ .id = "model0", From fb290ddb5fa0e6b9f8331da2a31b62a55ef6557f Mon Sep 17 00:00:00 2001 From: Florian OMNES <26088210+flomnes@users.noreply.github.com> Date: Wed, 20 Nov 2024 18:21:08 +0100 Subject: [PATCH 72/92] Add BOOST_REQUIRE where needed --- src/tests/src/solver/modelParser/testConvertorVisitor.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp index 09e925f8fa..841a6a4c94 100644 --- a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp +++ b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp @@ -55,6 +55,7 @@ BOOST_FIXTURE_TEST_CASE(negation, FixtureConvertVisitor) auto* n = ModelConverter::convertExpressionToNode(expression, registry, model); BOOST_CHECK_EQUAL(n->name(), "NegationNode"); auto* nodeNeg = dynamic_cast(n); + BOOST_REQUIRE(nodeNeg); BOOST_CHECK_EQUAL(toLiteral(nodeNeg->child())->value(), 7); } @@ -114,6 +115,7 @@ BOOST_FIXTURE_TEST_CASE(AddSub, FixtureConvertVisitor) BOOST_CHECK_EQUAL(n->name(), "SumNode"); auto* nodeSum = dynamic_cast(n); + BOOST_REQUIRE(nodeSum); auto operands = nodeSum->getOperands(); BOOST_CHECK_EQUAL(toLiteral(operands[0])->value(), 1); BOOST_CHECK_EQUAL(toLiteral(operands[1])->value(), 2); @@ -123,6 +125,7 @@ BOOST_FIXTURE_TEST_CASE(AddSub, FixtureConvertVisitor) BOOST_CHECK_EQUAL(n->name(), "SubtractionNode"); auto* nodeSub = dynamic_cast(n); + BOOST_REQUIRE(nodeSub); BOOST_CHECK_EQUAL(toLiteral(nodeSub->left())->value(), 6); BOOST_CHECK_EQUAL(toLiteral(nodeSub->right())->value(), 3); } @@ -134,6 +137,7 @@ BOOST_FIXTURE_TEST_CASE(mulDiv, FixtureConvertVisitor) BOOST_CHECK_EQUAL(n->name(), "MultiplicationNode"); auto* nodeMult = dynamic_cast(n); + BOOST_REQUIRE(nodeMult); BOOST_CHECK_EQUAL(toLiteral(nodeMult->left())->value(), 1); BOOST_CHECK_EQUAL(toLiteral(nodeMult->right())->value(), 2); @@ -142,6 +146,7 @@ BOOST_FIXTURE_TEST_CASE(mulDiv, FixtureConvertVisitor) BOOST_CHECK_EQUAL(n->name(), "DivisionNode"); auto* nodeDiv = dynamic_cast(n); + BOOST_REQUIRE(nodeDiv); BOOST_CHECK_EQUAL(toLiteral(nodeDiv->left())->value(), 6); BOOST_CHECK_EQUAL(toLiteral(nodeDiv->right())->value(), 3); } @@ -161,6 +166,7 @@ BOOST_FIXTURE_TEST_CASE(comparison, FixtureConvertVisitor) BOOST_CHECK_EQUAL(n->name(), "GreaterThanOrEqualNode"); auto* nodeGreater = dynamic_cast(n); + BOOST_REQUIRE(nodeGreater); BOOST_CHECK_EQUAL(toLiteral(nodeGreater->left())->value(), 8364); BOOST_CHECK_EQUAL(toLiteral(nodeGreater->right())->value(), 27); } From 38b7c6b555c461f9e5013d3bc42fc38f29238c5e Mon Sep 17 00:00:00 2001 From: Florian OMNES <26088210+flomnes@users.noreply.github.com> Date: Wed, 20 Nov 2024 18:27:51 +0100 Subject: [PATCH 73/92] Split test cases --- .../modelParser/testConvertorVisitor.cpp | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp index 841a6a4c94..3f281b8a5f 100644 --- a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp +++ b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp @@ -108,9 +108,9 @@ BOOST_FIXTURE_TEST_CASE(identifierNotFound, FixtureConvertVisitor) expectedMessage); } -BOOST_FIXTURE_TEST_CASE(AddSub, FixtureConvertVisitor) +BOOST_FIXTURE_TEST_CASE(addTwoLiterals, FixtureConvertVisitor) { - std::string expression = "1 + 2"; + const std::string expression = "1 + 2"; auto* n = ModelConverter::convertExpressionToNode(expression, registry, model); BOOST_CHECK_EQUAL(n->name(), "SumNode"); @@ -119,9 +119,12 @@ BOOST_FIXTURE_TEST_CASE(AddSub, FixtureConvertVisitor) auto operands = nodeSum->getOperands(); BOOST_CHECK_EQUAL(toLiteral(operands[0])->value(), 1); BOOST_CHECK_EQUAL(toLiteral(operands[1])->value(), 2); +} - expression = "6 - 3"; - n = ModelConverter::convertExpressionToNode(expression, registry, model); +BOOST_FIXTURE_TEST_CASE(subtractTwoLiterals, FixtureConvertVisitor) +{ + const std::string expression = "6 - 3"; + auto* n = ModelConverter::convertExpressionToNode(expression, registry, model); BOOST_CHECK_EQUAL(n->name(), "SubtractionNode"); auto* nodeSub = dynamic_cast(n); @@ -130,7 +133,7 @@ BOOST_FIXTURE_TEST_CASE(AddSub, FixtureConvertVisitor) BOOST_CHECK_EQUAL(toLiteral(nodeSub->right())->value(), 3); } -BOOST_FIXTURE_TEST_CASE(mulDiv, FixtureConvertVisitor) +BOOST_FIXTURE_TEST_CASE(multiplyTwoLiterals, FixtureConvertVisitor) { std::string expression = "1 * 2"; auto* n = ModelConverter::convertExpressionToNode(expression, registry, model); @@ -140,9 +143,12 @@ BOOST_FIXTURE_TEST_CASE(mulDiv, FixtureConvertVisitor) BOOST_REQUIRE(nodeMult); BOOST_CHECK_EQUAL(toLiteral(nodeMult->left())->value(), 1); BOOST_CHECK_EQUAL(toLiteral(nodeMult->right())->value(), 2); +} - expression = "6 / 3"; - n = ModelConverter::convertExpressionToNode(expression, registry, model); +BOOST_FIXTURE_TEST_CASE(divideTwoLiterals, FixtureConvertVisitor) +{ + const std::string expression = "6 / 3"; + auto* n = ModelConverter::convertExpressionToNode(expression, registry, model); BOOST_CHECK_EQUAL(n->name(), "DivisionNode"); auto* nodeDiv = dynamic_cast(n); From 80f3e4d096b794cf25c1b0afb3d1cf495f0f7c62 Mon Sep 17 00:00:00 2001 From: Florian OMNES Date: Thu, 21 Nov 2024 13:36:16 +0100 Subject: [PATCH 74/92] Fix build --- .../solver/modelConverter/modelConverter.h | 10 +++- src/solver/modelConverter/modelConverter.cpp | 60 +++++++++++-------- .../antares/study/system-model/expression.h | 13 ++-- .../src/solver/modelParser/CMakeLists.txt | 1 + .../modelParser/testConvertorVisitor.cpp | 1 - .../modelParser/testModelTranslator.cpp | 19 +++--- .../src/solver/modelParser/test_full.cpp | 3 +- 7 files changed, 66 insertions(+), 41 deletions(-) diff --git a/src/solver/modelConverter/include/antares/solver/modelConverter/modelConverter.h b/src/solver/modelConverter/include/antares/solver/modelConverter/modelConverter.h index 7ca778e10d..790cfbf6e9 100644 --- a/src/solver/modelConverter/include/antares/solver/modelConverter/modelConverter.h +++ b/src/solver/modelConverter/include/antares/solver/modelConverter/modelConverter.h @@ -21,6 +21,8 @@ #pragma once +#include + namespace Antares { namespace Study::SystemModel @@ -34,7 +36,13 @@ class Library; } } // namespace Antares +namespace Antares::Solver::Nodes +{ +class Node; +} + namespace Antares::Solver::ModelConverter { -Antares::Study::SystemModel::Library convert(const Antares::Solver::ModelParser::Library& library); +Antares::Study::SystemModel::Library convert(const Antares::Solver::ModelParser::Library& library, + Registry& registry); } diff --git a/src/solver/modelConverter/modelConverter.cpp b/src/solver/modelConverter/modelConverter.cpp index 74bb1e4c0e..bee05b06b8 100644 --- a/src/solver/modelConverter/modelConverter.cpp +++ b/src/solver/modelConverter/modelConverter.cpp @@ -23,8 +23,12 @@ #include +#include "antares/solver/expressions/Registry.hxx" +#include "antares/solver/expressions/nodes/Node.h" +#include "antares/solver/modelConverter/convertorVisitor.h" #include "antares/solver/modelParser/Library.h" #include "antares/study/system-model/constraint.h" +#include "antares/study/system-model/expression.h" #include "antares/study/system-model/library.h" #include "antares/study/system-model/model.h" #include "antares/study/system-model/parameter.h" @@ -73,13 +77,13 @@ std::vector convertParameters( std::vector parameters; for (const auto& parameter: model.parameters) { - parameters.emplace_back(Antares::Study::SystemModel::Parameter{ + parameters.emplace_back( parameter.id, Antares::Study::SystemModel::ValueType::FLOAT, // TODO: change to correct type static_cast( parameter.time_dependent), static_cast( - parameter.scenario_dependent)}); + parameter.scenario_dependent)); } return parameters; } @@ -118,16 +122,17 @@ std::vector convertVariables(const ModelP std::vector variables; for (const auto& variable: model.variables) { - variables.emplace_back(Antares::Study::SystemModel::Variable{ - variable.id, - Antares::Study::SystemModel::Expression{ - variable.lower_bound, - convertExpressionToNode(variable.lower_bound, registry, model)}, - Antares::Study::SystemModel::Expression{ - variable.upper_bound, - convertExpressionToNode(variable.upper_bound, registry, model)}, - convertType(variable.variable_type)}); + Antares::Study::SystemModel::Expression lb(variable.lower_bound, + convertExpressionToNode(variable.lower_bound, + registry, + model)); + Antares::Study::SystemModel::Expression ub(variable.upper_bound, + convertExpressionToNode(variable.upper_bound, + registry, + model)); + variables.emplace_back(variable.id, lb, ub, convertType(variable.variable_type)); } + return variables; } @@ -141,22 +146,25 @@ std::vector convertPorts( const Antares::Solver::ModelParser::Model& model) { std::vector ports; - for (const auto& port: model.ports) - { - // ports.emplace_back(Antares::Study::SystemModel::Port{port.name, port.type}); - } + // TODO + // for (const auto& port: model.ports) + // { + // ports.emplace_back(Antares::Study::SystemModel::Port{port.name, port.type}); + // } return ports; } std::vector convertConstraints( - const Antares::Solver::ModelParser::Model& model) + const Antares::Solver::ModelParser::Model& model, + Registry& registry) { std::vector constraints; for (const auto& constraint: model.constraints) { - constraints.emplace_back(Antares::Study::SystemModel::Constraint{ - constraint.id, - Antares::Study::SystemModel::Expression{constraint.expression}}); + Nodes::Node* expr = convertExpressionToNode(constraint.expression, registry, model); + constraints.emplace_back(constraint.id, + Antares::Study::SystemModel::Expression{constraint.expression, + expr}); } return constraints; } @@ -168,17 +176,20 @@ std::vector convertConstraints( * \return A vector of SystemModel::Model objects. */ std::vector convertModels( - const Antares::Solver::ModelParser::Library& library) + const Antares::Solver::ModelParser::Library& library, + Registry& registry) { std::vector models; for (const auto& model: library.models) { Antares::Study::SystemModel::ModelBuilder modelBuilder; std::vector parameters = convertParameters(model); - std::vector variables = convertVariables(model); + std::vector variables = convertVariables(model, + registry); std::vector ports = convertPorts(model); std::vector constraints = convertConstraints( - model); + model, + registry); auto nodeObjective = convertExpressionToNode(model.objective, registry, model); @@ -201,11 +212,12 @@ std::vector convertModels( * \param library The ModelParser::Library object to convert. * \return The corresponding SystemModel::Library object. */ -Antares::Study::SystemModel::Library convert(const Antares::Solver::ModelParser::Library& library) +Antares::Study::SystemModel::Library convert(const Antares::Solver::ModelParser::Library& library, + Registry& registry) { Antares::Study::SystemModel::LibraryBuilder builder; std::vector portTypes = convertTypes(library); - std::vector models = convertModels(library); + std::vector models = convertModels(library, registry); Antares::Study::SystemModel::Library lib = builder.withId(library.id) .withDescription(library.description) .withPortTypes(std::move(portTypes)) diff --git a/src/study/system-model/include/antares/study/system-model/expression.h b/src/study/system-model/include/antares/study/system-model/expression.h index 2ca157075c..f412d93754 100644 --- a/src/study/system-model/include/antares/study/system-model/expression.h +++ b/src/study/system-model/include/antares/study/system-model/expression.h @@ -22,7 +22,10 @@ #include -#include +namespace Antares::Solver::Nodes +{ +class Node; +} namespace Antares::Study::SystemModel { @@ -32,8 +35,8 @@ class Expression public: Expression() = default; - explicit Expression(std::string value, Nodes::Node* node): - value_(std::move(value)), + explicit Expression(const std::string& value, Antares::Solver::Nodes::Node* node): + value_(value), node_(node) { } @@ -43,7 +46,7 @@ class Expression return value_; } - const Nodes::Node* Node() const + const Antares::Solver::Nodes::Node* Node() const { return node_; } @@ -51,7 +54,7 @@ class Expression private: std::string value_; - Nodes::Node* node_; + Antares::Solver::Nodes::Node* node_; }; } // namespace Antares::Study::SystemModel diff --git a/src/tests/src/solver/modelParser/CMakeLists.txt b/src/tests/src/solver/modelParser/CMakeLists.txt index e139488d6b..9f884255d8 100644 --- a/src/tests/src/solver/modelParser/CMakeLists.txt +++ b/src/tests/src/solver/modelParser/CMakeLists.txt @@ -14,6 +14,7 @@ add_executable(TestModelParser ${SOURCE_FILES}) target_link_libraries(TestModelParser PRIVATE Boost::unit_test_framework + Antares::solver-expressions Antares::modelConverter Antares::modelParser Antares::antares-study-system-model diff --git a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp index 3f281b8a5f..ca985297ef 100644 --- a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp +++ b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp @@ -25,7 +25,6 @@ #include "antares/solver/expressions/Registry.hxx" #include "antares/solver/expressions/visitors/AstDOTStyleVisitor.h" #include "antares/solver/expressions/visitors/CompareVisitor.h" -#include "antares/solver/libObjectModel/library.h" #include "antares/solver/modelConverter/convertorVisitor.h" #include "antares/solver/modelConverter/modelConverter.h" #include "antares/solver/modelParser/Library.h" diff --git a/src/tests/src/solver/modelParser/testModelTranslator.cpp b/src/tests/src/solver/modelParser/testModelTranslator.cpp index 545a927d28..2f227f3c33 100644 --- a/src/tests/src/solver/modelParser/testModelTranslator.cpp +++ b/src/tests/src/solver/modelParser/testModelTranslator.cpp @@ -24,6 +24,7 @@ #include +#include "antares/solver/expressions/nodes/Node.h" #include "antares/solver/modelConverter/modelConverter.h" #include "antares/solver/modelParser/Library.h" #include "antares/study/system-model/library.h" @@ -36,7 +37,7 @@ using namespace Antares::Study; struct Fixture { ModelParser::Library library; - Registry registry; + Registry registry; }; // Test empty library @@ -55,7 +56,7 @@ BOOST_FIXTURE_TEST_CASE(library_id_description_properly_translated, Fixture) { library.id = "test_id"; library.description = "test_description"; - SystemModel::Library lib = ModelConverter::convert(library); + SystemModel::Library lib = ModelConverter::convert(library, registry); BOOST_CHECK_EQUAL(lib.Id(), "test_id"); BOOST_CHECK_EQUAL(lib.Description(), "test_description"); } @@ -66,7 +67,7 @@ BOOST_FIXTURE_TEST_CASE(port_type_with_empty_fileds_properly_translated, Fixture ModelParser::PortType portType1{"port1", "flow port", {}}; ModelParser::PortType portType2{"port2", "impedance port", {}}; library.port_types = {portType1, portType2}; - SystemModel::Library lib = ModelConverter::convert(library); + SystemModel::Library lib = ModelConverter::convert(library, registry); BOOST_REQUIRE_EQUAL(lib.PortTypes().size(), 2); BOOST_CHECK_EQUAL(lib.PortTypes().at("port1").Id(), "port1"); BOOST_CHECK_EQUAL(lib.PortTypes().at("port1").Description(), "flow port"); @@ -89,7 +90,7 @@ BOOST_FIXTURE_TEST_CASE(portType_with_fields_properly_translated, Fixture) ModelParser::PortType portType1{"port1", "flow port", {"field1", "field2"}}; ModelParser::PortType portType2{"port2", "impedance port", {"field3", "field4"}}; library.port_types = {portType1, portType2}; - SystemModel::Library lib = ModelConverter::convert(library); + SystemModel::Library lib = ModelConverter::convert(library, registry); BOOST_REQUIRE_EQUAL(lib.PortTypes().at("port1").Fields().size(), 2); BOOST_CHECK_EQUAL(lib.PortTypes().at("port1").Fields()[0].Id(), "field1"); BOOST_CHECK_EQUAL(lib.PortTypes().at("port1").Fields()[1].Id(), "field2"); @@ -110,7 +111,7 @@ BOOST_FIXTURE_TEST_CASE(empty_model_properly_translated, Fixture) .constraints = {}, .objective = "param1"}; library.models = {model1}; - SystemModel::Library lib = ModelConverter::convert(library); + SystemModel::Library lib = ModelConverter::convert(library, registry); BOOST_REQUIRE_EQUAL(lib.Models().size(), 1); BOOST_CHECK_EQUAL(lib.Models().at("model1").Id(), "model1"); BOOST_CHECK_EQUAL(lib.Models().at("model1").Objective().Value(), "param1"); @@ -128,7 +129,7 @@ BOOST_FIXTURE_TEST_CASE(model_parameters_properly_translated, Fixture) .constraints{}, .objective = ""}; library.models = {model1}; - SystemModel::Library lib = ModelConverter::convert(library); + SystemModel::Library lib = ModelConverter::convert(library, registry); auto& model = lib.Models().at("model1"); BOOST_REQUIRE_EQUAL(model.Parameters().size(), 2); auto& parameter1 = model.Parameters().at("param1"); @@ -157,7 +158,7 @@ BOOST_FIXTURE_TEST_CASE(model_variables_properly_translated, Fixture) .constraints = {}, .objective = "var1"}; library.models = {model1}; - SystemModel::Library lib = ModelConverter::convert(library); + SystemModel::Library lib = ModelConverter::convert(library, registry); auto& model = lib.Models().at("model1"); BOOST_REQUIRE_EQUAL(model.Variables().size(), 2); auto& variable1 = model.Variables().at("var1"); @@ -186,8 +187,8 @@ BOOST_AUTO_TEST_CASE(model_ports_properly_translated, *boost::unit_test::disable .constraints = {}, .objective = ""}; library.models = {model1}; - SystemModel::Library lib = ModelConverter::convert(library); - auto& model = lib.Models().at("model1"); + SystemModel::Library lib = ModelConverter::convert(library, registry); + [[maybe_unused]] auto& model = lib.Models().at("model1"); // BOOST_REQUIRE_EQUAL(model.Ports().size(), 2); // auto& port1 = model.Ports().at("port1"); // auto& port2 = model.Ports().at("port2"); diff --git a/src/tests/src/solver/modelParser/test_full.cpp b/src/tests/src/solver/modelParser/test_full.cpp index cc4bf862cb..af6df9124b 100644 --- a/src/tests/src/solver/modelParser/test_full.cpp +++ b/src/tests/src/solver/modelParser/test_full.cpp @@ -25,6 +25,7 @@ #include +#include "antares/solver/expressions/nodes/Node.h" #include "antares/solver/modelConverter/modelConverter.h" #include "antares/solver/modelParser/Library.h" #include "antares/solver/modelParser/parser.h" @@ -261,7 +262,7 @@ BOOST_AUTO_TEST_CASE(test_full) try { - Registry registry; + Registry registry; ModelParser::Parser parser; ModelParser::Library libraryObj = parser.parse(library); SystemModel::Library lib = ModelConverter::convert(libraryObj, registry); From 7d916c253f3a867f297ddd21bf1ba90a8758cd13 Mon Sep 17 00:00:00 2001 From: Florian OMNES Date: Thu, 21 Nov 2024 13:57:04 +0100 Subject: [PATCH 75/92] Remove "type" from Parameter (unused) --- src/solver/modelConverter/modelConverter.cpp | 1 - .../antares/study/system-model/parameter.h | 8 -- .../modelParser/testModelTranslator.cpp | 2 - .../src/solver/modelParser/test_full.cpp | 112 +++--------------- 4 files changed, 19 insertions(+), 104 deletions(-) diff --git a/src/solver/modelConverter/modelConverter.cpp b/src/solver/modelConverter/modelConverter.cpp index bee05b06b8..2ddb036224 100644 --- a/src/solver/modelConverter/modelConverter.cpp +++ b/src/solver/modelConverter/modelConverter.cpp @@ -79,7 +79,6 @@ std::vector convertParameters( { parameters.emplace_back( parameter.id, - Antares::Study::SystemModel::ValueType::FLOAT, // TODO: change to correct type static_cast( parameter.time_dependent), static_cast( diff --git a/src/study/system-model/include/antares/study/system-model/parameter.h b/src/study/system-model/include/antares/study/system-model/parameter.h index 4daa3d2b94..b2dad9b7d1 100644 --- a/src/study/system-model/include/antares/study/system-model/parameter.h +++ b/src/study/system-model/include/antares/study/system-model/parameter.h @@ -53,11 +53,9 @@ class Parameter }; explicit Parameter(std::string id, - ValueType type, TimeDependent timeDependent, ScenarioDependent scenarioDependent): id_(std::move(id)), - type_(type), timeDependent_(timeDependent), scenarioDependent_(scenarioDependent) { @@ -68,11 +66,6 @@ class Parameter return id_; } - ValueType Type() const - { - return type_; - } - bool isTimeDependent() const { return timeDependent_ == TimeDependent::YES; @@ -85,7 +78,6 @@ class Parameter private: std::string id_; - ValueType type_; TimeDependent timeDependent_ = TimeDependent::YES; // optional at construction ScenarioDependent scenarioDependent_ = ScenarioDependent::YES; // optional at construction }; diff --git a/src/tests/src/solver/modelParser/testModelTranslator.cpp b/src/tests/src/solver/modelParser/testModelTranslator.cpp index 2f227f3c33..3121b18721 100644 --- a/src/tests/src/solver/modelParser/testModelTranslator.cpp +++ b/src/tests/src/solver/modelParser/testModelTranslator.cpp @@ -137,11 +137,9 @@ BOOST_FIXTURE_TEST_CASE(model_parameters_properly_translated, Fixture) BOOST_CHECK_EQUAL(parameter1.Id(), "param1"); BOOST_CHECK(parameter1.isTimeDependent()); BOOST_CHECK(!parameter1.isScenarioDependent()); - BOOST_CHECK_EQUAL(parameter1.Type(), SystemModel::ValueType::FLOAT); BOOST_CHECK_EQUAL(parameter2.Id(), "param2"); BOOST_CHECK(!parameter2.isTimeDependent()); BOOST_CHECK(!parameter2.isScenarioDependent()); - BOOST_CHECK_EQUAL(parameter2.Type(), SystemModel::ValueType::FLOAT); } // Test library with models and variables diff --git a/src/tests/src/solver/modelParser/test_full.cpp b/src/tests/src/solver/modelParser/test_full.cpp index af6df9124b..2ba554c0d7 100644 --- a/src/tests/src/solver/modelParser/test_full.cpp +++ b/src/tests/src/solver/modelParser/test_full.cpp @@ -40,14 +40,12 @@ using namespace Antares::Study; void checkParameter(const SystemModel::Parameter& parameter, const std::string& name, bool timeDependent, - bool scenarioDependent, - SystemModel::ValueType type) + bool scenarioDependent) { std::cout << "Parameter: " << parameter.Id() << std::endl; BOOST_CHECK_EQUAL(parameter.Id(), name); BOOST_CHECK_EQUAL(parameter.isTimeDependent(), timeDependent); BOOST_CHECK_EQUAL(parameter.isScenarioDependent(), scenarioDependent); - BOOST_CHECK_EQUAL(parameter.Type(), type); } void checkVariable(const SystemModel::Variable& variable, @@ -289,16 +287,8 @@ BOOST_AUTO_TEST_CASE(test_full) // BOOST_REQUIRE_EQUAL(model0.Ports().size(), 1); Unsuported // BOOST_REQUIRE_EQUAL(model0.PortFieldDefinitions().size(), 1); Unsuported - checkParameter(model0.Parameters().at("cost"), - "cost", - false, - false, - SystemModel::ValueType::FLOAT); - checkParameter(model0.Parameters().at("p_max"), - "p_max", - false, - false, - SystemModel::ValueType::FLOAT); + checkParameter(model0.Parameters().at("cost"), "cost", false, false); + checkParameter(model0.Parameters().at("p_max"), "p_max", false, false); checkVariable(model0.Variables().at("generation"), "generation", @@ -326,11 +316,7 @@ BOOST_AUTO_TEST_CASE(test_full) // BOOST_REQUIRE_EQUAL(model2.Ports().size(), 1); Unsuported // BOOST_REQUIRE_EQUAL(model2.PortFieldDefinitions().size(), 1); Unsuported - checkParameter(model2.Parameters().at("cost"), - "cost", - false, - false, - SystemModel::ValueType::FLOAT); + checkParameter(model2.Parameters().at("cost"), "cost", false, false); checkVariable(model2.Variables().at("spillage"), "spillage", "0", @@ -344,11 +330,7 @@ BOOST_AUTO_TEST_CASE(test_full) BOOST_REQUIRE_EQUAL(model3.Variables().size(), 1); // BOOST_REQUIRE_EQUAL(model3.Ports().size(), 1); Unsuported // BOOST_REQUIRE_EQUAL(model3.PortFieldDefinitions().size(), 1); Unsuported - checkParameter(model3.Parameters().at("cost"), - "cost", - false, - false, - SystemModel::ValueType::FLOAT); + checkParameter(model3.Parameters().at("cost"), "cost", false, false); checkVariable(model3.Variables().at("unsupplied_energy"), "unsupplied_energy", "0", @@ -362,11 +344,7 @@ BOOST_AUTO_TEST_CASE(test_full) BOOST_REQUIRE_EQUAL(model4.Variables().size(), 0); // BOOST_REQUIRE_EQUAL(model4.Ports().size(), 1); Unsuported // BOOST_REQUIRE_EQUAL(model4.PortFieldDefinitions().size(), 1); Unsuported - checkParameter(model4.Parameters().at("demand"), - "demand", - true, - true, - SystemModel::ValueType::FLOAT); + checkParameter(model4.Parameters().at("demand"), "demand", true, true); auto& model5 = lib.Models().at("short-term-storage"); BOOST_CHECK_EQUAL(model5.Id(), "short-term-storage"); @@ -375,36 +353,12 @@ BOOST_AUTO_TEST_CASE(test_full) BOOST_REQUIRE_EQUAL(model5.Variables().size(), 3); // BOOST_REQUIRE_EQUAL(model5.Ports().size(), 1); Unsuported // BOOST_REQUIRE_EQUAL(model5.PortFieldDefinitions().size(), 1); Unsuported - checkParameter(model5.Parameters().at("efficiency"), - "efficiency", - true, - true, - SystemModel::ValueType::FLOAT); - checkParameter(model5.Parameters().at("level_min"), - "level_min", - true, - true, - SystemModel::ValueType::FLOAT); - checkParameter(model5.Parameters().at("level_max"), - "level_max", - true, - true, - SystemModel::ValueType::FLOAT); - checkParameter(model5.Parameters().at("p_max_withdrawal"), - "p_max_withdrawal", - true, - true, - SystemModel::ValueType::FLOAT); - checkParameter(model5.Parameters().at("p_max_injection"), - "p_max_injection", - true, - true, - SystemModel::ValueType::FLOAT); - checkParameter(model5.Parameters().at("inflows"), - "inflows", - true, - true, - SystemModel::ValueType::FLOAT); + checkParameter(model5.Parameters().at("efficiency"), "efficiency", true, true); + checkParameter(model5.Parameters().at("level_min"), "level_min", true, true); + checkParameter(model5.Parameters().at("level_max"), "level_max", true, true); + checkParameter(model5.Parameters().at("p_max_withdrawal"), "p_max_withdrawal", true, true); + checkParameter(model5.Parameters().at("p_max_injection"), "p_max_injection", true, true); + checkParameter(model5.Parameters().at("inflows"), "inflows", true, true); checkVariable(model5.Variables().at("injection"), "injection", "0", @@ -431,41 +385,13 @@ BOOST_AUTO_TEST_CASE(test_full) BOOST_REQUIRE_EQUAL(model6.Variables().size(), 4); // BOOST_REQUIRE_EQUAL(model6.Ports().size(), 1); Unsuported // BOOST_REQUIRE_EQUAL(model6.PortFieldDefinitions().size(), 1); Unsuported - checkParameter(model6.Parameters().at("cost"), - "cost", - true, - true, - SystemModel::ValueType::FLOAT); - checkParameter(model6.Parameters().at("p_min"), - "p_min", - true, - true, - SystemModel::ValueType::FLOAT); - checkParameter(model6.Parameters().at("p_max"), - "p_max", - true, - true, - SystemModel::ValueType::FLOAT); - checkParameter(model6.Parameters().at("d_min_up"), - "d_min_up", - true, - true, - SystemModel::ValueType::FLOAT); - checkParameter(model6.Parameters().at("d_min_down"), - "d_min_down", - true, - true, - SystemModel::ValueType::FLOAT); - checkParameter(model6.Parameters().at("nb_units_max"), - "nb_units_max", - true, - true, - SystemModel::ValueType::FLOAT); - checkParameter(model6.Parameters().at("nb_failures"), - "nb_failures", - true, - true, - SystemModel::ValueType::FLOAT); + checkParameter(model6.Parameters().at("cost"), "cost", true, true); + checkParameter(model6.Parameters().at("p_min"), "p_min", true, true); + checkParameter(model6.Parameters().at("p_max"), "p_max", true, true); + checkParameter(model6.Parameters().at("d_min_up"), "d_min_up", true, true); + checkParameter(model6.Parameters().at("d_min_down"), "d_min_down", true, true); + checkParameter(model6.Parameters().at("nb_units_max"), "nb_units_max", true, true); + checkParameter(model6.Parameters().at("nb_failures"), "nb_failures", true, true); checkVariable(model6.Variables().at("generation"), "generation", "0", From f779d731aeff03c08e2f66346297eddef8cc4044 Mon Sep 17 00:00:00 2001 From: Florian OMNES Date: Thu, 21 Nov 2024 15:53:51 +0100 Subject: [PATCH 76/92] Use std::runtime_error instead of std::exception --- src/solver/modelConverter/convertorVisitor.cpp | 15 ++------------- .../solver/modelParser/testConvertorVisitor.cpp | 4 ++-- 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index fc2edb2d82..da04fbd604 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -70,21 +70,10 @@ std::any ConvertorVisitor::visit(antlr4::tree::ParseTree* tree) return tree->accept(this); } -class NoParameterOrVariableWithThisName: public std::exception +class NoParameterOrVariableWithThisName: public std::runtime_error { public: - NoParameterOrVariableWithThisName(const std::string& id) - { - msg_ = "No parameter or variable found for this identifier: " + id; - } - - const char* what() const noexcept override - { - return msg_.c_str(); - } - -private: - std::string msg_; + using std::runtime_error::runtime_error; }; std::any ConvertorVisitor::visitIdentifier(ExprParser::IdentifierContext* context) diff --git a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp index ca985297ef..a4ba1608d9 100644 --- a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp +++ b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp @@ -80,7 +80,7 @@ BOOST_FIXTURE_TEST_CASE(identifier, FixtureConvertVisitor) BOOST_CHECK_EQUAL(n->name(), "VariableNode"); } -bool expectedMessage(const std::exception& ex) +bool expectedMessage(const std::runtime_error& ex) { BOOST_CHECK_EQUAL(ex.what(), std::string("No parameter or variable found for this identifier: abc")); @@ -103,7 +103,7 @@ BOOST_FIXTURE_TEST_CASE(identifierNotFound, FixtureConvertVisitor) std::string expression = "abc"; // not a param or var BOOST_CHECK_EXCEPTION(ModelConverter::convertExpressionToNode(expression, registry, model0), - std::exception, + std::runtime_error, expectedMessage); } From 4b84e2e4de378ef75931b928d2898f5ed6610563 Mon Sep 17 00:00:00 2001 From: Florian OMNES Date: Thu, 21 Nov 2024 15:56:20 +0100 Subject: [PATCH 77/92] sonar-project.properties goes multiline --- sonar-project.properties | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/sonar-project.properties b/sonar-project.properties index 4e499b93f4..ead3339eb3 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -12,8 +12,18 @@ sonar.sources=src sonar.tests=src/tests sonar.sourceEncoding=UTF-8 -sonar.exclusions=src/ext/**,src/tests/**,src/ui/**,src/libs/antares/antlr-interface/** -sonar.coverage.exclusions=src/ext/**,src/tests/**,src/analyzer/**,src/distrib/**,src/tools/**,src/ui/**,src/libs/antares/antlr-interface/** +sonar.exclusions=src/ext/**,\ + src/tests/**,\ + src/ui/**,\ + src/libs/antares/antlr-interface/** + +sonar.coverage.exclusions=src/ext/**,\ + src/tests/**,\ + src/analyzer/**,\ + src/distrib/**,\ + src/tools/**,\ + src/ui/**,\ + src/libs/antares/antlr-interface/** sonar.coverageReportPaths=coverage.xml sonar.cfamily.threads=4 From 079167f87dd3ebf7aa9afd047f52c83273e6870c Mon Sep 17 00:00:00 2001 From: Florian OMNES Date: Thu, 21 Nov 2024 15:59:57 +0100 Subject: [PATCH 78/92] Remove unused headers, variables, NS info --- src/solver/modelConverter/convertorVisitor.cpp | 4 ---- .../include/antares/solver/modelConverter/convertorVisitor.h | 1 + src/tests/src/solver/modelParser/testConvertorVisitor.cpp | 5 +---- 3 files changed, 2 insertions(+), 8 deletions(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index da04fbd604..eccbf31aa7 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -19,9 +19,6 @@ * along with Antares_Simulator. If not, see . */ -#include - -/* #include */ #include #include "ExprLexer.h" @@ -94,7 +91,6 @@ std::any ConvertorVisitor::visitIdentifier(ExprParser::IdentifierContext* contex } } - /* logs.error() << "No parameter or variable found with this name: " << context->getText(); */ throw NoParameterOrVariableWithThisName(context->getText()); } diff --git a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h index e3f5542897..9d354ac2cc 100644 --- a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h +++ b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h @@ -67,6 +67,7 @@ class ConvertorVisitor: public ExprVisitor std::any visitRightMuldiv(ExprParser::RightMuldivContext* context) override; std::any visitRightExpression(ExprParser::RightExpressionContext* context) override; +private: Registry& registry_; const ModelParser::Model& model_; }; diff --git a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp index a4ba1608d9..eba3a54333 100644 --- a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp +++ b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp @@ -23,7 +23,6 @@ #include #include "antares/solver/expressions/Registry.hxx" -#include "antares/solver/expressions/visitors/AstDOTStyleVisitor.h" #include "antares/solver/expressions/visitors/CompareVisitor.h" #include "antares/solver/modelConverter/convertorVisitor.h" #include "antares/solver/modelConverter/modelConverter.h" @@ -34,7 +33,7 @@ using namespace Antares::Solver; struct FixtureConvertVisitor { ModelParser::Model model; - Antares::Solver::Registry registry; + Registry registry; }; static Nodes::LiteralNode* toLiteral(Nodes::Node* n) @@ -60,7 +59,6 @@ BOOST_FIXTURE_TEST_CASE(negation, FixtureConvertVisitor) BOOST_FIXTURE_TEST_CASE(identifier, FixtureConvertVisitor) { - ModelParser::Library library; ModelParser::Model model0{ .id = "model0", .description = "description", @@ -89,7 +87,6 @@ bool expectedMessage(const std::runtime_error& ex) BOOST_FIXTURE_TEST_CASE(identifierNotFound, FixtureConvertVisitor) { - ModelParser::Library library; ModelParser::Model model0{ .id = "model0", .description = "description", From bfa97c8ca92bc4b588260366fd01c5905ab2dd53 Mon Sep 17 00:00:00 2001 From: Florian OMNES Date: Thu, 21 Nov 2024 16:07:04 +0100 Subject: [PATCH 79/92] Remove toNodePtr --- .../modelConverter/convertorVisitor.cpp | 23 ++++++++----------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index eccbf31aa7..dd4ec4f5f8 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -30,11 +30,6 @@ namespace Antares::Solver::ModelConverter using namespace Antares::Solver::Nodes; -static Node* toNodePtr(const std::any& a) -{ - return std::any_cast(a); -} - Node* convertExpressionToNode(const std::string& exprStr, Antares::Solver::Registry& registry, const ModelParser::Model& model) @@ -52,7 +47,7 @@ Node* convertExpressionToNode(const std::string& exprStr, ExprParser::ExprContext* tree = parser.expr(); ConvertorVisitor visitor(registry, model); - return toNodePtr(visitor.visit(tree)); + return std::any_cast(visitor.visit(tree)); } ConvertorVisitor::ConvertorVisitor(Antares::Solver::Registry& registry, @@ -96,8 +91,8 @@ std::any ConvertorVisitor::visitIdentifier(ExprParser::IdentifierContext* contex std::any ConvertorVisitor::visitMuldiv(ExprParser::MuldivContext* context) { - auto* left = toNodePtr(visit(context->expr(0))); - auto* right = toNodePtr(visit(context->expr(1))); + auto* left = std::any_cast(visit(context->expr(0))); + auto* right = std::any_cast(visit(context->expr(1))); std::string op = context->op->getText(); return (op == "*") ? static_cast(registry_.create(left, right)) @@ -111,7 +106,7 @@ std::any ConvertorVisitor::visitFullexpr(ExprParser::FullexprContext* context) std::any ConvertorVisitor::visitNegation(ExprParser::NegationContext* context) { - auto n = toNodePtr(context->expr()->accept(this)); + auto n = std::any_cast(context->expr()->accept(this)); return static_cast(registry_.create(n)); } @@ -122,8 +117,8 @@ std::any ConvertorVisitor::visitExpression(ExprParser::ExpressionContext* contex std::any ConvertorVisitor::visitComparison(ExprParser::ComparisonContext* context) { - auto* left = toNodePtr(visit(context->expr(0))); - auto* right = toNodePtr(visit(context->expr(1))); + auto* left = std::any_cast(visit(context->expr(0))); + auto* right = std::any_cast(visit(context->expr(1))); std::string op = context->COMPARISON()->getText(); if (op == "=") @@ -142,8 +137,8 @@ std::any ConvertorVisitor::visitComparison(ExprParser::ComparisonContext* contex std::any ConvertorVisitor::visitAddsub(ExprParser::AddsubContext* context) { - auto* left = toNodePtr(visit(context->expr(0))); - auto* right = toNodePtr(visit(context->expr(1))); + auto* left = std::any_cast(visit(context->expr(0))); + auto* right = std::any_cast(visit(context->expr(1))); std::string op = context->op->getText(); return (op == "+") ? static_cast(registry_.create(left, right)) @@ -204,7 +199,7 @@ std::any ConvertorVisitor::visitSignedAtom(ExprParser::SignedAtomContext* contex auto a = context->atom()->accept(this); if (context->op->getText() == "-") { - return static_cast(registry_.create(toNodePtr(a))); + return static_cast(registry_.create(std::any_cast(a))); } return a; } From ab8dec6433b8c19c83af71dfde90c3c21b2d6fb6 Mon Sep 17 00:00:00 2001 From: Florian OMNES Date: Thu, 21 Nov 2024 16:09:16 +0100 Subject: [PATCH 80/92] Naming --- .../include/antares/study/system-model/expression.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/study/system-model/include/antares/study/system-model/expression.h b/src/study/system-model/include/antares/study/system-model/expression.h index f412d93754..1e47bc7298 100644 --- a/src/study/system-model/include/antares/study/system-model/expression.h +++ b/src/study/system-model/include/antares/study/system-model/expression.h @@ -35,7 +35,7 @@ class Expression public: Expression() = default; - explicit Expression(const std::string& value, Antares::Solver::Nodes::Node* node): + explicit Expression(const std::string& value, Antares::Solver::Nodes::Node* root): value_(value), node_(node) { From 3a58f3537539c3944c43a19e52a230e917d748f4 Mon Sep 17 00:00:00 2001 From: Florian OMNES Date: Thu, 21 Nov 2024 16:13:57 +0100 Subject: [PATCH 81/92] Fix & clean --- .../include/antares/study/system-model/expression.h | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/study/system-model/include/antares/study/system-model/expression.h b/src/study/system-model/include/antares/study/system-model/expression.h index 1e47bc7298..2a7114cb7a 100644 --- a/src/study/system-model/include/antares/study/system-model/expression.h +++ b/src/study/system-model/include/antares/study/system-model/expression.h @@ -37,7 +37,7 @@ class Expression explicit Expression(const std::string& value, Antares::Solver::Nodes::Node* root): value_(value), - node_(node) + root_(root) { } @@ -46,15 +46,9 @@ class Expression return value_; } - const Antares::Solver::Nodes::Node* Node() const - { - return node_; - } - private: std::string value_; - - Antares::Solver::Nodes::Node* node_; + Antares::Solver::Nodes::Node* root_; }; } // namespace Antares::Study::SystemModel From 4feaec71e09012b810ba11bda09a3adb9ab43589 Mon Sep 17 00:00:00 2001 From: Florian OMNES Date: Thu, 21 Nov 2024 16:27:08 +0100 Subject: [PATCH 82/92] Remove fixture where not needed --- .../modelParser/testConvertorVisitor.cpp | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp index eba3a54333..4ca08489d0 100644 --- a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp +++ b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp @@ -57,9 +57,10 @@ BOOST_FIXTURE_TEST_CASE(negation, FixtureConvertVisitor) BOOST_CHECK_EQUAL(toLiteral(nodeNeg->child())->value(), 7); } -BOOST_FIXTURE_TEST_CASE(identifier, FixtureConvertVisitor) +BOOST_AUTO_TEST_CASE(identifier) { - ModelParser::Model model0{ + Registry registry; + ModelParser::Model model{ .id = "model0", .description = "description", .parameters = {{"param1", true, false}, {"param2", false, false}}, @@ -70,11 +71,11 @@ BOOST_FIXTURE_TEST_CASE(identifier, FixtureConvertVisitor) .objective = "objectives"}; std::string expression = "param1"; - auto* n = ModelConverter::convertExpressionToNode(expression, registry, model0); + auto* n = ModelConverter::convertExpressionToNode(expression, registry, model); BOOST_CHECK_EQUAL(n->name(), "ParameterNode"); expression = "varP"; - n = ModelConverter::convertExpressionToNode(expression, registry, model0); + n = ModelConverter::convertExpressionToNode(expression, registry, model); BOOST_CHECK_EQUAL(n->name(), "VariableNode"); } @@ -85,9 +86,10 @@ bool expectedMessage(const std::runtime_error& ex) return true; } -BOOST_FIXTURE_TEST_CASE(identifierNotFound, FixtureConvertVisitor) +BOOST_AUTO_TEST_CASE(identifierNotFound) { - ModelParser::Model model0{ + Registry registry; + ModelParser::Model model{ .id = "model0", .description = "description", .parameters = {{"param1", true, false}, {"param2", false, false}}, @@ -99,7 +101,7 @@ BOOST_FIXTURE_TEST_CASE(identifierNotFound, FixtureConvertVisitor) .objective = "objectives"}; std::string expression = "abc"; // not a param or var - BOOST_CHECK_EXCEPTION(ModelConverter::convertExpressionToNode(expression, registry, model0), + BOOST_CHECK_EXCEPTION(ModelConverter::convertExpressionToNode(expression, registry, model), std::runtime_error, expectedMessage); } @@ -173,9 +175,10 @@ BOOST_FIXTURE_TEST_CASE(comparison, FixtureConvertVisitor) BOOST_CHECK_EQUAL(toLiteral(nodeGreater->right())->value(), 27); } -BOOST_FIXTURE_TEST_CASE(medium_expression, FixtureConvertVisitor) +BOOST_AUTO_TEST_CASE(medium_expression) { - ModelParser::Model model0{ + Registry registry; + ModelParser::Model model{ .id = "model0", .description = "description", .parameters = {{"param1", true, false}, {"param2", false, false}}, @@ -186,7 +189,7 @@ BOOST_FIXTURE_TEST_CASE(medium_expression, FixtureConvertVisitor) .objective = "objectives"}; std::string expression = "(12 * (4 - 1) + param1) / -(42 + 3 + varP)"; - auto* n = ModelConverter::convertExpressionToNode(expression, registry, model0); + auto* n = ModelConverter::convertExpressionToNode(expression, registry, model); auto* param = registry.create("param1"); auto* var = registry.create("varP"); From 98b80e806b10478d066a5c161c2e3b6a5ae6ed71 Mon Sep 17 00:00:00 2001 From: Florian OMNES Date: Thu, 21 Nov 2024 16:39:04 +0100 Subject: [PATCH 83/92] Simplify model --- src/tests/src/solver/modelParser/testConvertorVisitor.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp index 4ca08489d0..82cfc1d013 100644 --- a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp +++ b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp @@ -92,9 +92,8 @@ BOOST_AUTO_TEST_CASE(identifierNotFound) ModelParser::Model model{ .id = "model0", .description = "description", - .parameters = {{"param1", true, false}, {"param2", false, false}}, - .variables = {{"varP", "7", "pmin", ModelParser::ValueType::CONTINUOUS}, - {"var2", "0", "param2", ModelParser::ValueType::CONTINUOUS}}, + .parameters = {{"param1", true, false}}, + .variables = {{"varP", "7", "pmin", ModelParser::ValueType::CONTINUOUS}}, .ports = {}, .port_field_definitions = {}, .constraints = {}, From 1bb18743ce72200fdd8938afbbb732d15d6d8822 Mon Sep 17 00:00:00 2001 From: Florian OMNES Date: Thu, 21 Nov 2024 17:01:15 +0100 Subject: [PATCH 84/92] Adapt fixture --- .../modelParser/testConvertorVisitor.cpp | 73 ++++++++++++------- 1 file changed, 47 insertions(+), 26 deletions(-) diff --git a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp index 82cfc1d013..01b82527ae 100644 --- a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp +++ b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp @@ -30,10 +30,30 @@ using namespace Antares::Solver; -struct FixtureConvertVisitor +class ExpressionToNodeConvertor { - ModelParser::Model model; - Registry registry; +public: + ExpressionToNodeConvertor(ModelParser::Model&& model): + model_(std::move(model)) + { + } + + // Empty model + ExpressionToNodeConvertor() = default; + + Nodes::Node* run(const std::string& input) + { + return ModelConverter::convertExpressionToNode(input, registry_, model_); + } + + Registry& registry() + { + return registry_; + } + +private: + Registry registry_; + const ModelParser::Model model_; }; static Nodes::LiteralNode* toLiteral(Nodes::Node* n) @@ -41,25 +61,23 @@ static Nodes::LiteralNode* toLiteral(Nodes::Node* n) return dynamic_cast(n); } -BOOST_FIXTURE_TEST_CASE(empty_expression, FixtureConvertVisitor) +BOOST_FIXTURE_TEST_CASE(empty_expression, ExpressionToNodeConvertor) { - auto* node = ModelConverter::convertExpressionToNode("", registry, model); - BOOST_CHECK_EQUAL(node, nullptr); + BOOST_CHECK_EQUAL(run(""), nullptr); } -BOOST_FIXTURE_TEST_CASE(negation, FixtureConvertVisitor) +BOOST_FIXTURE_TEST_CASE(negation, ExpressionToNodeConvertor) { std::string expression = "-7"; - auto* n = ModelConverter::convertExpressionToNode(expression, registry, model); + Nodes::Node* n = run(expression); BOOST_CHECK_EQUAL(n->name(), "NegationNode"); auto* nodeNeg = dynamic_cast(n); BOOST_REQUIRE(nodeNeg); BOOST_CHECK_EQUAL(toLiteral(nodeNeg->child())->value(), 7); } -BOOST_AUTO_TEST_CASE(identifier) +BOOST_FIXTURE_TEST_CASE(identifier, ExpressionToNodeConvertor) { - Registry registry; ModelParser::Model model{ .id = "model0", .description = "description", @@ -71,11 +89,11 @@ BOOST_AUTO_TEST_CASE(identifier) .objective = "objectives"}; std::string expression = "param1"; - auto* n = ModelConverter::convertExpressionToNode(expression, registry, model); + Nodes::Node* n = run(expression); BOOST_CHECK_EQUAL(n->name(), "ParameterNode"); expression = "varP"; - n = ModelConverter::convertExpressionToNode(expression, registry, model); + n = run(expression); BOOST_CHECK_EQUAL(n->name(), "VariableNode"); } @@ -105,10 +123,10 @@ BOOST_AUTO_TEST_CASE(identifierNotFound) expectedMessage); } -BOOST_FIXTURE_TEST_CASE(addTwoLiterals, FixtureConvertVisitor) +BOOST_FIXTURE_TEST_CASE(addTwoLiterals, ExpressionToNodeConvertor) { const std::string expression = "1 + 2"; - auto* n = ModelConverter::convertExpressionToNode(expression, registry, model); + Nodes::Node* n = run(expression); BOOST_CHECK_EQUAL(n->name(), "SumNode"); auto* nodeSum = dynamic_cast(n); @@ -118,10 +136,10 @@ BOOST_FIXTURE_TEST_CASE(addTwoLiterals, FixtureConvertVisitor) BOOST_CHECK_EQUAL(toLiteral(operands[1])->value(), 2); } -BOOST_FIXTURE_TEST_CASE(subtractTwoLiterals, FixtureConvertVisitor) +BOOST_FIXTURE_TEST_CASE(subtractTwoLiterals, ExpressionToNodeConvertor) { const std::string expression = "6 - 3"; - auto* n = ModelConverter::convertExpressionToNode(expression, registry, model); + Nodes::Node* n = run(expression); BOOST_CHECK_EQUAL(n->name(), "SubtractionNode"); auto* nodeSub = dynamic_cast(n); @@ -130,10 +148,10 @@ BOOST_FIXTURE_TEST_CASE(subtractTwoLiterals, FixtureConvertVisitor) BOOST_CHECK_EQUAL(toLiteral(nodeSub->right())->value(), 3); } -BOOST_FIXTURE_TEST_CASE(multiplyTwoLiterals, FixtureConvertVisitor) +BOOST_FIXTURE_TEST_CASE(multiplyTwoLiterals, ExpressionToNodeConvertor) { std::string expression = "1 * 2"; - auto* n = ModelConverter::convertExpressionToNode(expression, registry, model); + Nodes::Node* n = run(expression); BOOST_CHECK_EQUAL(n->name(), "MultiplicationNode"); auto* nodeMult = dynamic_cast(n); @@ -142,10 +160,10 @@ BOOST_FIXTURE_TEST_CASE(multiplyTwoLiterals, FixtureConvertVisitor) BOOST_CHECK_EQUAL(toLiteral(nodeMult->right())->value(), 2); } -BOOST_FIXTURE_TEST_CASE(divideTwoLiterals, FixtureConvertVisitor) +BOOST_FIXTURE_TEST_CASE(divideTwoLiterals, ExpressionToNodeConvertor) { const std::string expression = "6 / 3"; - auto* n = ModelConverter::convertExpressionToNode(expression, registry, model); + Nodes::Node* n = run(expression); BOOST_CHECK_EQUAL(n->name(), "DivisionNode"); auto* nodeDiv = dynamic_cast(n); @@ -154,18 +172,18 @@ BOOST_FIXTURE_TEST_CASE(divideTwoLiterals, FixtureConvertVisitor) BOOST_CHECK_EQUAL(toLiteral(nodeDiv->right())->value(), 3); } -BOOST_FIXTURE_TEST_CASE(comparison, FixtureConvertVisitor) +BOOST_FIXTURE_TEST_CASE(comparison, ExpressionToNodeConvertor) { std::string expression = "1 = 2"; - auto* n = ModelConverter::convertExpressionToNode(expression, registry, model); + auto* n = run(expression); BOOST_CHECK_EQUAL(n->name(), "EqualNode"); expression = "1 <= 5"; - n = ModelConverter::convertExpressionToNode(expression, registry, model); + n = run(expression); BOOST_CHECK_EQUAL(n->name(), "LessThanOrEqualNode"); expression = "8364 >= 27"; - n = ModelConverter::convertExpressionToNode(expression, registry, model); + n = run(expression); BOOST_CHECK_EQUAL(n->name(), "GreaterThanOrEqualNode"); auto* nodeGreater = dynamic_cast(n); @@ -176,7 +194,6 @@ BOOST_FIXTURE_TEST_CASE(comparison, FixtureConvertVisitor) BOOST_AUTO_TEST_CASE(medium_expression) { - Registry registry; ModelParser::Model model{ .id = "model0", .description = "description", @@ -187,8 +204,12 @@ BOOST_AUTO_TEST_CASE(medium_expression) .constraints = {}, .objective = "objectives"}; + ExpressionToNodeConvertor converter(std::move(model)); std::string expression = "(12 * (4 - 1) + param1) / -(42 + 3 + varP)"; - auto* n = ModelConverter::convertExpressionToNode(expression, registry, model); + Nodes::Node* n = converter.run(expression); + + // NOTE : we don't need this registry, any registry could work + Registry& registry = converter.registry(); auto* param = registry.create("param1"); auto* var = registry.create("varP"); From 4b94fd50b91e393e2d813cf8f19f0203b2cbf8e3 Mon Sep 17 00:00:00 2001 From: Florian OMNES Date: Thu, 21 Nov 2024 17:42:38 +0100 Subject: [PATCH 85/92] Fix --- src/solver/modelConverter/convertorVisitor.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index dd4ec4f5f8..f99fc23f68 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -65,7 +65,10 @@ std::any ConvertorVisitor::visit(antlr4::tree::ParseTree* tree) class NoParameterOrVariableWithThisName: public std::runtime_error { public: - using std::runtime_error::runtime_error; + NoParameterOrVariableWithThisName(const std::string& name): + runtime_error("No parameter or variable found for this identifier: " + name) + { + } }; std::any ConvertorVisitor::visitIdentifier(ExprParser::IdentifierContext* context) From 4746079b0103dd48ebde9dcadbc0e503fa0b82f8 Mon Sep 17 00:00:00 2001 From: Florian OMNES Date: Thu, 21 Nov 2024 17:46:52 +0100 Subject: [PATCH 86/92] Fix `identifier` test case --- src/tests/src/solver/modelParser/testConvertorVisitor.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp index 01b82527ae..d0eb54d716 100644 --- a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp +++ b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp @@ -76,7 +76,7 @@ BOOST_FIXTURE_TEST_CASE(negation, ExpressionToNodeConvertor) BOOST_CHECK_EQUAL(toLiteral(nodeNeg->child())->value(), 7); } -BOOST_FIXTURE_TEST_CASE(identifier, ExpressionToNodeConvertor) +BOOST_AUTO_TEST_CASE(identifier) { ModelParser::Model model{ .id = "model0", @@ -87,13 +87,14 @@ BOOST_FIXTURE_TEST_CASE(identifier, ExpressionToNodeConvertor) .port_field_definitions = {}, .constraints = {}, .objective = "objectives"}; + ExpressionToNodeConvertor converter(std::move(model)); std::string expression = "param1"; - Nodes::Node* n = run(expression); + Nodes::Node* n = converter.run(expression); BOOST_CHECK_EQUAL(n->name(), "ParameterNode"); expression = "varP"; - n = run(expression); + n = converter.run(expression); BOOST_CHECK_EQUAL(n->name(), "VariableNode"); } From 63136e76430d967ef4dff42b6a7c09e210bcec51 Mon Sep 17 00:00:00 2001 From: Florian OMNES Date: Fri, 22 Nov 2024 14:48:29 +0100 Subject: [PATCH 87/92] Sonar --- .../modelConverter/convertorVisitor.cpp | 53 +++++++++---------- src/solver/modelConverter/modelConverter.cpp | 10 +--- 2 files changed, 26 insertions(+), 37 deletions(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index f99fc23f68..18786b5e46 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -65,7 +65,7 @@ std::any ConvertorVisitor::visit(antlr4::tree::ParseTree* tree) class NoParameterOrVariableWithThisName: public std::runtime_error { public: - NoParameterOrVariableWithThisName(const std::string& name): + explicit NoParameterOrVariableWithThisName(const std::string& name): runtime_error("No parameter or variable found for this identifier: " + name) { } @@ -109,7 +109,7 @@ std::any ConvertorVisitor::visitFullexpr(ExprParser::FullexprContext* context) std::any ConvertorVisitor::visitNegation(ExprParser::NegationContext* context) { - auto n = std::any_cast(context->expr()->accept(this)); + Node* n = std::any_cast(context->expr()->accept(this)); return static_cast(registry_.create(n)); } @@ -120,8 +120,8 @@ std::any ConvertorVisitor::visitExpression(ExprParser::ExpressionContext* contex std::any ConvertorVisitor::visitComparison(ExprParser::ComparisonContext* context) { - auto* left = std::any_cast(visit(context->expr(0))); - auto* right = std::any_cast(visit(context->expr(1))); + Node* left = std::any_cast(visit(context->expr(0))); + Node* right = std::any_cast(visit(context->expr(1))); std::string op = context->COMPARISON()->getText(); if (op == "=") @@ -140,18 +140,24 @@ std::any ConvertorVisitor::visitComparison(ExprParser::ComparisonContext* contex std::any ConvertorVisitor::visitAddsub(ExprParser::AddsubContext* context) { - auto* left = std::any_cast(visit(context->expr(0))); - auto* right = std::any_cast(visit(context->expr(1))); + Node* left = std::any_cast(visit(context->expr(0))); + Node* right = std::any_cast(visit(context->expr(1))); std::string op = context->op->getText(); return (op == "+") ? static_cast(registry_.create(left, right)) : static_cast(registry_.create(left, right)); } +class NotImplemented: public std::runtime_error +{ +public: + using std::runtime_error::runtime_error; +}; + // TODO implement this std::any ConvertorVisitor::visitPortField([[maybe_unused]] ExprParser::PortFieldContext* context) { - throw std::runtime_error(std::string("Node portfield not implemented yet")); + throw NotImplemented("Node portfield not implemented yet"); return std::any(); } @@ -164,36 +170,31 @@ std::any ConvertorVisitor::visitNumber(ExprParser::NumberContext* context) // TODO implement this std::any ConvertorVisitor::visitTimeIndex([[maybe_unused]] ExprParser::TimeIndexContext* context) { - throw std::runtime_error(std::string("Node time index not implemented yet")); - return std::any(); + throw NotImplemented("Node time index not implemented yet"); } // TODO implement this std::any ConvertorVisitor::visitTimeShift([[maybe_unused]] ExprParser::TimeShiftContext* context) { - throw std::runtime_error(std::string("Node time shift not implemented yet")); - return std::any(); + throw NotImplemented("Node time shift not implemented yet"); } // TODO implement this std::any ConvertorVisitor::visitFunction([[maybe_unused]] ExprParser::FunctionContext* context) { - throw std::runtime_error(std::string("Node function not implemented yet")); - return std::any(); + throw NotImplemented("Node function not implemented yet"); } // TODO implement this std::any ConvertorVisitor::visitTimeSum([[maybe_unused]] ExprParser::TimeSumContext* context) { - throw std::runtime_error(std::string("Node time sum not implemented yet")); - return std::any(); + throw NotImplemented("Node time sum not implemented yet"); } // TODO implement this std::any ConvertorVisitor::visitAllTimeSum([[maybe_unused]] ExprParser::AllTimeSumContext* context) { - throw std::runtime_error(std::string("Node all time sum not implemented yet")); - return std::any(); + throw NotImplemented("Node all time sum not implemented yet"); } // shift related, not tested @@ -215,47 +216,41 @@ std::any ConvertorVisitor::visitUnsignedAtom(ExprParser::UnsignedAtomContext* co // TODO implement this std::any ConvertorVisitor::visitRightAtom([[maybe_unused]] ExprParser::RightAtomContext* context) { - throw std::runtime_error(std::string("Node right atom not implemented yet")); - return std::any(); + throw NotImplemented("Node right atom not implemented yet"); } // TODO implement this std::any ConvertorVisitor::visitShift([[maybe_unused]] ExprParser::ShiftContext* context) { - throw std::runtime_error(std::string("Node shift not implemented yet")); - return std::any(); + throw NotImplemented("Node shift not implemented yet"); } // TODO implement this std::any ConvertorVisitor::visitShiftAddsub( [[maybe_unused]] ExprParser::ShiftAddsubContext* context) { - throw std::runtime_error(std::string("Node shift add sub not implemented yet")); - return std::any(); + throw NotImplemented("Node shift add sub not implemented yet"); } // TODO implement this std::any ConvertorVisitor::visitShiftMuldiv( [[maybe_unused]] ExprParser::ShiftMuldivContext* context) { - throw std::runtime_error(std::string("Node shift mul div not implemented yet")); - return std::any(); + throw NotImplemented("Node shift mul div not implemented yet"); } // TODO implement this std::any ConvertorVisitor::visitRightMuldiv( [[maybe_unused]] ExprParser::RightMuldivContext* context) { - throw std::runtime_error(std::string("Node right mul div not implemented yet")); - return std::any(); + throw NotImplemented("Node right mul div not implemented yet"); } // TODO implement this std::any ConvertorVisitor::visitSignedExpression( [[maybe_unused]] ExprParser::SignedExpressionContext* context) { - throw std::runtime_error(std::string("Node signed expression not implemented yet")); - return std::any(); + throw NotImplemented("Node signed expression not implemented yet"); } std::any ConvertorVisitor::visitRightExpression(ExprParser::RightExpressionContext* context) diff --git a/src/solver/modelConverter/modelConverter.cpp b/src/solver/modelConverter/modelConverter.cpp index 2ddb036224..10c6c399b9 100644 --- a/src/solver/modelConverter/modelConverter.cpp +++ b/src/solver/modelConverter/modelConverter.cpp @@ -142,15 +142,9 @@ std::vector convertVariables(const ModelP * \return A vector of SystemModel::Constraint objects. */ std::vector convertPorts( - const Antares::Solver::ModelParser::Model& model) + [[maybe_unused]] const Antares::Solver::ModelParser::Model& model) { - std::vector ports; - // TODO - // for (const auto& port: model.ports) - // { - // ports.emplace_back(Antares::Study::SystemModel::Port{port.name, port.type}); - // } - return ports; + return {}; } std::vector convertConstraints( From df22fc0bb754647911099d19cae9c6a2d43e21d1 Mon Sep 17 00:00:00 2001 From: Florian OMNES Date: Fri, 22 Nov 2024 15:25:58 +0100 Subject: [PATCH 88/92] Fix --- src/solver/modelConverter/convertorVisitor.cpp | 1 - src/solver/modelConverter/modelConverter.cpp | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index 18786b5e46..b81c7bfb10 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -158,7 +158,6 @@ class NotImplemented: public std::runtime_error std::any ConvertorVisitor::visitPortField([[maybe_unused]] ExprParser::PortFieldContext* context) { throw NotImplemented("Node portfield not implemented yet"); - return std::any(); } std::any ConvertorVisitor::visitNumber(ExprParser::NumberContext* context) diff --git a/src/solver/modelConverter/modelConverter.cpp b/src/solver/modelConverter/modelConverter.cpp index 10c6c399b9..0795be8763 100644 --- a/src/solver/modelConverter/modelConverter.cpp +++ b/src/solver/modelConverter/modelConverter.cpp @@ -184,7 +184,7 @@ std::vector convertModels( model, registry); - auto nodeObjective = convertExpressionToNode(model.objective, registry, model); + auto* nodeObjective = convertExpressionToNode(model.objective, registry, model); auto modelObj = modelBuilder.withId(model.id) .withObjective( From 4bb7cc50832aeee96ab453a6ab3464d908c36bc4 Mon Sep 17 00:00:00 2001 From: Florian OMNES Date: Fri, 22 Nov 2024 15:32:38 +0100 Subject: [PATCH 89/92] Fix headers --- src/solver/modelConverter/convertorVisitor.cpp | 1 + .../include/antares/solver/modelConverter/convertorVisitor.h | 2 +- src/tests/src/solver/modelParser/testConvertorVisitor.cpp | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index b81c7bfb10..b0999d925f 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -19,6 +19,7 @@ * along with Antares_Simulator. If not, see . */ +#include #include #include "ExprLexer.h" diff --git a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h index 9d354ac2cc..01077c2634 100644 --- a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h +++ b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h @@ -24,7 +24,7 @@ #include #include -#include +#include #include "antares/solver/modelParser/Library.h" namespace Antares::Solver::ModelConverter diff --git a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp index d0eb54d716..3acb4bcfcb 100644 --- a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp +++ b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp @@ -22,6 +22,7 @@ #include +#include #include "antares/solver/expressions/Registry.hxx" #include "antares/solver/expressions/visitors/CompareVisitor.h" #include "antares/solver/modelConverter/convertorVisitor.h" From 3e01802f13284c17f71072a32e613d4b693fe0df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20Omn=C3=A8s?= Date: Fri, 22 Nov 2024 16:29:55 +0100 Subject: [PATCH 90/92] Don't pass a registry to ModelConverter::convert (#2501) --- src/solver/expressions/CMakeLists.txt | 2 + src/solver/expressions/NodeRegistry.cpp | 14 +++ .../antares/solver/expressions/NodeRegistry.h | 21 ++++ .../antares/solver/expressions/Registry.hxx | 7 +- .../modelConverter/convertorVisitor.cpp | 12 +- .../solver/modelConverter/convertorVisitor.h | 7 +- .../solver/modelConverter/modelConverter.h | 5 +- src/solver/modelConverter/modelConverter.cpp | 40 +++---- src/study/system-model/CMakeLists.txt | 1 + .../antares/study/system-model/constraint.h | 2 +- .../antares/study/system-model/expression.h | 8 +- .../antares/study/system-model/library.h | 12 +- .../antares/study/system-model/model.h | 12 +- .../antares/study/system-model/variable.h | 8 +- src/study/system-model/library.cpp | 4 +- src/study/system-model/model.cpp | 6 +- .../modelParser/testConvertorVisitor.cpp | 107 +++++++++--------- .../modelParser/testModelTranslator.cpp | 21 ++-- .../src/solver/modelParser/test_full.cpp | 3 +- 19 files changed, 161 insertions(+), 131 deletions(-) create mode 100644 src/solver/expressions/NodeRegistry.cpp create mode 100644 src/solver/expressions/include/antares/solver/expressions/NodeRegistry.h diff --git a/src/solver/expressions/CMakeLists.txt b/src/solver/expressions/CMakeLists.txt index f495ffebbb..58643f6529 100644 --- a/src/solver/expressions/CMakeLists.txt +++ b/src/solver/expressions/CMakeLists.txt @@ -25,6 +25,8 @@ set(SRC_Expressions hashable.cpp + NodeRegistry.cpp + include/antares/solver/expressions/NodeRegistry.h include/antares/solver/expressions/nodes/SumNode.h include/antares/solver/expressions/nodes/BinaryNode.h include/antares/solver/expressions/nodes/ComparisonNode.h diff --git a/src/solver/expressions/NodeRegistry.cpp b/src/solver/expressions/NodeRegistry.cpp new file mode 100644 index 0000000000..0fdbdea819 --- /dev/null +++ b/src/solver/expressions/NodeRegistry.cpp @@ -0,0 +1,14 @@ +#include +#include +#include + +namespace Antares::Solver +{ +NodeRegistry::NodeRegistry(Antares::Solver::Nodes::Node* node, + Antares::Solver::Registry registry): + node(node), + registry(std::move(registry)) +{ +} + +} // namespace Antares::Solver diff --git a/src/solver/expressions/include/antares/solver/expressions/NodeRegistry.h b/src/solver/expressions/include/antares/solver/expressions/NodeRegistry.h new file mode 100644 index 0000000000..223b2d7205 --- /dev/null +++ b/src/solver/expressions/include/antares/solver/expressions/NodeRegistry.h @@ -0,0 +1,21 @@ +#pragma once + +#include +#include + +namespace Antares::Solver +{ +struct NodeRegistry +{ + NodeRegistry() = default; + NodeRegistry(Antares::Solver::Nodes::Node* node, + Antares::Solver::Registry registry); + + // Shallow copy + NodeRegistry(NodeRegistry&&) = default; + NodeRegistry& operator=(NodeRegistry&&) = default; + + Antares::Solver::Nodes::Node* node; + Antares::Solver::Registry registry; +}; +} // namespace Antares::Solver diff --git a/src/solver/expressions/include/antares/solver/expressions/Registry.hxx b/src/solver/expressions/include/antares/solver/expressions/Registry.hxx index 2ccc9ff8fd..ba74974cb0 100644 --- a/src/solver/expressions/include/antares/solver/expressions/Registry.hxx +++ b/src/solver/expressions/include/antares/solver/expressions/Registry.hxx @@ -32,14 +32,16 @@ template class Registry { public: + Registry() = default; + Registry(Registry&&) = default; + Registry& operator=(Registry&&) = default; + // Method to create a new derived class object and add it to the registry template requires std::derived_from Derived* create(Args&&... args) { auto created = std::make_unique(std::forward(args)...); - - std::lock_guard lock(mutex_); registry_.push_back(std::move(created)); return dynamic_cast( registry_.back().get()); // Return the pointer to the newly created object @@ -48,6 +50,5 @@ public: private: std::vector> registry_; // Registry to manage dynamically allocated objects - std::mutex mutex_; }; } // namespace Antares::Solver diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index b0999d925f..762a5fa9e7 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -31,24 +31,22 @@ namespace Antares::Solver::ModelConverter using namespace Antares::Solver::Nodes; -Node* convertExpressionToNode(const std::string& exprStr, - Antares::Solver::Registry& registry, - const ModelParser::Model& model) +NodeRegistry convertExpressionToNode(const std::string& exprStr, const ModelParser::Model& model) { if (exprStr.empty()) { - return nullptr; + return {}; } - antlr4::ANTLRInputStream input(exprStr); ExprLexer lexer(&input); antlr4::CommonTokenStream tokens(&lexer); ExprParser parser(&tokens); ExprParser::ExprContext* tree = parser.expr(); - + Antares::Solver::Registry registry; ConvertorVisitor visitor(registry, model); - return std::any_cast(visitor.visit(tree)); + auto root = std::any_cast(visitor.visit(tree)); + return NodeRegistry(root, std::move(registry)); } ConvertorVisitor::ConvertorVisitor(Antares::Solver::Registry& registry, diff --git a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h index 01077c2634..e7af038abd 100644 --- a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h +++ b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h @@ -23,16 +23,13 @@ #include -#include -#include +#include #include "antares/solver/modelParser/Library.h" namespace Antares::Solver::ModelConverter { -Nodes::Node* convertExpressionToNode(const std::string& exprStr, - Registry& registry, - const ModelParser::Model& model); +NodeRegistry convertExpressionToNode(const std::string& exprStr, const ModelParser::Model& model); /// Visitor to convert ANTLR expressions to Antares::Solver::Nodes class ConvertorVisitor: public ExprVisitor diff --git a/src/solver/modelConverter/include/antares/solver/modelConverter/modelConverter.h b/src/solver/modelConverter/include/antares/solver/modelConverter/modelConverter.h index 790cfbf6e9..14b7ae2914 100644 --- a/src/solver/modelConverter/include/antares/solver/modelConverter/modelConverter.h +++ b/src/solver/modelConverter/include/antares/solver/modelConverter/modelConverter.h @@ -21,8 +21,6 @@ #pragma once -#include - namespace Antares { namespace Study::SystemModel @@ -43,6 +41,5 @@ class Node; namespace Antares::Solver::ModelConverter { -Antares::Study::SystemModel::Library convert(const Antares::Solver::ModelParser::Library& library, - Registry& registry); +Antares::Study::SystemModel::Library convert(const Antares::Solver::ModelParser::Library& library); } diff --git a/src/solver/modelConverter/modelConverter.cpp b/src/solver/modelConverter/modelConverter.cpp index 0795be8763..99171b420d 100644 --- a/src/solver/modelConverter/modelConverter.cpp +++ b/src/solver/modelConverter/modelConverter.cpp @@ -21,10 +21,6 @@ #include "antares/solver/modelConverter/modelConverter.h" -#include - -#include "antares/solver/expressions/Registry.hxx" -#include "antares/solver/expressions/nodes/Node.h" #include "antares/solver/modelConverter/convertorVisitor.h" #include "antares/solver/modelParser/Library.h" #include "antares/study/system-model/constraint.h" @@ -115,21 +111,21 @@ Antares::Study::SystemModel::ValueType convertType(Antares::Solver::ModelParser: * \param model The ModelParser::Model object containing ports. * \return A vector of SystemModel::Port objects. */ -std::vector convertVariables(const ModelParser::Model& model, - Registry& registry) +std::vector convertVariables(const ModelParser::Model& model) { std::vector variables; for (const auto& variable: model.variables) { Antares::Study::SystemModel::Expression lb(variable.lower_bound, convertExpressionToNode(variable.lower_bound, - registry, model)); Antares::Study::SystemModel::Expression ub(variable.upper_bound, convertExpressionToNode(variable.upper_bound, - registry, model)); - variables.emplace_back(variable.id, lb, ub, convertType(variable.variable_type)); + variables.emplace_back(variable.id, + std::move(lb), + std::move(ub), + convertType(variable.variable_type)); } return variables; @@ -148,16 +144,15 @@ std::vector convertPorts( } std::vector convertConstraints( - const Antares::Solver::ModelParser::Model& model, - Registry& registry) + const Antares::Solver::ModelParser::Model& model) { std::vector constraints; for (const auto& constraint: model.constraints) { - Nodes::Node* expr = convertExpressionToNode(constraint.expression, registry, model); + auto expr = convertExpressionToNode(constraint.expression, model); constraints.emplace_back(constraint.id, Antares::Study::SystemModel::Expression{constraint.expression, - expr}); + std::move(expr)}); } return constraints; } @@ -169,26 +164,24 @@ std::vector convertConstraints( * \return A vector of SystemModel::Model objects. */ std::vector convertModels( - const Antares::Solver::ModelParser::Library& library, - Registry& registry) + const Antares::Solver::ModelParser::Library& library) { std::vector models; for (const auto& model: library.models) { Antares::Study::SystemModel::ModelBuilder modelBuilder; std::vector parameters = convertParameters(model); - std::vector variables = convertVariables(model, - registry); + std::vector variables = convertVariables(model); std::vector ports = convertPorts(model); std::vector constraints = convertConstraints( - model, - registry); + model); - auto* nodeObjective = convertExpressionToNode(model.objective, registry, model); + auto nodeObjective = convertExpressionToNode(model.objective, model); auto modelObj = modelBuilder.withId(model.id) .withObjective( - Antares::Study::SystemModel::Expression{model.objective, nodeObjective}) + Antares::Study::SystemModel::Expression{model.objective, + std::move(nodeObjective)}) .withParameters(std::move(parameters)) .withVariables(std::move(variables)) .withPorts(std::move(ports)) @@ -205,12 +198,11 @@ std::vector convertModels( * \param library The ModelParser::Library object to convert. * \return The corresponding SystemModel::Library object. */ -Antares::Study::SystemModel::Library convert(const Antares::Solver::ModelParser::Library& library, - Registry& registry) +Antares::Study::SystemModel::Library convert(const Antares::Solver::ModelParser::Library& library) { Antares::Study::SystemModel::LibraryBuilder builder; std::vector portTypes = convertTypes(library); - std::vector models = convertModels(library, registry); + std::vector models = convertModels(library); Antares::Study::SystemModel::Library lib = builder.withId(library.id) .withDescription(library.description) .withPortTypes(std::move(portTypes)) diff --git a/src/study/system-model/CMakeLists.txt b/src/study/system-model/CMakeLists.txt index b497026127..e9a7348534 100644 --- a/src/study/system-model/CMakeLists.txt +++ b/src/study/system-model/CMakeLists.txt @@ -27,6 +27,7 @@ target_include_directories(antares-study-system-model ) target_link_libraries(antares-study-system-model PUBLIC + Antares::solver-expressions ) install(DIRECTORY include/antares DESTINATION "include" diff --git a/src/study/system-model/include/antares/study/system-model/constraint.h b/src/study/system-model/include/antares/study/system-model/constraint.h index eb7777f484..b4afe5c0ef 100644 --- a/src/study/system-model/include/antares/study/system-model/constraint.h +++ b/src/study/system-model/include/antares/study/system-model/constraint.h @@ -43,7 +43,7 @@ class Constraint return id_; } - Expression expression() const + const Expression& expression() const { return expression_; } diff --git a/src/study/system-model/include/antares/study/system-model/expression.h b/src/study/system-model/include/antares/study/system-model/expression.h index 2a7114cb7a..0b52d82f91 100644 --- a/src/study/system-model/include/antares/study/system-model/expression.h +++ b/src/study/system-model/include/antares/study/system-model/expression.h @@ -22,6 +22,8 @@ #include +#include + namespace Antares::Solver::Nodes { class Node; @@ -35,9 +37,9 @@ class Expression public: Expression() = default; - explicit Expression(const std::string& value, Antares::Solver::Nodes::Node* root): + explicit Expression(const std::string& value, Antares::Solver::NodeRegistry root): value_(value), - root_(root) + root_(std::move(root)) { } @@ -48,7 +50,7 @@ class Expression private: std::string value_; - Antares::Solver::Nodes::Node* root_; + Antares::Solver::NodeRegistry root_; }; } // namespace Antares::Study::SystemModel diff --git a/src/study/system-model/include/antares/study/system-model/library.h b/src/study/system-model/include/antares/study/system-model/library.h index a056731156..6643b24d22 100644 --- a/src/study/system-model/include/antares/study/system-model/library.h +++ b/src/study/system-model/include/antares/study/system-model/library.h @@ -33,7 +33,11 @@ namespace Antares::Study::SystemModel class Library { public: - Library() = default; + Library(): + models_(std::make_shared>()) + { + } + ~Library() = default; const std::string& Id() const @@ -53,7 +57,7 @@ class Library const std::unordered_map& Models() const { - return models_; + return *models_; } private: @@ -63,7 +67,7 @@ class Library std::string description_; std::unordered_map portTypes_; - std::unordered_map models_; + std::shared_ptr> models_; }; /** @@ -79,7 +83,7 @@ class LibraryBuilder LibraryBuilder& withPortTypes(std::vector&& portTypes); LibraryBuilder& withModels(std::vector&& models); - Library build(); + const Library& build() const; private: Library library_; diff --git a/src/study/system-model/include/antares/study/system-model/model.h b/src/study/system-model/include/antares/study/system-model/model.h index 8f19d424c1..a050424131 100644 --- a/src/study/system-model/include/antares/study/system-model/model.h +++ b/src/study/system-model/include/antares/study/system-model/model.h @@ -39,12 +39,20 @@ namespace Antares::Study::SystemModel class Model { public: + Model() = default; + Model(Model&&) = default; + Model(const Model&) = delete; + ~Model() = default; + + Model& operator=(Model&&) = default; + Model& operator=(const Model&) = delete; + const std::string& Id() const { return id_; } - Expression Objective() const + const Expression& Objective() const { return objective_; } @@ -84,7 +92,7 @@ class ModelBuilder { public: ModelBuilder& withId(std::string_view id); - ModelBuilder& withObjective(Expression objective); + ModelBuilder& withObjective(Expression&& objective); ModelBuilder& withParameters(std::vector&& parameters); ModelBuilder& withVariables(std::vector&& variables); ModelBuilder& withPorts(std::vector&& ports); diff --git a/src/study/system-model/include/antares/study/system-model/variable.h b/src/study/system-model/include/antares/study/system-model/variable.h index ad9011df79..451fbd2b90 100644 --- a/src/study/system-model/include/antares/study/system-model/variable.h +++ b/src/study/system-model/include/antares/study/system-model/variable.h @@ -35,8 +35,8 @@ class Variable Variable(std::string id, Expression lower_bound, Expression upper_bound, ValueType type): id_(std::move(id)), type_(type), - lowerBound_(lower_bound), - upperBound_(upper_bound) + lowerBound_(std::move(lower_bound)), + upperBound_(std::move(upper_bound)) { } @@ -50,12 +50,12 @@ class Variable return type_; } - Expression LowerBound() const + const Expression& LowerBound() const { return lowerBound_; } - Expression UpperBound() const + const Expression& UpperBound() const { return upperBound_; } diff --git a/src/study/system-model/library.cpp b/src/study/system-model/library.cpp index e7026afd86..ace09d45ae 100644 --- a/src/study/system-model/library.cpp +++ b/src/study/system-model/library.cpp @@ -83,7 +83,7 @@ LibraryBuilder& LibraryBuilder::withModels(std::vector&& models) { std::transform(models.begin(), models.end(), - std::inserter(library_.models_, library_.models_.end()), + std::inserter(*library_.models_, library_.models_->end()), [](/*Non const to prevent copy*/ Model& model) { return std::make_pair(model.Id(), std::move(model)); }); return *this; @@ -94,7 +94,7 @@ LibraryBuilder& LibraryBuilder::withModels(std::vector&& models) * * \return The constructed Library object. */ -Library LibraryBuilder::build() +const Library& LibraryBuilder::build() const { return library_; } diff --git a/src/study/system-model/model.cpp b/src/study/system-model/model.cpp index 5870840d73..fd77cb3cf2 100644 --- a/src/study/system-model/model.cpp +++ b/src/study/system-model/model.cpp @@ -36,7 +36,7 @@ namespace Antares::Study::SystemModel */ Model ModelBuilder::build() { - return model_; + return std::move(model_); } /** @@ -57,9 +57,9 @@ ModelBuilder& ModelBuilder::withId(std::string_view id) * \param objective The Expression object representing the objective. * \return Reference to the ModelBuilder object. */ -ModelBuilder& ModelBuilder::withObjective(Expression objective) +ModelBuilder& ModelBuilder::withObjective(Expression&& objective) { - model_.objective_ = objective; + model_.objective_ = std::move(objective); return *this; } diff --git a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp index 3acb4bcfcb..8eddcda921 100644 --- a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp +++ b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp @@ -26,34 +26,27 @@ #include "antares/solver/expressions/Registry.hxx" #include "antares/solver/expressions/visitors/CompareVisitor.h" #include "antares/solver/modelConverter/convertorVisitor.h" -#include "antares/solver/modelConverter/modelConverter.h" #include "antares/solver/modelParser/Library.h" using namespace Antares::Solver; -class ExpressionToNodeConvertor +class ExpressionToNodeConvertorEmptyModel { public: - ExpressionToNodeConvertor(ModelParser::Model&& model): + ExpressionToNodeConvertorEmptyModel(ModelParser::Model&& model): model_(std::move(model)) { } // Empty model - ExpressionToNodeConvertor() = default; + ExpressionToNodeConvertorEmptyModel() = default; - Nodes::Node* run(const std::string& input) + NodeRegistry run(const std::string& input) { - return ModelConverter::convertExpressionToNode(input, registry_, model_); - } - - Registry& registry() - { - return registry_; + return ModelConverter::convertExpressionToNode(input, model_); } private: - Registry registry_; const ModelParser::Model model_; }; @@ -62,17 +55,17 @@ static Nodes::LiteralNode* toLiteral(Nodes::Node* n) return dynamic_cast(n); } -BOOST_FIXTURE_TEST_CASE(empty_expression, ExpressionToNodeConvertor) +BOOST_FIXTURE_TEST_CASE(empty_expression, ExpressionToNodeConvertorEmptyModel) { - BOOST_CHECK_EQUAL(run(""), nullptr); + BOOST_CHECK_EQUAL(run("").node, nullptr); } -BOOST_FIXTURE_TEST_CASE(negation, ExpressionToNodeConvertor) +BOOST_FIXTURE_TEST_CASE(negation, ExpressionToNodeConvertorEmptyModel) { std::string expression = "-7"; - Nodes::Node* n = run(expression); - BOOST_CHECK_EQUAL(n->name(), "NegationNode"); - auto* nodeNeg = dynamic_cast(n); + auto expr = run(expression); + BOOST_CHECK_EQUAL(expr.node->name(), "NegationNode"); + auto* nodeNeg = dynamic_cast(expr.node); BOOST_REQUIRE(nodeNeg); BOOST_CHECK_EQUAL(toLiteral(nodeNeg->child())->value(), 7); } @@ -88,15 +81,19 @@ BOOST_AUTO_TEST_CASE(identifier) .port_field_definitions = {}, .constraints = {}, .objective = "objectives"}; - ExpressionToNodeConvertor converter(std::move(model)); + ExpressionToNodeConvertorEmptyModel converter(std::move(model)); - std::string expression = "param1"; - Nodes::Node* n = converter.run(expression); - BOOST_CHECK_EQUAL(n->name(), "ParameterNode"); + { + std::string expression = "param1"; + auto expr = converter.run(expression); + BOOST_CHECK_EQUAL(expr.node->name(), "ParameterNode"); + } - expression = "varP"; - n = converter.run(expression); - BOOST_CHECK_EQUAL(n->name(), "VariableNode"); + { + std::string expression = "varP"; + auto expr = converter.run(expression); + BOOST_CHECK_EQUAL(expr.node->name(), "VariableNode"); + } } bool expectedMessage(const std::runtime_error& ex) @@ -108,7 +105,6 @@ bool expectedMessage(const std::runtime_error& ex) BOOST_AUTO_TEST_CASE(identifierNotFound) { - Registry registry; ModelParser::Model model{ .id = "model0", .description = "description", @@ -120,75 +116,75 @@ BOOST_AUTO_TEST_CASE(identifierNotFound) .objective = "objectives"}; std::string expression = "abc"; // not a param or var - BOOST_CHECK_EXCEPTION(ModelConverter::convertExpressionToNode(expression, registry, model), + BOOST_CHECK_EXCEPTION(ModelConverter::convertExpressionToNode(expression, model), std::runtime_error, expectedMessage); } -BOOST_FIXTURE_TEST_CASE(addTwoLiterals, ExpressionToNodeConvertor) +BOOST_FIXTURE_TEST_CASE(addTwoLiterals, ExpressionToNodeConvertorEmptyModel) { const std::string expression = "1 + 2"; - Nodes::Node* n = run(expression); - BOOST_CHECK_EQUAL(n->name(), "SumNode"); + auto expr = run(expression); + BOOST_CHECK_EQUAL(expr.node->name(), "SumNode"); - auto* nodeSum = dynamic_cast(n); + auto* nodeSum = dynamic_cast(expr.node); BOOST_REQUIRE(nodeSum); auto operands = nodeSum->getOperands(); BOOST_CHECK_EQUAL(toLiteral(operands[0])->value(), 1); BOOST_CHECK_EQUAL(toLiteral(operands[1])->value(), 2); } -BOOST_FIXTURE_TEST_CASE(subtractTwoLiterals, ExpressionToNodeConvertor) +BOOST_FIXTURE_TEST_CASE(subtractTwoLiterals, ExpressionToNodeConvertorEmptyModel) { const std::string expression = "6 - 3"; - Nodes::Node* n = run(expression); - BOOST_CHECK_EQUAL(n->name(), "SubtractionNode"); + auto expr = run(expression); + BOOST_CHECK_EQUAL(expr.node->name(), "SubtractionNode"); - auto* nodeSub = dynamic_cast(n); + auto* nodeSub = dynamic_cast(expr.node); BOOST_REQUIRE(nodeSub); BOOST_CHECK_EQUAL(toLiteral(nodeSub->left())->value(), 6); BOOST_CHECK_EQUAL(toLiteral(nodeSub->right())->value(), 3); } -BOOST_FIXTURE_TEST_CASE(multiplyTwoLiterals, ExpressionToNodeConvertor) +BOOST_FIXTURE_TEST_CASE(multiplyTwoLiterals, ExpressionToNodeConvertorEmptyModel) { std::string expression = "1 * 2"; - Nodes::Node* n = run(expression); - BOOST_CHECK_EQUAL(n->name(), "MultiplicationNode"); + auto expr = run(expression); + BOOST_CHECK_EQUAL(expr.node->name(), "MultiplicationNode"); - auto* nodeMult = dynamic_cast(n); + auto* nodeMult = dynamic_cast(expr.node); BOOST_REQUIRE(nodeMult); BOOST_CHECK_EQUAL(toLiteral(nodeMult->left())->value(), 1); BOOST_CHECK_EQUAL(toLiteral(nodeMult->right())->value(), 2); } -BOOST_FIXTURE_TEST_CASE(divideTwoLiterals, ExpressionToNodeConvertor) +BOOST_FIXTURE_TEST_CASE(divideTwoLiterals, ExpressionToNodeConvertorEmptyModel) { const std::string expression = "6 / 3"; - Nodes::Node* n = run(expression); - BOOST_CHECK_EQUAL(n->name(), "DivisionNode"); + auto expr = run(expression); + BOOST_CHECK_EQUAL(expr.node->name(), "DivisionNode"); - auto* nodeDiv = dynamic_cast(n); + auto* nodeDiv = dynamic_cast(expr.node); BOOST_REQUIRE(nodeDiv); BOOST_CHECK_EQUAL(toLiteral(nodeDiv->left())->value(), 6); BOOST_CHECK_EQUAL(toLiteral(nodeDiv->right())->value(), 3); } -BOOST_FIXTURE_TEST_CASE(comparison, ExpressionToNodeConvertor) +BOOST_FIXTURE_TEST_CASE(comparison, ExpressionToNodeConvertorEmptyModel) { std::string expression = "1 = 2"; - auto* n = run(expression); - BOOST_CHECK_EQUAL(n->name(), "EqualNode"); + auto expr = run(expression); + BOOST_CHECK_EQUAL(expr.node->name(), "EqualNode"); expression = "1 <= 5"; - n = run(expression); - BOOST_CHECK_EQUAL(n->name(), "LessThanOrEqualNode"); + expr = run(expression); + BOOST_CHECK_EQUAL(expr.node->name(), "LessThanOrEqualNode"); expression = "8364 >= 27"; - n = run(expression); - BOOST_CHECK_EQUAL(n->name(), "GreaterThanOrEqualNode"); + expr = run(expression); + BOOST_CHECK_EQUAL(expr.node->name(), "GreaterThanOrEqualNode"); - auto* nodeGreater = dynamic_cast(n); + auto* nodeGreater = dynamic_cast(expr.node); BOOST_REQUIRE(nodeGreater); BOOST_CHECK_EQUAL(toLiteral(nodeGreater->left())->value(), 8364); BOOST_CHECK_EQUAL(toLiteral(nodeGreater->right())->value(), 27); @@ -206,12 +202,11 @@ BOOST_AUTO_TEST_CASE(medium_expression) .constraints = {}, .objective = "objectives"}; - ExpressionToNodeConvertor converter(std::move(model)); + ExpressionToNodeConvertorEmptyModel converter(std::move(model)); std::string expression = "(12 * (4 - 1) + param1) / -(42 + 3 + varP)"; - Nodes::Node* n = converter.run(expression); + auto expr = converter.run(expression); - // NOTE : we don't need this registry, any registry could work - Registry& registry = converter.registry(); + Registry registry; auto* param = registry.create("param1"); auto* var = registry.create("varP"); @@ -229,5 +224,5 @@ BOOST_AUTO_TEST_CASE(medium_expression) auto* div = registry.create(sum1, neg); Visitors::CompareVisitor cmp; - BOOST_CHECK(cmp.dispatch(n, div)); + BOOST_CHECK(cmp.dispatch(expr.node, div)); } diff --git a/src/tests/src/solver/modelParser/testModelTranslator.cpp b/src/tests/src/solver/modelParser/testModelTranslator.cpp index 3121b18721..9233b90767 100644 --- a/src/tests/src/solver/modelParser/testModelTranslator.cpp +++ b/src/tests/src/solver/modelParser/testModelTranslator.cpp @@ -37,13 +37,12 @@ using namespace Antares::Study; struct Fixture { ModelParser::Library library; - Registry registry; }; // Test empty library BOOST_FIXTURE_TEST_CASE(Empty_library_is_valid, Fixture) { - SystemModel::Library lib = ModelConverter::convert(library, registry); + SystemModel::Library lib = ModelConverter::convert(library); BOOST_CHECK(lib.Id().empty()); BOOST_CHECK(lib.Description().empty()); BOOST_CHECK(lib.PortTypes().empty()); @@ -56,7 +55,7 @@ BOOST_FIXTURE_TEST_CASE(library_id_description_properly_translated, Fixture) { library.id = "test_id"; library.description = "test_description"; - SystemModel::Library lib = ModelConverter::convert(library, registry); + SystemModel::Library lib = ModelConverter::convert(library); BOOST_CHECK_EQUAL(lib.Id(), "test_id"); BOOST_CHECK_EQUAL(lib.Description(), "test_description"); } @@ -67,7 +66,7 @@ BOOST_FIXTURE_TEST_CASE(port_type_with_empty_fileds_properly_translated, Fixture ModelParser::PortType portType1{"port1", "flow port", {}}; ModelParser::PortType portType2{"port2", "impedance port", {}}; library.port_types = {portType1, portType2}; - SystemModel::Library lib = ModelConverter::convert(library, registry); + SystemModel::Library lib = ModelConverter::convert(library); BOOST_REQUIRE_EQUAL(lib.PortTypes().size(), 2); BOOST_CHECK_EQUAL(lib.PortTypes().at("port1").Id(), "port1"); BOOST_CHECK_EQUAL(lib.PortTypes().at("port1").Description(), "flow port"); @@ -90,7 +89,7 @@ BOOST_FIXTURE_TEST_CASE(portType_with_fields_properly_translated, Fixture) ModelParser::PortType portType1{"port1", "flow port", {"field1", "field2"}}; ModelParser::PortType portType2{"port2", "impedance port", {"field3", "field4"}}; library.port_types = {portType1, portType2}; - SystemModel::Library lib = ModelConverter::convert(library, registry); + SystemModel::Library lib = ModelConverter::convert(library); BOOST_REQUIRE_EQUAL(lib.PortTypes().at("port1").Fields().size(), 2); BOOST_CHECK_EQUAL(lib.PortTypes().at("port1").Fields()[0].Id(), "field1"); BOOST_CHECK_EQUAL(lib.PortTypes().at("port1").Fields()[1].Id(), "field2"); @@ -111,7 +110,7 @@ BOOST_FIXTURE_TEST_CASE(empty_model_properly_translated, Fixture) .constraints = {}, .objective = "param1"}; library.models = {model1}; - SystemModel::Library lib = ModelConverter::convert(library, registry); + SystemModel::Library lib = ModelConverter::convert(library); BOOST_REQUIRE_EQUAL(lib.Models().size(), 1); BOOST_CHECK_EQUAL(lib.Models().at("model1").Id(), "model1"); BOOST_CHECK_EQUAL(lib.Models().at("model1").Objective().Value(), "param1"); @@ -129,7 +128,7 @@ BOOST_FIXTURE_TEST_CASE(model_parameters_properly_translated, Fixture) .constraints{}, .objective = ""}; library.models = {model1}; - SystemModel::Library lib = ModelConverter::convert(library, registry); + SystemModel::Library lib = ModelConverter::convert(library); auto& model = lib.Models().at("model1"); BOOST_REQUIRE_EQUAL(model.Parameters().size(), 2); auto& parameter1 = model.Parameters().at("param1"); @@ -156,7 +155,7 @@ BOOST_FIXTURE_TEST_CASE(model_variables_properly_translated, Fixture) .constraints = {}, .objective = "var1"}; library.models = {model1}; - SystemModel::Library lib = ModelConverter::convert(library, registry); + SystemModel::Library lib = ModelConverter::convert(library); auto& model = lib.Models().at("model1"); BOOST_REQUIRE_EQUAL(model.Variables().size(), 2); auto& variable1 = model.Variables().at("var1"); @@ -185,7 +184,7 @@ BOOST_AUTO_TEST_CASE(model_ports_properly_translated, *boost::unit_test::disable .constraints = {}, .objective = ""}; library.models = {model1}; - SystemModel::Library lib = ModelConverter::convert(library, registry); + SystemModel::Library lib = ModelConverter::convert(library); [[maybe_unused]] auto& model = lib.Models().at("model1"); // BOOST_REQUIRE_EQUAL(model.Ports().size(), 2); // auto& port1 = model.Ports().at("port1"); @@ -210,7 +209,7 @@ BOOST_FIXTURE_TEST_CASE(model_constraints_properly_translated, Fixture) {"constraint2", "expression2"}}, .objective = ""}; library.models = {model1}; - SystemModel::Library lib = ModelConverter::convert(library, registry); + SystemModel::Library lib = ModelConverter::convert(library); auto& model = lib.Models().at("model1"); BOOST_REQUIRE_EQUAL(model.getConstraints().size(), 2); auto& constraint1 = model.getConstraints().at("constraint1"); @@ -244,7 +243,7 @@ BOOST_FIXTURE_TEST_CASE(multiple_models_properly_translated, Fixture) .constraints = {}, .objective = ""}; library.models = {model1, model2}; - SystemModel::Library lib = ModelConverter::convert(library, registry); + SystemModel::Library lib = ModelConverter::convert(library); BOOST_REQUIRE_EQUAL(lib.Models().size(), 2); auto& modelo1 = lib.Models().at("model1"); BOOST_REQUIRE_EQUAL(modelo1.Parameters().size(), 2); diff --git a/src/tests/src/solver/modelParser/test_full.cpp b/src/tests/src/solver/modelParser/test_full.cpp index 2ba554c0d7..4901fa610b 100644 --- a/src/tests/src/solver/modelParser/test_full.cpp +++ b/src/tests/src/solver/modelParser/test_full.cpp @@ -260,10 +260,9 @@ BOOST_AUTO_TEST_CASE(test_full) try { - Registry registry; ModelParser::Parser parser; ModelParser::Library libraryObj = parser.parse(library); - SystemModel::Library lib = ModelConverter::convert(libraryObj, registry); + SystemModel::Library lib = ModelConverter::convert(libraryObj); BOOST_CHECK_EQUAL(lib.Id(), "basic"); BOOST_CHECK_EQUAL(lib.Description(), "Basic library"); From d96351773a8b99ecf68f50681507ef421fa1c1df Mon Sep 17 00:00:00 2001 From: Florian OMNES <26088210+flomnes@users.noreply.github.com> Date: Mon, 25 Nov 2024 10:17:46 +0100 Subject: [PATCH 91/92] Code smells --- .../include/antares/solver/expressions/NodeRegistry.h | 3 ++- src/solver/modelConverter/convertorVisitor.cpp | 2 +- .../antares/solver/modelConverter/modelConverter.h | 11 ++++++++++- src/solver/modelConverter/modelConverter.cpp | 10 +++++++--- .../include/antares/study/system-model/library.h | 9 +++------ 5 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/solver/expressions/include/antares/solver/expressions/NodeRegistry.h b/src/solver/expressions/include/antares/solver/expressions/NodeRegistry.h index 223b2d7205..994b8f6886 100644 --- a/src/solver/expressions/include/antares/solver/expressions/NodeRegistry.h +++ b/src/solver/expressions/include/antares/solver/expressions/NodeRegistry.h @@ -5,8 +5,9 @@ namespace Antares::Solver { -struct NodeRegistry +class NodeRegistry { +public: NodeRegistry() = default; NodeRegistry(Antares::Solver::Nodes::Node* node, Antares::Solver::Registry registry); diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index 762a5fa9e7..914f1cdc83 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -45,7 +45,7 @@ NodeRegistry convertExpressionToNode(const std::string& exprStr, const ModelPars ExprParser::ExprContext* tree = parser.expr(); Antares::Solver::Registry registry; ConvertorVisitor visitor(registry, model); - auto root = std::any_cast(visitor.visit(tree)); + Node* root = std::any_cast(visitor.visit(tree)); return NodeRegistry(root, std::move(registry)); } diff --git a/src/solver/modelConverter/include/antares/solver/modelConverter/modelConverter.h b/src/solver/modelConverter/include/antares/solver/modelConverter/modelConverter.h index 14b7ae2914..ffa0b66a71 100644 --- a/src/solver/modelConverter/include/antares/solver/modelConverter/modelConverter.h +++ b/src/solver/modelConverter/include/antares/solver/modelConverter/modelConverter.h @@ -20,6 +20,9 @@ */ #pragma once +#include + +#include "antares/solver/modelParser/Library.h" namespace Antares { @@ -41,5 +44,11 @@ class Node; namespace Antares::Solver::ModelConverter { +class UnknownTypeException: public std::runtime_error +{ +public: + explicit UnknownTypeException(ModelParser::ValueType type); +}; + Antares::Study::SystemModel::Library convert(const Antares::Solver::ModelParser::Library& library); -} +} // namespace Antares::Solver::ModelConverter diff --git a/src/solver/modelConverter/modelConverter.cpp b/src/solver/modelConverter/modelConverter.cpp index 99171b420d..c8b3d856c9 100644 --- a/src/solver/modelConverter/modelConverter.cpp +++ b/src/solver/modelConverter/modelConverter.cpp @@ -22,7 +22,6 @@ #include "antares/solver/modelConverter/modelConverter.h" #include "antares/solver/modelConverter/convertorVisitor.h" -#include "antares/solver/modelParser/Library.h" #include "antares/study/system-model/constraint.h" #include "antares/study/system-model/expression.h" #include "antares/study/system-model/library.h" @@ -34,6 +33,11 @@ namespace Antares::Solver::ModelConverter { +UnknownTypeException::UnknownTypeException(ModelParser::ValueType type): + std::runtime_error("Unknown type: " + ModelParser::toString(type)) +{ +} + /** * \brief Converts parameters from ModelParser::Model to SystemModel::Parameter. * @@ -65,7 +69,7 @@ std::vector convertTypes( * * \param type The ModelParser::ValueType to convert. * \return The corresponding SystemModel::ValueType. - * \throws std::runtime_error if the type is unknown. + * \throws UnknownType if the type is unknown. */ std::vector convertParameters( const Antares::Solver::ModelParser::Model& model) @@ -101,7 +105,7 @@ Antares::Study::SystemModel::ValueType convertType(Antares::Solver::ModelParser: case Antares::Solver::ModelParser::ValueType::BOOL: return Antares::Study::SystemModel::ValueType::BOOL; default: - throw std::runtime_error("Unknown type: " + ModelParser::toString(type)); + throw UnknownTypeException(type); } } diff --git a/src/study/system-model/include/antares/study/system-model/library.h b/src/study/system-model/include/antares/study/system-model/library.h index 6643b24d22..8f5e3599f8 100644 --- a/src/study/system-model/include/antares/study/system-model/library.h +++ b/src/study/system-model/include/antares/study/system-model/library.h @@ -33,11 +33,7 @@ namespace Antares::Study::SystemModel class Library { public: - Library(): - models_(std::make_shared>()) - { - } - + Library() = default; ~Library() = default; const std::string& Id() const @@ -67,7 +63,8 @@ class Library std::string description_; std::unordered_map portTypes_; - std::shared_ptr> models_; + std::shared_ptr> + models_ = std::make_shared>(); }; /** From 3c77ee61bb9e1ea270987643cddb3e0044c47980 Mon Sep 17 00:00:00 2001 From: Florian OMNES <26088210+flomnes@users.noreply.github.com> Date: Mon, 25 Nov 2024 10:32:12 +0100 Subject: [PATCH 92/92] Move class definition to .cpp --- .../modelConverter/convertorVisitor.cpp | 38 ++++++++++++++++++ .../solver/modelConverter/convertorVisitor.h | 40 ------------------- 2 files changed, 38 insertions(+), 40 deletions(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index 914f1cdc83..6a9267f142 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -31,6 +31,44 @@ namespace Antares::Solver::ModelConverter using namespace Antares::Solver::Nodes; +/// Visitor to convert ANTLR expressions to Antares::Solver::Nodes +class ConvertorVisitor: public ExprVisitor +{ +public: + ConvertorVisitor(Registry& registry, const ModelParser::Model& model); + + std::any visit(antlr4::tree::ParseTree* tree) override; + + std::any visitIdentifier(ExprParser::IdentifierContext* context) override; + std::any visitMuldiv(ExprParser::MuldivContext* context) override; + std::any visitFullexpr(ExprParser::FullexprContext* context) override; + std::any visitShift(ExprParser::ShiftContext* context) override; + std::any visitNegation(ExprParser::NegationContext* context) override; + std::any visitExpression(ExprParser::ExpressionContext* context) override; + std::any visitComparison(ExprParser::ComparisonContext* context) override; + std::any visitAddsub(ExprParser::AddsubContext* context) override; + std::any visitPortField(ExprParser::PortFieldContext* context) override; + std::any visitNumber(ExprParser::NumberContext* context) override; + std::any visitTimeIndex(ExprParser::TimeIndexContext* context) override; + std::any visitTimeShift(ExprParser::TimeShiftContext* context) override; + std::any visitFunction(ExprParser::FunctionContext* context) override; + + std::any visitTimeSum(ExprParser::TimeSumContext* context) override; + std::any visitAllTimeSum(ExprParser::AllTimeSumContext* context) override; + std::any visitSignedAtom(ExprParser::SignedAtomContext* context) override; + std::any visitUnsignedAtom(ExprParser::UnsignedAtomContext* context) override; + std::any visitRightAtom(ExprParser::RightAtomContext* context) override; + std::any visitSignedExpression(ExprParser::SignedExpressionContext* context) override; + std::any visitShiftAddsub(ExprParser::ShiftAddsubContext* context) override; + std::any visitShiftMuldiv(ExprParser::ShiftMuldivContext* context) override; + std::any visitRightMuldiv(ExprParser::RightMuldivContext* context) override; + std::any visitRightExpression(ExprParser::RightExpressionContext* context) override; + +private: + Registry& registry_; + const ModelParser::Model& model_; +}; + NodeRegistry convertExpressionToNode(const std::string& exprStr, const ModelParser::Model& model) { if (exprStr.empty()) diff --git a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h index e7af038abd..1b8dd34643 100644 --- a/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h +++ b/src/solver/modelConverter/include/antares/solver/modelConverter/convertorVisitor.h @@ -28,45 +28,5 @@ namespace Antares::Solver::ModelConverter { - NodeRegistry convertExpressionToNode(const std::string& exprStr, const ModelParser::Model& model); - -/// Visitor to convert ANTLR expressions to Antares::Solver::Nodes -class ConvertorVisitor: public ExprVisitor -{ -public: - ConvertorVisitor(Registry& registry, const ModelParser::Model& model); - - std::any visit(antlr4::tree::ParseTree* tree) override; - - std::any visitIdentifier(ExprParser::IdentifierContext* context) override; - std::any visitMuldiv(ExprParser::MuldivContext* context) override; - std::any visitFullexpr(ExprParser::FullexprContext* context) override; - std::any visitShift(ExprParser::ShiftContext* context) override; - std::any visitNegation(ExprParser::NegationContext* context) override; - std::any visitExpression(ExprParser::ExpressionContext* context) override; - std::any visitComparison(ExprParser::ComparisonContext* context) override; - std::any visitAddsub(ExprParser::AddsubContext* context) override; - std::any visitPortField(ExprParser::PortFieldContext* context) override; - std::any visitNumber(ExprParser::NumberContext* context) override; - std::any visitTimeIndex(ExprParser::TimeIndexContext* context) override; - std::any visitTimeShift(ExprParser::TimeShiftContext* context) override; - std::any visitFunction(ExprParser::FunctionContext* context) override; - - std::any visitTimeSum(ExprParser::TimeSumContext* context) override; - std::any visitAllTimeSum(ExprParser::AllTimeSumContext* context) override; - std::any visitSignedAtom(ExprParser::SignedAtomContext* context) override; - std::any visitUnsignedAtom(ExprParser::UnsignedAtomContext* context) override; - std::any visitRightAtom(ExprParser::RightAtomContext* context) override; - std::any visitSignedExpression(ExprParser::SignedExpressionContext* context) override; - std::any visitShiftAddsub(ExprParser::ShiftAddsubContext* context) override; - std::any visitShiftMuldiv(ExprParser::ShiftMuldivContext* context) override; - std::any visitRightMuldiv(ExprParser::RightMuldivContext* context) override; - std::any visitRightExpression(ExprParser::RightExpressionContext* context) override; - -private: - Registry& registry_; - const ModelParser::Model& model_; -}; - } // namespace Antares::Solver::ModelConverter