From bbdf755d8324e6ae3e157f2e04f1b37eaf3cf5e3 Mon Sep 17 00:00:00 2001 From: ZhuangYumin Date: Mon, 12 Aug 2024 03:13:10 +0000 Subject: [PATCH] fix fatal errors, ready to do semantic check --- grammar/MXParser.g4 | 2 +- include/ast/expr_astnode.h | 8 +- src/CMakeLists.txt | 6 +- src/main.cpp | 2 +- src/semantic/antlr-generated/MXParser.cpp | 518 +++++++++---------- src/semantic/antlr-generated/MXParser.h | 3 +- src/semantic/antlr-generated/MXParser.interp | 2 +- src/semantic/visitor.cpp | 89 +++- 8 files changed, 337 insertions(+), 293 deletions(-) diff --git a/grammar/MXParser.g4 b/grammar/MXParser.g4 index 09f73c3..31ba8ec 100644 --- a/grammar/MXParser.g4 +++ b/grammar/MXParser.g4 @@ -20,7 +20,7 @@ statement | expr SEMICOLON #expr_statement | IF LPAREN expr RPAREN statement (ELSE statement)? #if_statement | WHILE LPAREN expr RPAREN statement #while_statement - | FOR LPAREN (define_statement|(expr SEMICOLON)|SEMICOLON) expr? SEMICOLON (define_statement|expr)? RPAREN statement #for_statement + | FOR LPAREN (define_statement|(expr SEMICOLON)|SEMICOLON) expr? SEMICOLON expr? RPAREN statement #for_statement | (BREAK|CONTINUE|(RETURN expr?)) SEMICOLON #jmp_statement | suite #suite_statement ; diff --git a/include/ast/expr_astnode.h b/include/ast/expr_astnode.h index ecdfe53..649b342 100644 --- a/include/ast/expr_astnode.h +++ b/include/ast/expr_astnode.h @@ -156,14 +156,10 @@ class FormattedStringExpr_ASTNode : public BasicExpr_ASTNode { }; struct NullType {}; using AtomicConstantType = std::variant; -struct ArrayConstantType { - friend Visitor; - std::vector, NullType, AtomicConstantType>> elements; - size_t level; -}; class ConstantExpr_ASTNode : public BasicExpr_ASTNode { friend Visitor; - std::variant value; + size_t level; + std::variant>> value; }; #endif // EXPR_ASTNODE_H \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 11a7386..dbeb12c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,7 +1,7 @@ add_subdirectory(ast) add_subdirectory(semantic) -add_executable(code main.cpp) -target_link_libraries(code semantic argparse) -set_target_properties(code PROPERTIES +add_executable(zmxcc main.cpp) +target_link_libraries(zmxcc semantic argparse) +set_target_properties(zmxcc PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" ) \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 9fe7e0d..0694b8b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4,7 +4,7 @@ #include "semantic/semantic.h" int main(int argc, char **argv) { - argparse::ArgumentParser program("mxcompiler"); + argparse::ArgumentParser program("zmxcc"); program.add_argument("input").help("input file path").required(); diff --git a/src/semantic/antlr-generated/MXParser.cpp b/src/semantic/antlr-generated/MXParser.cpp index c264e8c..2fbff51 100644 --- a/src/semantic/antlr-generated/MXParser.cpp +++ b/src/semantic/antlr-generated/MXParser.cpp @@ -78,7 +78,7 @@ void mxparserParserInitialize() { } ); static const int32_t serializedATNSegment[] = { - 4,1,61,364,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, + 4,1,61,363,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,1,0,1,0,1,0,4,0,30, 8,0,11,0,12,0,31,1,0,1,0,1,1,1,1,1,1,5,1,39,8,1,10,1,12,1,42,9,1,1,1, 1,1,1,1,1,1,1,1,5,1,49,8,1,10,1,12,1,52,9,1,1,1,1,1,1,1,1,1,1,1,1,1,5, @@ -88,26 +88,26 @@ void mxparserParserInitialize() { 8,3,10,3,12,3,105,9,3,1,3,1,3,1,4,1,4,1,4,1,4,1,4,1,5,1,5,5,5,116,8,5, 10,5,12,5,119,9,5,1,5,1,5,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6, 1,6,3,6,135,8,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,3, - 6,150,8,6,1,6,3,6,153,8,6,1,6,1,6,1,6,3,6,158,8,6,1,6,1,6,1,6,1,6,1,6, - 1,6,3,6,166,8,6,3,6,168,8,6,1,6,1,6,3,6,172,8,6,1,7,1,7,1,7,5,7,177,8, - 7,10,7,12,7,180,9,7,1,7,1,7,1,7,3,7,185,8,7,1,7,1,7,1,7,1,7,3,7,191,8, - 7,5,7,193,8,7,10,7,12,7,196,9,7,1,7,1,7,1,8,1,8,1,8,1,8,1,8,1,8,3,8,206, - 8,8,1,8,4,8,209,8,8,11,8,12,8,210,1,8,3,8,214,8,8,1,8,1,8,1,8,1,8,1,8, - 1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,3,8,231,8,8,1,8,1,8,1,8,1,8,1, - 8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8, + 6,150,8,6,1,6,3,6,153,8,6,1,6,1,6,3,6,157,8,6,1,6,1,6,1,6,1,6,1,6,1,6, + 3,6,165,8,6,3,6,167,8,6,1,6,1,6,3,6,171,8,6,1,7,1,7,1,7,5,7,176,8,7,10, + 7,12,7,179,9,7,1,7,1,7,1,7,3,7,184,8,7,1,7,1,7,1,7,1,7,3,7,190,8,7,5, + 7,192,8,7,10,7,12,7,195,9,7,1,7,1,7,1,8,1,8,1,8,1,8,1,8,1,8,3,8,205,8, + 8,1,8,4,8,208,8,8,11,8,12,8,209,1,8,3,8,213,8,8,1,8,1,8,1,8,1,8,1,8,1, + 8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,3,8,230,8,8,1,8,1,8,1,8,1,8,1,8, 1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1, - 8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,5,8,280,8,8,10,8,12,8,283,9,8,3,8,285,8, - 8,1,8,3,8,288,8,8,1,8,1,8,1,8,1,8,1,8,4,8,295,8,8,11,8,12,8,296,1,8,1, - 8,5,8,301,8,8,10,8,12,8,304,9,8,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1, - 9,1,9,5,9,317,8,9,10,9,12,9,320,9,9,3,9,322,8,9,1,9,1,9,1,9,3,9,327,8, - 9,1,10,1,10,1,10,1,10,1,10,5,10,334,8,10,10,10,12,10,337,9,10,1,10,1, - 10,3,10,341,8,10,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,5,11,352, - 8,11,10,11,12,11,355,9,11,3,11,357,8,11,1,11,3,11,360,8,11,1,12,1,12, - 1,12,1,335,1,16,13,0,2,4,6,8,10,12,14,16,18,20,22,24,0,7,1,0,39,40,1, - 0,20,22,1,0,18,19,1,0,32,33,1,0,23,26,1,0,27,28,2,0,1,4,56,56,429,0,29, + 8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8, + 1,8,1,8,1,8,1,8,1,8,1,8,1,8,5,8,279,8,8,10,8,12,8,282,9,8,3,8,284,8,8, + 1,8,3,8,287,8,8,1,8,1,8,1,8,1,8,1,8,4,8,294,8,8,11,8,12,8,295,1,8,1,8, + 5,8,300,8,8,10,8,12,8,303,9,8,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9, + 1,9,5,9,316,8,9,10,9,12,9,319,9,9,3,9,321,8,9,1,9,1,9,1,9,3,9,326,8,9, + 1,10,1,10,1,10,1,10,1,10,5,10,333,8,10,10,10,12,10,336,9,10,1,10,1,10, + 3,10,340,8,10,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,5,11,351,8, + 11,10,11,12,11,354,9,11,3,11,356,8,11,1,11,3,11,359,8,11,1,12,1,12,1, + 12,1,334,1,16,13,0,2,4,6,8,10,12,14,16,18,20,22,24,0,7,1,0,39,40,1,0, + 20,22,1,0,18,19,1,0,32,33,1,0,23,26,1,0,27,28,2,0,1,4,56,56,427,0,29, 1,0,0,0,2,35,1,0,0,0,4,76,1,0,0,0,6,90,1,0,0,0,8,108,1,0,0,0,10,113,1, - 0,0,0,12,171,1,0,0,0,14,173,1,0,0,0,16,230,1,0,0,0,18,326,1,0,0,0,20, - 340,1,0,0,0,22,359,1,0,0,0,24,361,1,0,0,0,26,30,3,4,2,0,27,30,3,14,7, + 0,0,0,12,170,1,0,0,0,14,172,1,0,0,0,16,229,1,0,0,0,18,325,1,0,0,0,20, + 339,1,0,0,0,22,358,1,0,0,0,24,360,1,0,0,0,26,30,3,4,2,0,27,30,3,14,7, 0,28,30,3,2,1,0,29,26,1,0,0,0,29,27,1,0,0,0,29,28,1,0,0,0,30,31,1,0,0, 0,31,29,1,0,0,0,31,32,1,0,0,0,32,33,1,0,0,0,33,34,5,0,0,1,34,1,1,0,0, 0,35,40,3,24,12,0,36,37,5,46,0,0,37,39,5,47,0,0,38,36,1,0,0,0,39,42,1, @@ -130,81 +130,81 @@ void mxparserParserInitialize() { 0,0,107,7,1,0,0,0,108,109,5,56,0,0,109,110,5,44,0,0,110,111,5,45,0,0, 111,112,3,10,5,0,112,9,1,0,0,0,113,117,5,48,0,0,114,116,3,12,6,0,115, 114,1,0,0,0,116,119,1,0,0,0,117,115,1,0,0,0,117,118,1,0,0,0,118,120,1, - 0,0,0,119,117,1,0,0,0,120,121,5,49,0,0,121,11,1,0,0,0,122,172,5,50,0, - 0,123,172,3,14,7,0,124,125,3,16,8,0,125,126,5,50,0,0,126,172,1,0,0,0, + 0,0,0,119,117,1,0,0,0,120,121,5,49,0,0,121,11,1,0,0,0,122,171,5,50,0, + 0,123,171,3,14,7,0,124,125,3,16,8,0,125,126,5,50,0,0,126,171,1,0,0,0, 127,128,5,11,0,0,128,129,5,44,0,0,129,130,3,16,8,0,130,131,5,45,0,0,131, 134,3,12,6,0,132,133,5,12,0,0,133,135,3,12,6,0,134,132,1,0,0,0,134,135, - 1,0,0,0,135,172,1,0,0,0,136,137,5,14,0,0,137,138,5,44,0,0,138,139,3,16, - 8,0,139,140,5,45,0,0,140,141,3,12,6,0,141,172,1,0,0,0,142,143,5,13,0, + 1,0,0,0,135,171,1,0,0,0,136,137,5,14,0,0,137,138,5,44,0,0,138,139,3,16, + 8,0,139,140,5,45,0,0,140,141,3,12,6,0,141,171,1,0,0,0,142,143,5,13,0, 0,143,149,5,44,0,0,144,150,3,14,7,0,145,146,3,16,8,0,146,147,5,50,0,0, 147,150,1,0,0,0,148,150,5,50,0,0,149,144,1,0,0,0,149,145,1,0,0,0,149, 148,1,0,0,0,150,152,1,0,0,0,151,153,3,16,8,0,152,151,1,0,0,0,152,153, - 1,0,0,0,153,154,1,0,0,0,154,157,5,50,0,0,155,158,3,14,7,0,156,158,3,16, - 8,0,157,155,1,0,0,0,157,156,1,0,0,0,157,158,1,0,0,0,158,159,1,0,0,0,159, - 160,5,45,0,0,160,172,3,12,6,0,161,168,5,15,0,0,162,168,5,16,0,0,163,165, - 5,17,0,0,164,166,3,16,8,0,165,164,1,0,0,0,165,166,1,0,0,0,166,168,1,0, - 0,0,167,161,1,0,0,0,167,162,1,0,0,0,167,163,1,0,0,0,168,169,1,0,0,0,169, - 172,5,50,0,0,170,172,3,10,5,0,171,122,1,0,0,0,171,123,1,0,0,0,171,124, - 1,0,0,0,171,127,1,0,0,0,171,136,1,0,0,0,171,142,1,0,0,0,171,167,1,0,0, - 0,171,170,1,0,0,0,172,13,1,0,0,0,173,178,3,24,12,0,174,175,5,46,0,0,175, - 177,5,47,0,0,176,174,1,0,0,0,177,180,1,0,0,0,178,176,1,0,0,0,178,179, - 1,0,0,0,179,181,1,0,0,0,180,178,1,0,0,0,181,184,5,56,0,0,182,183,5,38, - 0,0,183,185,3,16,8,0,184,182,1,0,0,0,184,185,1,0,0,0,185,194,1,0,0,0, - 186,187,5,51,0,0,187,190,5,56,0,0,188,189,5,38,0,0,189,191,3,16,8,0,190, - 188,1,0,0,0,190,191,1,0,0,0,191,193,1,0,0,0,192,186,1,0,0,0,193,196,1, - 0,0,0,194,192,1,0,0,0,194,195,1,0,0,0,195,197,1,0,0,0,196,194,1,0,0,0, - 197,198,5,50,0,0,198,15,1,0,0,0,199,200,6,8,-1,0,200,231,3,18,9,0,201, - 202,5,5,0,0,202,208,3,24,12,0,203,205,5,46,0,0,204,206,3,16,8,0,205,204, - 1,0,0,0,205,206,1,0,0,0,206,207,1,0,0,0,207,209,5,47,0,0,208,203,1,0, - 0,0,209,210,1,0,0,0,210,208,1,0,0,0,210,211,1,0,0,0,211,213,1,0,0,0,212, - 214,3,22,11,0,213,212,1,0,0,0,213,214,1,0,0,0,214,231,1,0,0,0,215,216, - 5,5,0,0,216,217,3,24,12,0,217,218,5,44,0,0,218,219,5,45,0,0,219,231,1, - 0,0,0,220,221,5,5,0,0,221,231,3,24,12,0,222,223,7,0,0,0,223,231,3,16, - 8,16,224,225,5,19,0,0,225,231,3,16,8,15,226,227,5,31,0,0,227,231,3,16, - 8,14,228,229,5,37,0,0,229,231,3,16,8,13,230,199,1,0,0,0,230,201,1,0,0, - 0,230,215,1,0,0,0,230,220,1,0,0,0,230,222,1,0,0,0,230,224,1,0,0,0,230, - 226,1,0,0,0,230,228,1,0,0,0,231,302,1,0,0,0,232,233,10,12,0,0,233,234, - 7,1,0,0,234,301,3,16,8,13,235,236,10,11,0,0,236,237,7,2,0,0,237,301,3, - 16,8,12,238,239,10,10,0,0,239,240,7,3,0,0,240,301,3,16,8,11,241,242,10, - 9,0,0,242,243,7,4,0,0,243,301,3,16,8,10,244,245,10,8,0,0,245,246,7,5, - 0,0,246,301,3,16,8,9,247,248,10,7,0,0,248,249,5,34,0,0,249,301,3,16,8, - 8,250,251,10,6,0,0,251,252,5,36,0,0,252,301,3,16,8,7,253,254,10,5,0,0, - 254,255,5,35,0,0,255,301,3,16,8,6,256,257,10,4,0,0,257,258,5,29,0,0,258, - 301,3,16,8,5,259,260,10,3,0,0,260,261,5,30,0,0,261,301,3,16,8,4,262,263, - 10,2,0,0,263,264,5,42,0,0,264,265,3,16,8,0,265,266,5,43,0,0,266,267,3, - 16,8,2,267,301,1,0,0,0,268,269,10,1,0,0,269,270,5,38,0,0,270,301,3,16, - 8,1,271,272,10,19,0,0,272,287,5,41,0,0,273,288,5,56,0,0,274,275,5,56, - 0,0,275,284,5,44,0,0,276,281,3,16,8,0,277,278,5,51,0,0,278,280,3,16,8, - 0,279,277,1,0,0,0,280,283,1,0,0,0,281,279,1,0,0,0,281,282,1,0,0,0,282, - 285,1,0,0,0,283,281,1,0,0,0,284,276,1,0,0,0,284,285,1,0,0,0,285,286,1, - 0,0,0,286,288,5,45,0,0,287,273,1,0,0,0,287,274,1,0,0,0,288,301,1,0,0, - 0,289,294,10,18,0,0,290,291,5,46,0,0,291,292,3,16,8,0,292,293,5,47,0, - 0,293,295,1,0,0,0,294,290,1,0,0,0,295,296,1,0,0,0,296,294,1,0,0,0,296, - 297,1,0,0,0,297,301,1,0,0,0,298,299,10,17,0,0,299,301,7,0,0,0,300,232, - 1,0,0,0,300,235,1,0,0,0,300,238,1,0,0,0,300,241,1,0,0,0,300,244,1,0,0, - 0,300,247,1,0,0,0,300,250,1,0,0,0,300,253,1,0,0,0,300,256,1,0,0,0,300, - 259,1,0,0,0,300,262,1,0,0,0,300,268,1,0,0,0,300,271,1,0,0,0,300,289,1, - 0,0,0,300,298,1,0,0,0,301,304,1,0,0,0,302,300,1,0,0,0,302,303,1,0,0,0, - 303,17,1,0,0,0,304,302,1,0,0,0,305,327,5,10,0,0,306,307,5,44,0,0,307, - 308,3,16,8,0,308,309,5,45,0,0,309,327,1,0,0,0,310,327,5,56,0,0,311,312, - 5,56,0,0,312,321,5,44,0,0,313,318,3,16,8,0,314,315,5,51,0,0,315,317,3, - 16,8,0,316,314,1,0,0,0,317,320,1,0,0,0,318,316,1,0,0,0,318,319,1,0,0, - 0,319,322,1,0,0,0,320,318,1,0,0,0,321,313,1,0,0,0,321,322,1,0,0,0,322, - 323,1,0,0,0,323,327,5,45,0,0,324,327,3,20,10,0,325,327,3,22,11,0,326, - 305,1,0,0,0,326,306,1,0,0,0,326,310,1,0,0,0,326,311,1,0,0,0,326,324,1, - 0,0,0,326,325,1,0,0,0,327,19,1,0,0,0,328,341,5,52,0,0,329,330,5,53,0, - 0,330,335,3,16,8,0,331,332,5,55,0,0,332,334,3,16,8,0,333,331,1,0,0,0, - 334,337,1,0,0,0,335,336,1,0,0,0,335,333,1,0,0,0,336,338,1,0,0,0,337,335, - 1,0,0,0,338,339,5,54,0,0,339,341,1,0,0,0,340,328,1,0,0,0,340,329,1,0, - 0,0,341,21,1,0,0,0,342,360,5,8,0,0,343,360,5,9,0,0,344,360,5,57,0,0,345, - 360,5,58,0,0,346,360,5,7,0,0,347,356,5,48,0,0,348,353,3,22,11,0,349,350, - 5,51,0,0,350,352,3,22,11,0,351,349,1,0,0,0,352,355,1,0,0,0,353,351,1, - 0,0,0,353,354,1,0,0,0,354,357,1,0,0,0,355,353,1,0,0,0,356,348,1,0,0,0, - 356,357,1,0,0,0,357,358,1,0,0,0,358,360,5,49,0,0,359,342,1,0,0,0,359, - 343,1,0,0,0,359,344,1,0,0,0,359,345,1,0,0,0,359,346,1,0,0,0,359,347,1, - 0,0,0,360,23,1,0,0,0,361,362,7,6,0,0,362,25,1,0,0,0,41,29,31,40,50,61, - 68,71,82,84,95,103,117,134,149,152,157,165,167,171,178,184,190,194,205, - 210,213,230,281,284,287,296,300,302,318,321,326,335,340,353,356,359 + 1,0,0,0,153,154,1,0,0,0,154,156,5,50,0,0,155,157,3,16,8,0,156,155,1,0, + 0,0,156,157,1,0,0,0,157,158,1,0,0,0,158,159,5,45,0,0,159,171,3,12,6,0, + 160,167,5,15,0,0,161,167,5,16,0,0,162,164,5,17,0,0,163,165,3,16,8,0,164, + 163,1,0,0,0,164,165,1,0,0,0,165,167,1,0,0,0,166,160,1,0,0,0,166,161,1, + 0,0,0,166,162,1,0,0,0,167,168,1,0,0,0,168,171,5,50,0,0,169,171,3,10,5, + 0,170,122,1,0,0,0,170,123,1,0,0,0,170,124,1,0,0,0,170,127,1,0,0,0,170, + 136,1,0,0,0,170,142,1,0,0,0,170,166,1,0,0,0,170,169,1,0,0,0,171,13,1, + 0,0,0,172,177,3,24,12,0,173,174,5,46,0,0,174,176,5,47,0,0,175,173,1,0, + 0,0,176,179,1,0,0,0,177,175,1,0,0,0,177,178,1,0,0,0,178,180,1,0,0,0,179, + 177,1,0,0,0,180,183,5,56,0,0,181,182,5,38,0,0,182,184,3,16,8,0,183,181, + 1,0,0,0,183,184,1,0,0,0,184,193,1,0,0,0,185,186,5,51,0,0,186,189,5,56, + 0,0,187,188,5,38,0,0,188,190,3,16,8,0,189,187,1,0,0,0,189,190,1,0,0,0, + 190,192,1,0,0,0,191,185,1,0,0,0,192,195,1,0,0,0,193,191,1,0,0,0,193,194, + 1,0,0,0,194,196,1,0,0,0,195,193,1,0,0,0,196,197,5,50,0,0,197,15,1,0,0, + 0,198,199,6,8,-1,0,199,230,3,18,9,0,200,201,5,5,0,0,201,207,3,24,12,0, + 202,204,5,46,0,0,203,205,3,16,8,0,204,203,1,0,0,0,204,205,1,0,0,0,205, + 206,1,0,0,0,206,208,5,47,0,0,207,202,1,0,0,0,208,209,1,0,0,0,209,207, + 1,0,0,0,209,210,1,0,0,0,210,212,1,0,0,0,211,213,3,22,11,0,212,211,1,0, + 0,0,212,213,1,0,0,0,213,230,1,0,0,0,214,215,5,5,0,0,215,216,3,24,12,0, + 216,217,5,44,0,0,217,218,5,45,0,0,218,230,1,0,0,0,219,220,5,5,0,0,220, + 230,3,24,12,0,221,222,7,0,0,0,222,230,3,16,8,16,223,224,5,19,0,0,224, + 230,3,16,8,15,225,226,5,31,0,0,226,230,3,16,8,14,227,228,5,37,0,0,228, + 230,3,16,8,13,229,198,1,0,0,0,229,200,1,0,0,0,229,214,1,0,0,0,229,219, + 1,0,0,0,229,221,1,0,0,0,229,223,1,0,0,0,229,225,1,0,0,0,229,227,1,0,0, + 0,230,301,1,0,0,0,231,232,10,12,0,0,232,233,7,1,0,0,233,300,3,16,8,13, + 234,235,10,11,0,0,235,236,7,2,0,0,236,300,3,16,8,12,237,238,10,10,0,0, + 238,239,7,3,0,0,239,300,3,16,8,11,240,241,10,9,0,0,241,242,7,4,0,0,242, + 300,3,16,8,10,243,244,10,8,0,0,244,245,7,5,0,0,245,300,3,16,8,9,246,247, + 10,7,0,0,247,248,5,34,0,0,248,300,3,16,8,8,249,250,10,6,0,0,250,251,5, + 36,0,0,251,300,3,16,8,7,252,253,10,5,0,0,253,254,5,35,0,0,254,300,3,16, + 8,6,255,256,10,4,0,0,256,257,5,29,0,0,257,300,3,16,8,5,258,259,10,3,0, + 0,259,260,5,30,0,0,260,300,3,16,8,4,261,262,10,2,0,0,262,263,5,42,0,0, + 263,264,3,16,8,0,264,265,5,43,0,0,265,266,3,16,8,2,266,300,1,0,0,0,267, + 268,10,1,0,0,268,269,5,38,0,0,269,300,3,16,8,1,270,271,10,19,0,0,271, + 286,5,41,0,0,272,287,5,56,0,0,273,274,5,56,0,0,274,283,5,44,0,0,275,280, + 3,16,8,0,276,277,5,51,0,0,277,279,3,16,8,0,278,276,1,0,0,0,279,282,1, + 0,0,0,280,278,1,0,0,0,280,281,1,0,0,0,281,284,1,0,0,0,282,280,1,0,0,0, + 283,275,1,0,0,0,283,284,1,0,0,0,284,285,1,0,0,0,285,287,5,45,0,0,286, + 272,1,0,0,0,286,273,1,0,0,0,287,300,1,0,0,0,288,293,10,18,0,0,289,290, + 5,46,0,0,290,291,3,16,8,0,291,292,5,47,0,0,292,294,1,0,0,0,293,289,1, + 0,0,0,294,295,1,0,0,0,295,293,1,0,0,0,295,296,1,0,0,0,296,300,1,0,0,0, + 297,298,10,17,0,0,298,300,7,0,0,0,299,231,1,0,0,0,299,234,1,0,0,0,299, + 237,1,0,0,0,299,240,1,0,0,0,299,243,1,0,0,0,299,246,1,0,0,0,299,249,1, + 0,0,0,299,252,1,0,0,0,299,255,1,0,0,0,299,258,1,0,0,0,299,261,1,0,0,0, + 299,267,1,0,0,0,299,270,1,0,0,0,299,288,1,0,0,0,299,297,1,0,0,0,300,303, + 1,0,0,0,301,299,1,0,0,0,301,302,1,0,0,0,302,17,1,0,0,0,303,301,1,0,0, + 0,304,326,5,10,0,0,305,306,5,44,0,0,306,307,3,16,8,0,307,308,5,45,0,0, + 308,326,1,0,0,0,309,326,5,56,0,0,310,311,5,56,0,0,311,320,5,44,0,0,312, + 317,3,16,8,0,313,314,5,51,0,0,314,316,3,16,8,0,315,313,1,0,0,0,316,319, + 1,0,0,0,317,315,1,0,0,0,317,318,1,0,0,0,318,321,1,0,0,0,319,317,1,0,0, + 0,320,312,1,0,0,0,320,321,1,0,0,0,321,322,1,0,0,0,322,326,5,45,0,0,323, + 326,3,20,10,0,324,326,3,22,11,0,325,304,1,0,0,0,325,305,1,0,0,0,325,309, + 1,0,0,0,325,310,1,0,0,0,325,323,1,0,0,0,325,324,1,0,0,0,326,19,1,0,0, + 0,327,340,5,52,0,0,328,329,5,53,0,0,329,334,3,16,8,0,330,331,5,55,0,0, + 331,333,3,16,8,0,332,330,1,0,0,0,333,336,1,0,0,0,334,335,1,0,0,0,334, + 332,1,0,0,0,335,337,1,0,0,0,336,334,1,0,0,0,337,338,5,54,0,0,338,340, + 1,0,0,0,339,327,1,0,0,0,339,328,1,0,0,0,340,21,1,0,0,0,341,359,5,8,0, + 0,342,359,5,9,0,0,343,359,5,57,0,0,344,359,5,58,0,0,345,359,5,7,0,0,346, + 355,5,48,0,0,347,352,3,22,11,0,348,349,5,51,0,0,349,351,3,22,11,0,350, + 348,1,0,0,0,351,354,1,0,0,0,352,350,1,0,0,0,352,353,1,0,0,0,353,356,1, + 0,0,0,354,352,1,0,0,0,355,347,1,0,0,0,355,356,1,0,0,0,356,357,1,0,0,0, + 357,359,5,49,0,0,358,341,1,0,0,0,358,342,1,0,0,0,358,343,1,0,0,0,358, + 344,1,0,0,0,358,345,1,0,0,0,358,346,1,0,0,0,359,23,1,0,0,0,360,361,7, + 6,0,0,361,25,1,0,0,0,41,29,31,40,50,61,68,71,82,84,95,103,117,134,149, + 152,156,164,166,170,177,183,189,193,204,209,212,229,280,283,286,295,299, + 301,317,320,325,334,339,352,355,358 }; staticData->serializedATN = antlr4::atn::SerializedATNView(serializedATNSegment, sizeof(serializedATNSegment) / sizeof(serializedATNSegment[0])); @@ -955,12 +955,8 @@ MXParser::StatementContext* MXParser::For_statementContext::statement() { return getRuleContext(0); } -std::vector MXParser::For_statementContext::define_statement() { - return getRuleContexts(); -} - -MXParser::Define_statementContext* MXParser::For_statementContext::define_statement(size_t i) { - return getRuleContext(i); +MXParser::Define_statementContext* MXParser::For_statementContext::define_statement() { + return getRuleContext(0); } std::vector MXParser::For_statementContext::expr() { @@ -1158,7 +1154,7 @@ MXParser::StatementContext* MXParser::statement() { exitRule(); }); try { - setState(171); + setState(170); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 18, _ctx)) { case 1: { @@ -1278,28 +1274,18 @@ MXParser::StatementContext* MXParser::statement() { } setState(154); match(MXParser::SEMICOLON); - setState(157); + setState(156); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 15, _ctx)) { - case 1: { + _la = _input->LA(1); + if ((((_la & ~ 0x3fULL) == 0) && + ((1ULL << _la) & 518214813164767136) != 0)) { setState(155); - define_statement(); - break; - } - - case 2: { - setState(156); expr(0); - break; } - - default: - break; - } - setState(159); + setState(158); match(MXParser::RPAREN); - setState(160); + setState(159); statement(); break; } @@ -1307,31 +1293,31 @@ MXParser::StatementContext* MXParser::statement() { case 7: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 7); - setState(167); + setState(166); _errHandler->sync(this); switch (_input->LA(1)) { case MXParser::BREAK: { - setState(161); + setState(160); match(MXParser::BREAK); break; } case MXParser::CONTINUE: { - setState(162); + setState(161); match(MXParser::CONTINUE); break; } case MXParser::RETURN: { - setState(163); + setState(162); match(MXParser::RETURN); - setState(165); + setState(164); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 518214813164767136) != 0)) { - setState(164); + setState(163); expr(0); } break; @@ -1340,7 +1326,7 @@ MXParser::StatementContext* MXParser::statement() { default: throw NoViableAltException(this); } - setState(169); + setState(168); match(MXParser::SEMICOLON); break; } @@ -1348,7 +1334,7 @@ MXParser::StatementContext* MXParser::statement() { case 8: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 8); - setState(170); + setState(169); suite(); break; } @@ -1456,55 +1442,55 @@ MXParser::Define_statementContext* MXParser::define_statement() { }); try { enterOuterAlt(_localctx, 1); - setState(173); + setState(172); type(); - setState(178); + setState(177); _errHandler->sync(this); _la = _input->LA(1); while (_la == MXParser::LBRACKET) { - setState(174); + setState(173); match(MXParser::LBRACKET); - setState(175); + setState(174); match(MXParser::RBRACKET); - setState(180); + setState(179); _errHandler->sync(this); _la = _input->LA(1); } - setState(181); + setState(180); match(MXParser::ID); - setState(184); + setState(183); _errHandler->sync(this); _la = _input->LA(1); if (_la == MXParser::ASSIGN) { - setState(182); + setState(181); match(MXParser::ASSIGN); - setState(183); + setState(182); expr(0); } - setState(194); + setState(193); _errHandler->sync(this); _la = _input->LA(1); while (_la == MXParser::COMMA) { - setState(186); + setState(185); match(MXParser::COMMA); - setState(187); + setState(186); match(MXParser::ID); - setState(190); + setState(189); _errHandler->sync(this); _la = _input->LA(1); if (_la == MXParser::ASSIGN) { - setState(188); + setState(187); match(MXParser::ASSIGN); - setState(189); + setState(188); expr(0); } - setState(196); + setState(195); _errHandler->sync(this); _la = _input->LA(1); } - setState(197); + setState(196); match(MXParser::SEMICOLON); } @@ -2159,7 +2145,7 @@ MXParser::ExprContext* MXParser::expr(int precedence) { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(230); + setState(229); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 26, _ctx)) { case 1: { @@ -2167,7 +2153,7 @@ MXParser::ExprContext* MXParser::expr(int precedence) { _ctx = _localctx; previousContext = _localctx; - setState(200); + setState(199); basic_expr(); break; } @@ -2176,28 +2162,28 @@ MXParser::ExprContext* MXParser::expr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(201); + setState(200); match(MXParser::NEW); - setState(202); + setState(201); type(); - setState(208); + setState(207); _errHandler->sync(this); alt = 1; do { switch (alt) { case 1: { - setState(203); + setState(202); match(MXParser::LBRACKET); - setState(205); + setState(204); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 518214813164767136) != 0)) { - setState(204); + setState(203); expr(0); } - setState(207); + setState(206); match(MXParser::RBRACKET); break; } @@ -2205,16 +2191,16 @@ MXParser::ExprContext* MXParser::expr(int precedence) { default: throw NoViableAltException(this); } - setState(210); + setState(209); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 24, _ctx); } while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER); - setState(213); + setState(212); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 25, _ctx)) { case 1: { - setState(212); + setState(211); constant(); break; } @@ -2229,13 +2215,13 @@ MXParser::ExprContext* MXParser::expr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(215); + setState(214); match(MXParser::NEW); - setState(216); + setState(215); type(); - setState(217); + setState(216); match(MXParser::LPAREN); - setState(218); + setState(217); match(MXParser::RPAREN); break; } @@ -2244,9 +2230,9 @@ MXParser::ExprContext* MXParser::expr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(220); + setState(219); match(MXParser::NEW); - setState(221); + setState(220); type(); break; } @@ -2255,7 +2241,7 @@ MXParser::ExprContext* MXParser::expr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(222); + setState(221); _la = _input->LA(1); if (!(_la == MXParser::SELF_PLUS @@ -2266,7 +2252,7 @@ MXParser::ExprContext* MXParser::expr(int precedence) { _errHandler->reportMatch(this); consume(); } - setState(223); + setState(222); expr(16); break; } @@ -2275,9 +2261,9 @@ MXParser::ExprContext* MXParser::expr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(224); + setState(223); match(MXParser::MINUS); - setState(225); + setState(224); expr(15); break; } @@ -2286,9 +2272,9 @@ MXParser::ExprContext* MXParser::expr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(226); + setState(225); match(MXParser::LNOT); - setState(227); + setState(226); expr(14); break; } @@ -2297,9 +2283,9 @@ MXParser::ExprContext* MXParser::expr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(228); + setState(227); match(MXParser::BNOT); - setState(229); + setState(228); expr(13); break; } @@ -2308,7 +2294,7 @@ MXParser::ExprContext* MXParser::expr(int precedence) { break; } _ctx->stop = _input->LT(-1); - setState(302); + setState(301); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 32, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { @@ -2316,17 +2302,17 @@ MXParser::ExprContext* MXParser::expr(int precedence) { if (!_parseListeners.empty()) triggerExitRuleEvent(); previousContext = _localctx; - setState(300); + setState(299); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 31, _ctx)) { case 1: { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleExpr); - setState(232); + setState(231); if (!(precpred(_ctx, 12))) throw FailedPredicateException(this, "precpred(_ctx, 12)"); - setState(233); + setState(232); _la = _input->LA(1); if (!((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 7340032) != 0))) { @@ -2336,7 +2322,7 @@ MXParser::ExprContext* MXParser::expr(int precedence) { _errHandler->reportMatch(this); consume(); } - setState(234); + setState(233); expr(13); break; } @@ -2345,10 +2331,10 @@ MXParser::ExprContext* MXParser::expr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleExpr); - setState(235); + setState(234); if (!(precpred(_ctx, 11))) throw FailedPredicateException(this, "precpred(_ctx, 11)"); - setState(236); + setState(235); _la = _input->LA(1); if (!(_la == MXParser::PLUS @@ -2359,7 +2345,7 @@ MXParser::ExprContext* MXParser::expr(int precedence) { _errHandler->reportMatch(this); consume(); } - setState(237); + setState(236); expr(12); break; } @@ -2368,10 +2354,10 @@ MXParser::ExprContext* MXParser::expr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleExpr); - setState(238); + setState(237); if (!(precpred(_ctx, 10))) throw FailedPredicateException(this, "precpred(_ctx, 10)"); - setState(239); + setState(238); _la = _input->LA(1); if (!(_la == MXParser::ARS @@ -2382,7 +2368,7 @@ MXParser::ExprContext* MXParser::expr(int precedence) { _errHandler->reportMatch(this); consume(); } - setState(240); + setState(239); expr(11); break; } @@ -2391,10 +2377,10 @@ MXParser::ExprContext* MXParser::expr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleExpr); - setState(241); + setState(240); if (!(precpred(_ctx, 9))) throw FailedPredicateException(this, "precpred(_ctx, 9)"); - setState(242); + setState(241); _la = _input->LA(1); if (!((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 125829120) != 0))) { @@ -2404,7 +2390,7 @@ MXParser::ExprContext* MXParser::expr(int precedence) { _errHandler->reportMatch(this); consume(); } - setState(243); + setState(242); expr(10); break; } @@ -2413,10 +2399,10 @@ MXParser::ExprContext* MXParser::expr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleExpr); - setState(244); + setState(243); if (!(precpred(_ctx, 8))) throw FailedPredicateException(this, "precpred(_ctx, 8)"); - setState(245); + setState(244); _la = _input->LA(1); if (!(_la == MXParser::NE @@ -2427,7 +2413,7 @@ MXParser::ExprContext* MXParser::expr(int precedence) { _errHandler->reportMatch(this); consume(); } - setState(246); + setState(245); expr(9); break; } @@ -2436,12 +2422,12 @@ MXParser::ExprContext* MXParser::expr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleExpr); - setState(247); + setState(246); if (!(precpred(_ctx, 7))) throw FailedPredicateException(this, "precpred(_ctx, 7)"); - setState(248); + setState(247); match(MXParser::BAND); - setState(249); + setState(248); expr(8); break; } @@ -2450,12 +2436,12 @@ MXParser::ExprContext* MXParser::expr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleExpr); - setState(250); + setState(249); if (!(precpred(_ctx, 6))) throw FailedPredicateException(this, "precpred(_ctx, 6)"); - setState(251); + setState(250); match(MXParser::BXOR); - setState(252); + setState(251); expr(7); break; } @@ -2464,12 +2450,12 @@ MXParser::ExprContext* MXParser::expr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleExpr); - setState(253); + setState(252); if (!(precpred(_ctx, 5))) throw FailedPredicateException(this, "precpred(_ctx, 5)"); - setState(254); + setState(253); match(MXParser::BOR); - setState(255); + setState(254); expr(6); break; } @@ -2478,12 +2464,12 @@ MXParser::ExprContext* MXParser::expr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleExpr); - setState(256); + setState(255); if (!(precpred(_ctx, 4))) throw FailedPredicateException(this, "precpred(_ctx, 4)"); - setState(257); + setState(256); match(MXParser::LAND); - setState(258); + setState(257); expr(5); break; } @@ -2492,12 +2478,12 @@ MXParser::ExprContext* MXParser::expr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleExpr); - setState(259); + setState(258); if (!(precpred(_ctx, 3))) throw FailedPredicateException(this, "precpred(_ctx, 3)"); - setState(260); + setState(259); match(MXParser::LOR); - setState(261); + setState(260); expr(4); break; } @@ -2506,16 +2492,16 @@ MXParser::ExprContext* MXParser::expr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleExpr); - setState(262); + setState(261); if (!(precpred(_ctx, 2))) throw FailedPredicateException(this, "precpred(_ctx, 2)"); - setState(263); + setState(262); match(MXParser::QUESTION_MARK); - setState(264); + setState(263); expr(0); - setState(265); + setState(264); match(MXParser::COLON); - setState(266); + setState(265); expr(2); break; } @@ -2524,12 +2510,12 @@ MXParser::ExprContext* MXParser::expr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleExpr); - setState(268); + setState(267); if (!(precpred(_ctx, 1))) throw FailedPredicateException(this, "precpred(_ctx, 1)"); - setState(269); + setState(268); match(MXParser::ASSIGN); - setState(270); + setState(269); expr(1); break; } @@ -2538,47 +2524,47 @@ MXParser::ExprContext* MXParser::expr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleExpr); - setState(271); + setState(270); if (!(precpred(_ctx, 19))) throw FailedPredicateException(this, "precpred(_ctx, 19)"); - setState(272); + setState(271); match(MXParser::DOT); - setState(287); + setState(286); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 29, _ctx)) { case 1: { - setState(273); + setState(272); match(MXParser::ID); break; } case 2: { - setState(274); + setState(273); match(MXParser::ID); - setState(275); + setState(274); match(MXParser::LPAREN); - setState(284); + setState(283); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 518214813164767136) != 0)) { - setState(276); + setState(275); expr(0); - setState(281); + setState(280); _errHandler->sync(this); _la = _input->LA(1); while (_la == MXParser::COMMA) { - setState(277); + setState(276); match(MXParser::COMMA); - setState(278); + setState(277); expr(0); - setState(283); + setState(282); _errHandler->sync(this); _la = _input->LA(1); } } - setState(286); + setState(285); match(MXParser::RPAREN); break; } @@ -2593,20 +2579,20 @@ MXParser::ExprContext* MXParser::expr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleExpr); - setState(289); + setState(288); if (!(precpred(_ctx, 18))) throw FailedPredicateException(this, "precpred(_ctx, 18)"); - setState(294); + setState(293); _errHandler->sync(this); alt = 1; do { switch (alt) { case 1: { - setState(290); + setState(289); match(MXParser::LBRACKET); - setState(291); + setState(290); expr(0); - setState(292); + setState(291); match(MXParser::RBRACKET); break; } @@ -2614,7 +2600,7 @@ MXParser::ExprContext* MXParser::expr(int precedence) { default: throw NoViableAltException(this); } - setState(296); + setState(295); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 30, _ctx); } while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER); @@ -2625,10 +2611,10 @@ MXParser::ExprContext* MXParser::expr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleExpr); - setState(298); + setState(297); if (!(precpred(_ctx, 17))) throw FailedPredicateException(this, "precpred(_ctx, 17)"); - setState(299); + setState(298); _la = _input->LA(1); if (!(_la == MXParser::SELF_PLUS @@ -2646,7 +2632,7 @@ MXParser::ExprContext* MXParser::expr(int precedence) { break; } } - setState(304); + setState(303); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 32, _ctx); } @@ -2809,13 +2795,13 @@ MXParser::Basic_exprContext* MXParser::basic_expr() { exitRule(); }); try { - setState(326); + setState(325); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 35, _ctx)) { case 1: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 1); - setState(305); + setState(304); match(MXParser::THIS); break; } @@ -2823,11 +2809,11 @@ MXParser::Basic_exprContext* MXParser::basic_expr() { case 2: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 2); - setState(306); + setState(305); match(MXParser::LPAREN); - setState(307); + setState(306); expr(0); - setState(308); + setState(307); match(MXParser::RPAREN); break; } @@ -2835,7 +2821,7 @@ MXParser::Basic_exprContext* MXParser::basic_expr() { case 3: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 3); - setState(310); + setState(309); match(MXParser::ID); break; } @@ -2843,32 +2829,32 @@ MXParser::Basic_exprContext* MXParser::basic_expr() { case 4: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 4); - setState(311); + setState(310); match(MXParser::ID); - setState(312); + setState(311); match(MXParser::LPAREN); - setState(321); + setState(320); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 518214813164767136) != 0)) { - setState(313); + setState(312); expr(0); - setState(318); + setState(317); _errHandler->sync(this); _la = _input->LA(1); while (_la == MXParser::COMMA) { - setState(314); + setState(313); match(MXParser::COMMA); - setState(315); + setState(314); expr(0); - setState(320); + setState(319); _errHandler->sync(this); _la = _input->LA(1); } } - setState(323); + setState(322); match(MXParser::RPAREN); break; } @@ -2876,7 +2862,7 @@ MXParser::Basic_exprContext* MXParser::basic_expr() { case 5: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 5); - setState(324); + setState(323); formatted_string(); break; } @@ -2884,7 +2870,7 @@ MXParser::Basic_exprContext* MXParser::basic_expr() { case 6: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 6); - setState(325); + setState(324); constant(); break; } @@ -2963,37 +2949,37 @@ MXParser::Formatted_stringContext* MXParser::formatted_string() { }); try { size_t alt; - setState(340); + setState(339); _errHandler->sync(this); switch (_input->LA(1)) { case MXParser::FORMAT_STRING_WHOLE: { enterOuterAlt(_localctx, 1); - setState(328); + setState(327); match(MXParser::FORMAT_STRING_WHOLE); break; } case MXParser::FORMAT_STRING_HEAD: { enterOuterAlt(_localctx, 2); - setState(329); + setState(328); match(MXParser::FORMAT_STRING_HEAD); - setState(330); + setState(329); expr(0); - setState(335); + setState(334); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 36, _ctx); while (alt != 1 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1 + 1) { - setState(331); + setState(330); match(MXParser::FORMAT_STRING_BODY); - setState(332); + setState(331); expr(0); } - setState(337); + setState(336); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 36, _ctx); } - setState(338); + setState(337); match(MXParser::FORMAT_STRING_TAIL); break; } @@ -3088,70 +3074,70 @@ MXParser::ConstantContext* MXParser::constant() { exitRule(); }); try { - setState(359); + setState(358); _errHandler->sync(this); switch (_input->LA(1)) { case MXParser::TRUE: { enterOuterAlt(_localctx, 1); - setState(342); + setState(341); match(MXParser::TRUE); break; } case MXParser::FALSE: { enterOuterAlt(_localctx, 2); - setState(343); + setState(342); match(MXParser::FALSE); break; } case MXParser::INT_LITERAL: { enterOuterAlt(_localctx, 3); - setState(344); + setState(343); match(MXParser::INT_LITERAL); break; } case MXParser::STRING_LITERAL: { enterOuterAlt(_localctx, 4); - setState(345); + setState(344); match(MXParser::STRING_LITERAL); break; } case MXParser::NULL_: { enterOuterAlt(_localctx, 5); - setState(346); + setState(345); match(MXParser::NULL_); break; } case MXParser::LBRACE: { enterOuterAlt(_localctx, 6); - setState(347); + setState(346); match(MXParser::LBRACE); - setState(356); + setState(355); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 432627039204279168) != 0)) { - setState(348); + setState(347); constant(); - setState(353); + setState(352); _errHandler->sync(this); _la = _input->LA(1); while (_la == MXParser::COMMA) { - setState(349); + setState(348); match(MXParser::COMMA); - setState(350); + setState(349); constant(); - setState(355); + setState(354); _errHandler->sync(this); _la = _input->LA(1); } } - setState(358); + setState(357); match(MXParser::RBRACE); break; } @@ -3223,7 +3209,7 @@ MXParser::TypeContext* MXParser::type() { }); try { enterOuterAlt(_localctx, 1); - setState(361); + setState(360); _la = _input->LA(1); if (!((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 72057594037927966) != 0))) { diff --git a/src/semantic/antlr-generated/MXParser.h b/src/semantic/antlr-generated/MXParser.h index 9ca14f7..14d6bf1 100644 --- a/src/semantic/antlr-generated/MXParser.h +++ b/src/semantic/antlr-generated/MXParser.h @@ -207,8 +207,7 @@ public: antlr4::tree::TerminalNode* SEMICOLON(size_t i); antlr4::tree::TerminalNode *RPAREN(); StatementContext *statement(); - std::vector define_statement(); - Define_statementContext* define_statement(size_t i); + Define_statementContext *define_statement(); std::vector expr(); ExprContext* expr(size_t i); diff --git a/src/semantic/antlr-generated/MXParser.interp b/src/semantic/antlr-generated/MXParser.interp index 2de017a..7801e68 100644 --- a/src/semantic/antlr-generated/MXParser.interp +++ b/src/semantic/antlr-generated/MXParser.interp @@ -143,4 +143,4 @@ type atn: -[4, 1, 61, 364, 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, 1, 0, 1, 0, 1, 0, 4, 0, 30, 8, 0, 11, 0, 12, 0, 31, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 5, 1, 39, 8, 1, 10, 1, 12, 1, 42, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 49, 8, 1, 10, 1, 12, 1, 52, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 60, 8, 1, 10, 1, 12, 1, 63, 9, 1, 1, 1, 1, 1, 5, 1, 67, 8, 1, 10, 1, 12, 1, 70, 9, 1, 3, 1, 72, 8, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 83, 8, 2, 10, 2, 12, 2, 86, 9, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 5, 3, 94, 8, 3, 10, 3, 12, 3, 97, 9, 3, 1, 3, 1, 3, 1, 3, 5, 3, 102, 8, 3, 10, 3, 12, 3, 105, 9, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 5, 5, 116, 8, 5, 10, 5, 12, 5, 119, 9, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 135, 8, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 150, 8, 6, 1, 6, 3, 6, 153, 8, 6, 1, 6, 1, 6, 1, 6, 3, 6, 158, 8, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 166, 8, 6, 3, 6, 168, 8, 6, 1, 6, 1, 6, 3, 6, 172, 8, 6, 1, 7, 1, 7, 1, 7, 5, 7, 177, 8, 7, 10, 7, 12, 7, 180, 9, 7, 1, 7, 1, 7, 1, 7, 3, 7, 185, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 191, 8, 7, 5, 7, 193, 8, 7, 10, 7, 12, 7, 196, 9, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 206, 8, 8, 1, 8, 4, 8, 209, 8, 8, 11, 8, 12, 8, 210, 1, 8, 3, 8, 214, 8, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 231, 8, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 5, 8, 280, 8, 8, 10, 8, 12, 8, 283, 9, 8, 3, 8, 285, 8, 8, 1, 8, 3, 8, 288, 8, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 4, 8, 295, 8, 8, 11, 8, 12, 8, 296, 1, 8, 1, 8, 5, 8, 301, 8, 8, 10, 8, 12, 8, 304, 9, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 5, 9, 317, 8, 9, 10, 9, 12, 9, 320, 9, 9, 3, 9, 322, 8, 9, 1, 9, 1, 9, 1, 9, 3, 9, 327, 8, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 5, 10, 334, 8, 10, 10, 10, 12, 10, 337, 9, 10, 1, 10, 1, 10, 3, 10, 341, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 5, 11, 352, 8, 11, 10, 11, 12, 11, 355, 9, 11, 3, 11, 357, 8, 11, 1, 11, 3, 11, 360, 8, 11, 1, 12, 1, 12, 1, 12, 1, 335, 1, 16, 13, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 0, 7, 1, 0, 39, 40, 1, 0, 20, 22, 1, 0, 18, 19, 1, 0, 32, 33, 1, 0, 23, 26, 1, 0, 27, 28, 2, 0, 1, 4, 56, 56, 429, 0, 29, 1, 0, 0, 0, 2, 35, 1, 0, 0, 0, 4, 76, 1, 0, 0, 0, 6, 90, 1, 0, 0, 0, 8, 108, 1, 0, 0, 0, 10, 113, 1, 0, 0, 0, 12, 171, 1, 0, 0, 0, 14, 173, 1, 0, 0, 0, 16, 230, 1, 0, 0, 0, 18, 326, 1, 0, 0, 0, 20, 340, 1, 0, 0, 0, 22, 359, 1, 0, 0, 0, 24, 361, 1, 0, 0, 0, 26, 30, 3, 4, 2, 0, 27, 30, 3, 14, 7, 0, 28, 30, 3, 2, 1, 0, 29, 26, 1, 0, 0, 0, 29, 27, 1, 0, 0, 0, 29, 28, 1, 0, 0, 0, 30, 31, 1, 0, 0, 0, 31, 29, 1, 0, 0, 0, 31, 32, 1, 0, 0, 0, 32, 33, 1, 0, 0, 0, 33, 34, 5, 0, 0, 1, 34, 1, 1, 0, 0, 0, 35, 40, 3, 24, 12, 0, 36, 37, 5, 46, 0, 0, 37, 39, 5, 47, 0, 0, 38, 36, 1, 0, 0, 0, 39, 42, 1, 0, 0, 0, 40, 38, 1, 0, 0, 0, 40, 41, 1, 0, 0, 0, 41, 43, 1, 0, 0, 0, 42, 40, 1, 0, 0, 0, 43, 44, 5, 56, 0, 0, 44, 71, 5, 44, 0, 0, 45, 50, 3, 24, 12, 0, 46, 47, 5, 46, 0, 0, 47, 49, 5, 47, 0, 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, 56, 0, 0, 54, 68, 1, 0, 0, 0, 55, 56, 5, 51, 0, 0, 56, 61, 3, 24, 12, 0, 57, 58, 5, 46, 0, 0, 58, 60, 5, 47, 0, 0, 59, 57, 1, 0, 0, 0, 60, 63, 1, 0, 0, 0, 61, 59, 1, 0, 0, 0, 61, 62, 1, 0, 0, 0, 62, 64, 1, 0, 0, 0, 63, 61, 1, 0, 0, 0, 64, 65, 5, 56, 0, 0, 65, 67, 1, 0, 0, 0, 66, 55, 1, 0, 0, 0, 67, 70, 1, 0, 0, 0, 68, 66, 1, 0, 0, 0, 68, 69, 1, 0, 0, 0, 69, 72, 1, 0, 0, 0, 70, 68, 1, 0, 0, 0, 71, 45, 1, 0, 0, 0, 71, 72, 1, 0, 0, 0, 72, 73, 1, 0, 0, 0, 73, 74, 5, 45, 0, 0, 74, 75, 3, 10, 5, 0, 75, 3, 1, 0, 0, 0, 76, 77, 5, 6, 0, 0, 77, 78, 5, 56, 0, 0, 78, 84, 5, 48, 0, 0, 79, 83, 3, 6, 3, 0, 80, 83, 3, 8, 4, 0, 81, 83, 3, 2, 1, 0, 82, 79, 1, 0, 0, 0, 82, 80, 1, 0, 0, 0, 82, 81, 1, 0, 0, 0, 83, 86, 1, 0, 0, 0, 84, 82, 1, 0, 0, 0, 84, 85, 1, 0, 0, 0, 85, 87, 1, 0, 0, 0, 86, 84, 1, 0, 0, 0, 87, 88, 5, 49, 0, 0, 88, 89, 5, 50, 0, 0, 89, 5, 1, 0, 0, 0, 90, 95, 3, 24, 12, 0, 91, 92, 5, 46, 0, 0, 92, 94, 5, 47, 0, 0, 93, 91, 1, 0, 0, 0, 94, 97, 1, 0, 0, 0, 95, 93, 1, 0, 0, 0, 95, 96, 1, 0, 0, 0, 96, 98, 1, 0, 0, 0, 97, 95, 1, 0, 0, 0, 98, 103, 5, 56, 0, 0, 99, 100, 5, 51, 0, 0, 100, 102, 5, 56, 0, 0, 101, 99, 1, 0, 0, 0, 102, 105, 1, 0, 0, 0, 103, 101, 1, 0, 0, 0, 103, 104, 1, 0, 0, 0, 104, 106, 1, 0, 0, 0, 105, 103, 1, 0, 0, 0, 106, 107, 5, 50, 0, 0, 107, 7, 1, 0, 0, 0, 108, 109, 5, 56, 0, 0, 109, 110, 5, 44, 0, 0, 110, 111, 5, 45, 0, 0, 111, 112, 3, 10, 5, 0, 112, 9, 1, 0, 0, 0, 113, 117, 5, 48, 0, 0, 114, 116, 3, 12, 6, 0, 115, 114, 1, 0, 0, 0, 116, 119, 1, 0, 0, 0, 117, 115, 1, 0, 0, 0, 117, 118, 1, 0, 0, 0, 118, 120, 1, 0, 0, 0, 119, 117, 1, 0, 0, 0, 120, 121, 5, 49, 0, 0, 121, 11, 1, 0, 0, 0, 122, 172, 5, 50, 0, 0, 123, 172, 3, 14, 7, 0, 124, 125, 3, 16, 8, 0, 125, 126, 5, 50, 0, 0, 126, 172, 1, 0, 0, 0, 127, 128, 5, 11, 0, 0, 128, 129, 5, 44, 0, 0, 129, 130, 3, 16, 8, 0, 130, 131, 5, 45, 0, 0, 131, 134, 3, 12, 6, 0, 132, 133, 5, 12, 0, 0, 133, 135, 3, 12, 6, 0, 134, 132, 1, 0, 0, 0, 134, 135, 1, 0, 0, 0, 135, 172, 1, 0, 0, 0, 136, 137, 5, 14, 0, 0, 137, 138, 5, 44, 0, 0, 138, 139, 3, 16, 8, 0, 139, 140, 5, 45, 0, 0, 140, 141, 3, 12, 6, 0, 141, 172, 1, 0, 0, 0, 142, 143, 5, 13, 0, 0, 143, 149, 5, 44, 0, 0, 144, 150, 3, 14, 7, 0, 145, 146, 3, 16, 8, 0, 146, 147, 5, 50, 0, 0, 147, 150, 1, 0, 0, 0, 148, 150, 5, 50, 0, 0, 149, 144, 1, 0, 0, 0, 149, 145, 1, 0, 0, 0, 149, 148, 1, 0, 0, 0, 150, 152, 1, 0, 0, 0, 151, 153, 3, 16, 8, 0, 152, 151, 1, 0, 0, 0, 152, 153, 1, 0, 0, 0, 153, 154, 1, 0, 0, 0, 154, 157, 5, 50, 0, 0, 155, 158, 3, 14, 7, 0, 156, 158, 3, 16, 8, 0, 157, 155, 1, 0, 0, 0, 157, 156, 1, 0, 0, 0, 157, 158, 1, 0, 0, 0, 158, 159, 1, 0, 0, 0, 159, 160, 5, 45, 0, 0, 160, 172, 3, 12, 6, 0, 161, 168, 5, 15, 0, 0, 162, 168, 5, 16, 0, 0, 163, 165, 5, 17, 0, 0, 164, 166, 3, 16, 8, 0, 165, 164, 1, 0, 0, 0, 165, 166, 1, 0, 0, 0, 166, 168, 1, 0, 0, 0, 167, 161, 1, 0, 0, 0, 167, 162, 1, 0, 0, 0, 167, 163, 1, 0, 0, 0, 168, 169, 1, 0, 0, 0, 169, 172, 5, 50, 0, 0, 170, 172, 3, 10, 5, 0, 171, 122, 1, 0, 0, 0, 171, 123, 1, 0, 0, 0, 171, 124, 1, 0, 0, 0, 171, 127, 1, 0, 0, 0, 171, 136, 1, 0, 0, 0, 171, 142, 1, 0, 0, 0, 171, 167, 1, 0, 0, 0, 171, 170, 1, 0, 0, 0, 172, 13, 1, 0, 0, 0, 173, 178, 3, 24, 12, 0, 174, 175, 5, 46, 0, 0, 175, 177, 5, 47, 0, 0, 176, 174, 1, 0, 0, 0, 177, 180, 1, 0, 0, 0, 178, 176, 1, 0, 0, 0, 178, 179, 1, 0, 0, 0, 179, 181, 1, 0, 0, 0, 180, 178, 1, 0, 0, 0, 181, 184, 5, 56, 0, 0, 182, 183, 5, 38, 0, 0, 183, 185, 3, 16, 8, 0, 184, 182, 1, 0, 0, 0, 184, 185, 1, 0, 0, 0, 185, 194, 1, 0, 0, 0, 186, 187, 5, 51, 0, 0, 187, 190, 5, 56, 0, 0, 188, 189, 5, 38, 0, 0, 189, 191, 3, 16, 8, 0, 190, 188, 1, 0, 0, 0, 190, 191, 1, 0, 0, 0, 191, 193, 1, 0, 0, 0, 192, 186, 1, 0, 0, 0, 193, 196, 1, 0, 0, 0, 194, 192, 1, 0, 0, 0, 194, 195, 1, 0, 0, 0, 195, 197, 1, 0, 0, 0, 196, 194, 1, 0, 0, 0, 197, 198, 5, 50, 0, 0, 198, 15, 1, 0, 0, 0, 199, 200, 6, 8, -1, 0, 200, 231, 3, 18, 9, 0, 201, 202, 5, 5, 0, 0, 202, 208, 3, 24, 12, 0, 203, 205, 5, 46, 0, 0, 204, 206, 3, 16, 8, 0, 205, 204, 1, 0, 0, 0, 205, 206, 1, 0, 0, 0, 206, 207, 1, 0, 0, 0, 207, 209, 5, 47, 0, 0, 208, 203, 1, 0, 0, 0, 209, 210, 1, 0, 0, 0, 210, 208, 1, 0, 0, 0, 210, 211, 1, 0, 0, 0, 211, 213, 1, 0, 0, 0, 212, 214, 3, 22, 11, 0, 213, 212, 1, 0, 0, 0, 213, 214, 1, 0, 0, 0, 214, 231, 1, 0, 0, 0, 215, 216, 5, 5, 0, 0, 216, 217, 3, 24, 12, 0, 217, 218, 5, 44, 0, 0, 218, 219, 5, 45, 0, 0, 219, 231, 1, 0, 0, 0, 220, 221, 5, 5, 0, 0, 221, 231, 3, 24, 12, 0, 222, 223, 7, 0, 0, 0, 223, 231, 3, 16, 8, 16, 224, 225, 5, 19, 0, 0, 225, 231, 3, 16, 8, 15, 226, 227, 5, 31, 0, 0, 227, 231, 3, 16, 8, 14, 228, 229, 5, 37, 0, 0, 229, 231, 3, 16, 8, 13, 230, 199, 1, 0, 0, 0, 230, 201, 1, 0, 0, 0, 230, 215, 1, 0, 0, 0, 230, 220, 1, 0, 0, 0, 230, 222, 1, 0, 0, 0, 230, 224, 1, 0, 0, 0, 230, 226, 1, 0, 0, 0, 230, 228, 1, 0, 0, 0, 231, 302, 1, 0, 0, 0, 232, 233, 10, 12, 0, 0, 233, 234, 7, 1, 0, 0, 234, 301, 3, 16, 8, 13, 235, 236, 10, 11, 0, 0, 236, 237, 7, 2, 0, 0, 237, 301, 3, 16, 8, 12, 238, 239, 10, 10, 0, 0, 239, 240, 7, 3, 0, 0, 240, 301, 3, 16, 8, 11, 241, 242, 10, 9, 0, 0, 242, 243, 7, 4, 0, 0, 243, 301, 3, 16, 8, 10, 244, 245, 10, 8, 0, 0, 245, 246, 7, 5, 0, 0, 246, 301, 3, 16, 8, 9, 247, 248, 10, 7, 0, 0, 248, 249, 5, 34, 0, 0, 249, 301, 3, 16, 8, 8, 250, 251, 10, 6, 0, 0, 251, 252, 5, 36, 0, 0, 252, 301, 3, 16, 8, 7, 253, 254, 10, 5, 0, 0, 254, 255, 5, 35, 0, 0, 255, 301, 3, 16, 8, 6, 256, 257, 10, 4, 0, 0, 257, 258, 5, 29, 0, 0, 258, 301, 3, 16, 8, 5, 259, 260, 10, 3, 0, 0, 260, 261, 5, 30, 0, 0, 261, 301, 3, 16, 8, 4, 262, 263, 10, 2, 0, 0, 263, 264, 5, 42, 0, 0, 264, 265, 3, 16, 8, 0, 265, 266, 5, 43, 0, 0, 266, 267, 3, 16, 8, 2, 267, 301, 1, 0, 0, 0, 268, 269, 10, 1, 0, 0, 269, 270, 5, 38, 0, 0, 270, 301, 3, 16, 8, 1, 271, 272, 10, 19, 0, 0, 272, 287, 5, 41, 0, 0, 273, 288, 5, 56, 0, 0, 274, 275, 5, 56, 0, 0, 275, 284, 5, 44, 0, 0, 276, 281, 3, 16, 8, 0, 277, 278, 5, 51, 0, 0, 278, 280, 3, 16, 8, 0, 279, 277, 1, 0, 0, 0, 280, 283, 1, 0, 0, 0, 281, 279, 1, 0, 0, 0, 281, 282, 1, 0, 0, 0, 282, 285, 1, 0, 0, 0, 283, 281, 1, 0, 0, 0, 284, 276, 1, 0, 0, 0, 284, 285, 1, 0, 0, 0, 285, 286, 1, 0, 0, 0, 286, 288, 5, 45, 0, 0, 287, 273, 1, 0, 0, 0, 287, 274, 1, 0, 0, 0, 288, 301, 1, 0, 0, 0, 289, 294, 10, 18, 0, 0, 290, 291, 5, 46, 0, 0, 291, 292, 3, 16, 8, 0, 292, 293, 5, 47, 0, 0, 293, 295, 1, 0, 0, 0, 294, 290, 1, 0, 0, 0, 295, 296, 1, 0, 0, 0, 296, 294, 1, 0, 0, 0, 296, 297, 1, 0, 0, 0, 297, 301, 1, 0, 0, 0, 298, 299, 10, 17, 0, 0, 299, 301, 7, 0, 0, 0, 300, 232, 1, 0, 0, 0, 300, 235, 1, 0, 0, 0, 300, 238, 1, 0, 0, 0, 300, 241, 1, 0, 0, 0, 300, 244, 1, 0, 0, 0, 300, 247, 1, 0, 0, 0, 300, 250, 1, 0, 0, 0, 300, 253, 1, 0, 0, 0, 300, 256, 1, 0, 0, 0, 300, 259, 1, 0, 0, 0, 300, 262, 1, 0, 0, 0, 300, 268, 1, 0, 0, 0, 300, 271, 1, 0, 0, 0, 300, 289, 1, 0, 0, 0, 300, 298, 1, 0, 0, 0, 301, 304, 1, 0, 0, 0, 302, 300, 1, 0, 0, 0, 302, 303, 1, 0, 0, 0, 303, 17, 1, 0, 0, 0, 304, 302, 1, 0, 0, 0, 305, 327, 5, 10, 0, 0, 306, 307, 5, 44, 0, 0, 307, 308, 3, 16, 8, 0, 308, 309, 5, 45, 0, 0, 309, 327, 1, 0, 0, 0, 310, 327, 5, 56, 0, 0, 311, 312, 5, 56, 0, 0, 312, 321, 5, 44, 0, 0, 313, 318, 3, 16, 8, 0, 314, 315, 5, 51, 0, 0, 315, 317, 3, 16, 8, 0, 316, 314, 1, 0, 0, 0, 317, 320, 1, 0, 0, 0, 318, 316, 1, 0, 0, 0, 318, 319, 1, 0, 0, 0, 319, 322, 1, 0, 0, 0, 320, 318, 1, 0, 0, 0, 321, 313, 1, 0, 0, 0, 321, 322, 1, 0, 0, 0, 322, 323, 1, 0, 0, 0, 323, 327, 5, 45, 0, 0, 324, 327, 3, 20, 10, 0, 325, 327, 3, 22, 11, 0, 326, 305, 1, 0, 0, 0, 326, 306, 1, 0, 0, 0, 326, 310, 1, 0, 0, 0, 326, 311, 1, 0, 0, 0, 326, 324, 1, 0, 0, 0, 326, 325, 1, 0, 0, 0, 327, 19, 1, 0, 0, 0, 328, 341, 5, 52, 0, 0, 329, 330, 5, 53, 0, 0, 330, 335, 3, 16, 8, 0, 331, 332, 5, 55, 0, 0, 332, 334, 3, 16, 8, 0, 333, 331, 1, 0, 0, 0, 334, 337, 1, 0, 0, 0, 335, 336, 1, 0, 0, 0, 335, 333, 1, 0, 0, 0, 336, 338, 1, 0, 0, 0, 337, 335, 1, 0, 0, 0, 338, 339, 5, 54, 0, 0, 339, 341, 1, 0, 0, 0, 340, 328, 1, 0, 0, 0, 340, 329, 1, 0, 0, 0, 341, 21, 1, 0, 0, 0, 342, 360, 5, 8, 0, 0, 343, 360, 5, 9, 0, 0, 344, 360, 5, 57, 0, 0, 345, 360, 5, 58, 0, 0, 346, 360, 5, 7, 0, 0, 347, 356, 5, 48, 0, 0, 348, 353, 3, 22, 11, 0, 349, 350, 5, 51, 0, 0, 350, 352, 3, 22, 11, 0, 351, 349, 1, 0, 0, 0, 352, 355, 1, 0, 0, 0, 353, 351, 1, 0, 0, 0, 353, 354, 1, 0, 0, 0, 354, 357, 1, 0, 0, 0, 355, 353, 1, 0, 0, 0, 356, 348, 1, 0, 0, 0, 356, 357, 1, 0, 0, 0, 357, 358, 1, 0, 0, 0, 358, 360, 5, 49, 0, 0, 359, 342, 1, 0, 0, 0, 359, 343, 1, 0, 0, 0, 359, 344, 1, 0, 0, 0, 359, 345, 1, 0, 0, 0, 359, 346, 1, 0, 0, 0, 359, 347, 1, 0, 0, 0, 360, 23, 1, 0, 0, 0, 361, 362, 7, 6, 0, 0, 362, 25, 1, 0, 0, 0, 41, 29, 31, 40, 50, 61, 68, 71, 82, 84, 95, 103, 117, 134, 149, 152, 157, 165, 167, 171, 178, 184, 190, 194, 205, 210, 213, 230, 281, 284, 287, 296, 300, 302, 318, 321, 326, 335, 340, 353, 356, 359] \ No newline at end of file +[4, 1, 61, 363, 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, 1, 0, 1, 0, 1, 0, 4, 0, 30, 8, 0, 11, 0, 12, 0, 31, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 5, 1, 39, 8, 1, 10, 1, 12, 1, 42, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 49, 8, 1, 10, 1, 12, 1, 52, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 60, 8, 1, 10, 1, 12, 1, 63, 9, 1, 1, 1, 1, 1, 5, 1, 67, 8, 1, 10, 1, 12, 1, 70, 9, 1, 3, 1, 72, 8, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 83, 8, 2, 10, 2, 12, 2, 86, 9, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 5, 3, 94, 8, 3, 10, 3, 12, 3, 97, 9, 3, 1, 3, 1, 3, 1, 3, 5, 3, 102, 8, 3, 10, 3, 12, 3, 105, 9, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 5, 5, 116, 8, 5, 10, 5, 12, 5, 119, 9, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 135, 8, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 150, 8, 6, 1, 6, 3, 6, 153, 8, 6, 1, 6, 1, 6, 3, 6, 157, 8, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 165, 8, 6, 3, 6, 167, 8, 6, 1, 6, 1, 6, 3, 6, 171, 8, 6, 1, 7, 1, 7, 1, 7, 5, 7, 176, 8, 7, 10, 7, 12, 7, 179, 9, 7, 1, 7, 1, 7, 1, 7, 3, 7, 184, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 190, 8, 7, 5, 7, 192, 8, 7, 10, 7, 12, 7, 195, 9, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 205, 8, 8, 1, 8, 4, 8, 208, 8, 8, 11, 8, 12, 8, 209, 1, 8, 3, 8, 213, 8, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 230, 8, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 5, 8, 279, 8, 8, 10, 8, 12, 8, 282, 9, 8, 3, 8, 284, 8, 8, 1, 8, 3, 8, 287, 8, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 4, 8, 294, 8, 8, 11, 8, 12, 8, 295, 1, 8, 1, 8, 5, 8, 300, 8, 8, 10, 8, 12, 8, 303, 9, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 5, 9, 316, 8, 9, 10, 9, 12, 9, 319, 9, 9, 3, 9, 321, 8, 9, 1, 9, 1, 9, 1, 9, 3, 9, 326, 8, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 5, 10, 333, 8, 10, 10, 10, 12, 10, 336, 9, 10, 1, 10, 1, 10, 3, 10, 340, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 5, 11, 351, 8, 11, 10, 11, 12, 11, 354, 9, 11, 3, 11, 356, 8, 11, 1, 11, 3, 11, 359, 8, 11, 1, 12, 1, 12, 1, 12, 1, 334, 1, 16, 13, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 0, 7, 1, 0, 39, 40, 1, 0, 20, 22, 1, 0, 18, 19, 1, 0, 32, 33, 1, 0, 23, 26, 1, 0, 27, 28, 2, 0, 1, 4, 56, 56, 427, 0, 29, 1, 0, 0, 0, 2, 35, 1, 0, 0, 0, 4, 76, 1, 0, 0, 0, 6, 90, 1, 0, 0, 0, 8, 108, 1, 0, 0, 0, 10, 113, 1, 0, 0, 0, 12, 170, 1, 0, 0, 0, 14, 172, 1, 0, 0, 0, 16, 229, 1, 0, 0, 0, 18, 325, 1, 0, 0, 0, 20, 339, 1, 0, 0, 0, 22, 358, 1, 0, 0, 0, 24, 360, 1, 0, 0, 0, 26, 30, 3, 4, 2, 0, 27, 30, 3, 14, 7, 0, 28, 30, 3, 2, 1, 0, 29, 26, 1, 0, 0, 0, 29, 27, 1, 0, 0, 0, 29, 28, 1, 0, 0, 0, 30, 31, 1, 0, 0, 0, 31, 29, 1, 0, 0, 0, 31, 32, 1, 0, 0, 0, 32, 33, 1, 0, 0, 0, 33, 34, 5, 0, 0, 1, 34, 1, 1, 0, 0, 0, 35, 40, 3, 24, 12, 0, 36, 37, 5, 46, 0, 0, 37, 39, 5, 47, 0, 0, 38, 36, 1, 0, 0, 0, 39, 42, 1, 0, 0, 0, 40, 38, 1, 0, 0, 0, 40, 41, 1, 0, 0, 0, 41, 43, 1, 0, 0, 0, 42, 40, 1, 0, 0, 0, 43, 44, 5, 56, 0, 0, 44, 71, 5, 44, 0, 0, 45, 50, 3, 24, 12, 0, 46, 47, 5, 46, 0, 0, 47, 49, 5, 47, 0, 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, 56, 0, 0, 54, 68, 1, 0, 0, 0, 55, 56, 5, 51, 0, 0, 56, 61, 3, 24, 12, 0, 57, 58, 5, 46, 0, 0, 58, 60, 5, 47, 0, 0, 59, 57, 1, 0, 0, 0, 60, 63, 1, 0, 0, 0, 61, 59, 1, 0, 0, 0, 61, 62, 1, 0, 0, 0, 62, 64, 1, 0, 0, 0, 63, 61, 1, 0, 0, 0, 64, 65, 5, 56, 0, 0, 65, 67, 1, 0, 0, 0, 66, 55, 1, 0, 0, 0, 67, 70, 1, 0, 0, 0, 68, 66, 1, 0, 0, 0, 68, 69, 1, 0, 0, 0, 69, 72, 1, 0, 0, 0, 70, 68, 1, 0, 0, 0, 71, 45, 1, 0, 0, 0, 71, 72, 1, 0, 0, 0, 72, 73, 1, 0, 0, 0, 73, 74, 5, 45, 0, 0, 74, 75, 3, 10, 5, 0, 75, 3, 1, 0, 0, 0, 76, 77, 5, 6, 0, 0, 77, 78, 5, 56, 0, 0, 78, 84, 5, 48, 0, 0, 79, 83, 3, 6, 3, 0, 80, 83, 3, 8, 4, 0, 81, 83, 3, 2, 1, 0, 82, 79, 1, 0, 0, 0, 82, 80, 1, 0, 0, 0, 82, 81, 1, 0, 0, 0, 83, 86, 1, 0, 0, 0, 84, 82, 1, 0, 0, 0, 84, 85, 1, 0, 0, 0, 85, 87, 1, 0, 0, 0, 86, 84, 1, 0, 0, 0, 87, 88, 5, 49, 0, 0, 88, 89, 5, 50, 0, 0, 89, 5, 1, 0, 0, 0, 90, 95, 3, 24, 12, 0, 91, 92, 5, 46, 0, 0, 92, 94, 5, 47, 0, 0, 93, 91, 1, 0, 0, 0, 94, 97, 1, 0, 0, 0, 95, 93, 1, 0, 0, 0, 95, 96, 1, 0, 0, 0, 96, 98, 1, 0, 0, 0, 97, 95, 1, 0, 0, 0, 98, 103, 5, 56, 0, 0, 99, 100, 5, 51, 0, 0, 100, 102, 5, 56, 0, 0, 101, 99, 1, 0, 0, 0, 102, 105, 1, 0, 0, 0, 103, 101, 1, 0, 0, 0, 103, 104, 1, 0, 0, 0, 104, 106, 1, 0, 0, 0, 105, 103, 1, 0, 0, 0, 106, 107, 5, 50, 0, 0, 107, 7, 1, 0, 0, 0, 108, 109, 5, 56, 0, 0, 109, 110, 5, 44, 0, 0, 110, 111, 5, 45, 0, 0, 111, 112, 3, 10, 5, 0, 112, 9, 1, 0, 0, 0, 113, 117, 5, 48, 0, 0, 114, 116, 3, 12, 6, 0, 115, 114, 1, 0, 0, 0, 116, 119, 1, 0, 0, 0, 117, 115, 1, 0, 0, 0, 117, 118, 1, 0, 0, 0, 118, 120, 1, 0, 0, 0, 119, 117, 1, 0, 0, 0, 120, 121, 5, 49, 0, 0, 121, 11, 1, 0, 0, 0, 122, 171, 5, 50, 0, 0, 123, 171, 3, 14, 7, 0, 124, 125, 3, 16, 8, 0, 125, 126, 5, 50, 0, 0, 126, 171, 1, 0, 0, 0, 127, 128, 5, 11, 0, 0, 128, 129, 5, 44, 0, 0, 129, 130, 3, 16, 8, 0, 130, 131, 5, 45, 0, 0, 131, 134, 3, 12, 6, 0, 132, 133, 5, 12, 0, 0, 133, 135, 3, 12, 6, 0, 134, 132, 1, 0, 0, 0, 134, 135, 1, 0, 0, 0, 135, 171, 1, 0, 0, 0, 136, 137, 5, 14, 0, 0, 137, 138, 5, 44, 0, 0, 138, 139, 3, 16, 8, 0, 139, 140, 5, 45, 0, 0, 140, 141, 3, 12, 6, 0, 141, 171, 1, 0, 0, 0, 142, 143, 5, 13, 0, 0, 143, 149, 5, 44, 0, 0, 144, 150, 3, 14, 7, 0, 145, 146, 3, 16, 8, 0, 146, 147, 5, 50, 0, 0, 147, 150, 1, 0, 0, 0, 148, 150, 5, 50, 0, 0, 149, 144, 1, 0, 0, 0, 149, 145, 1, 0, 0, 0, 149, 148, 1, 0, 0, 0, 150, 152, 1, 0, 0, 0, 151, 153, 3, 16, 8, 0, 152, 151, 1, 0, 0, 0, 152, 153, 1, 0, 0, 0, 153, 154, 1, 0, 0, 0, 154, 156, 5, 50, 0, 0, 155, 157, 3, 16, 8, 0, 156, 155, 1, 0, 0, 0, 156, 157, 1, 0, 0, 0, 157, 158, 1, 0, 0, 0, 158, 159, 5, 45, 0, 0, 159, 171, 3, 12, 6, 0, 160, 167, 5, 15, 0, 0, 161, 167, 5, 16, 0, 0, 162, 164, 5, 17, 0, 0, 163, 165, 3, 16, 8, 0, 164, 163, 1, 0, 0, 0, 164, 165, 1, 0, 0, 0, 165, 167, 1, 0, 0, 0, 166, 160, 1, 0, 0, 0, 166, 161, 1, 0, 0, 0, 166, 162, 1, 0, 0, 0, 167, 168, 1, 0, 0, 0, 168, 171, 5, 50, 0, 0, 169, 171, 3, 10, 5, 0, 170, 122, 1, 0, 0, 0, 170, 123, 1, 0, 0, 0, 170, 124, 1, 0, 0, 0, 170, 127, 1, 0, 0, 0, 170, 136, 1, 0, 0, 0, 170, 142, 1, 0, 0, 0, 170, 166, 1, 0, 0, 0, 170, 169, 1, 0, 0, 0, 171, 13, 1, 0, 0, 0, 172, 177, 3, 24, 12, 0, 173, 174, 5, 46, 0, 0, 174, 176, 5, 47, 0, 0, 175, 173, 1, 0, 0, 0, 176, 179, 1, 0, 0, 0, 177, 175, 1, 0, 0, 0, 177, 178, 1, 0, 0, 0, 178, 180, 1, 0, 0, 0, 179, 177, 1, 0, 0, 0, 180, 183, 5, 56, 0, 0, 181, 182, 5, 38, 0, 0, 182, 184, 3, 16, 8, 0, 183, 181, 1, 0, 0, 0, 183, 184, 1, 0, 0, 0, 184, 193, 1, 0, 0, 0, 185, 186, 5, 51, 0, 0, 186, 189, 5, 56, 0, 0, 187, 188, 5, 38, 0, 0, 188, 190, 3, 16, 8, 0, 189, 187, 1, 0, 0, 0, 189, 190, 1, 0, 0, 0, 190, 192, 1, 0, 0, 0, 191, 185, 1, 0, 0, 0, 192, 195, 1, 0, 0, 0, 193, 191, 1, 0, 0, 0, 193, 194, 1, 0, 0, 0, 194, 196, 1, 0, 0, 0, 195, 193, 1, 0, 0, 0, 196, 197, 5, 50, 0, 0, 197, 15, 1, 0, 0, 0, 198, 199, 6, 8, -1, 0, 199, 230, 3, 18, 9, 0, 200, 201, 5, 5, 0, 0, 201, 207, 3, 24, 12, 0, 202, 204, 5, 46, 0, 0, 203, 205, 3, 16, 8, 0, 204, 203, 1, 0, 0, 0, 204, 205, 1, 0, 0, 0, 205, 206, 1, 0, 0, 0, 206, 208, 5, 47, 0, 0, 207, 202, 1, 0, 0, 0, 208, 209, 1, 0, 0, 0, 209, 207, 1, 0, 0, 0, 209, 210, 1, 0, 0, 0, 210, 212, 1, 0, 0, 0, 211, 213, 3, 22, 11, 0, 212, 211, 1, 0, 0, 0, 212, 213, 1, 0, 0, 0, 213, 230, 1, 0, 0, 0, 214, 215, 5, 5, 0, 0, 215, 216, 3, 24, 12, 0, 216, 217, 5, 44, 0, 0, 217, 218, 5, 45, 0, 0, 218, 230, 1, 0, 0, 0, 219, 220, 5, 5, 0, 0, 220, 230, 3, 24, 12, 0, 221, 222, 7, 0, 0, 0, 222, 230, 3, 16, 8, 16, 223, 224, 5, 19, 0, 0, 224, 230, 3, 16, 8, 15, 225, 226, 5, 31, 0, 0, 226, 230, 3, 16, 8, 14, 227, 228, 5, 37, 0, 0, 228, 230, 3, 16, 8, 13, 229, 198, 1, 0, 0, 0, 229, 200, 1, 0, 0, 0, 229, 214, 1, 0, 0, 0, 229, 219, 1, 0, 0, 0, 229, 221, 1, 0, 0, 0, 229, 223, 1, 0, 0, 0, 229, 225, 1, 0, 0, 0, 229, 227, 1, 0, 0, 0, 230, 301, 1, 0, 0, 0, 231, 232, 10, 12, 0, 0, 232, 233, 7, 1, 0, 0, 233, 300, 3, 16, 8, 13, 234, 235, 10, 11, 0, 0, 235, 236, 7, 2, 0, 0, 236, 300, 3, 16, 8, 12, 237, 238, 10, 10, 0, 0, 238, 239, 7, 3, 0, 0, 239, 300, 3, 16, 8, 11, 240, 241, 10, 9, 0, 0, 241, 242, 7, 4, 0, 0, 242, 300, 3, 16, 8, 10, 243, 244, 10, 8, 0, 0, 244, 245, 7, 5, 0, 0, 245, 300, 3, 16, 8, 9, 246, 247, 10, 7, 0, 0, 247, 248, 5, 34, 0, 0, 248, 300, 3, 16, 8, 8, 249, 250, 10, 6, 0, 0, 250, 251, 5, 36, 0, 0, 251, 300, 3, 16, 8, 7, 252, 253, 10, 5, 0, 0, 253, 254, 5, 35, 0, 0, 254, 300, 3, 16, 8, 6, 255, 256, 10, 4, 0, 0, 256, 257, 5, 29, 0, 0, 257, 300, 3, 16, 8, 5, 258, 259, 10, 3, 0, 0, 259, 260, 5, 30, 0, 0, 260, 300, 3, 16, 8, 4, 261, 262, 10, 2, 0, 0, 262, 263, 5, 42, 0, 0, 263, 264, 3, 16, 8, 0, 264, 265, 5, 43, 0, 0, 265, 266, 3, 16, 8, 2, 266, 300, 1, 0, 0, 0, 267, 268, 10, 1, 0, 0, 268, 269, 5, 38, 0, 0, 269, 300, 3, 16, 8, 1, 270, 271, 10, 19, 0, 0, 271, 286, 5, 41, 0, 0, 272, 287, 5, 56, 0, 0, 273, 274, 5, 56, 0, 0, 274, 283, 5, 44, 0, 0, 275, 280, 3, 16, 8, 0, 276, 277, 5, 51, 0, 0, 277, 279, 3, 16, 8, 0, 278, 276, 1, 0, 0, 0, 279, 282, 1, 0, 0, 0, 280, 278, 1, 0, 0, 0, 280, 281, 1, 0, 0, 0, 281, 284, 1, 0, 0, 0, 282, 280, 1, 0, 0, 0, 283, 275, 1, 0, 0, 0, 283, 284, 1, 0, 0, 0, 284, 285, 1, 0, 0, 0, 285, 287, 5, 45, 0, 0, 286, 272, 1, 0, 0, 0, 286, 273, 1, 0, 0, 0, 287, 300, 1, 0, 0, 0, 288, 293, 10, 18, 0, 0, 289, 290, 5, 46, 0, 0, 290, 291, 3, 16, 8, 0, 291, 292, 5, 47, 0, 0, 292, 294, 1, 0, 0, 0, 293, 289, 1, 0, 0, 0, 294, 295, 1, 0, 0, 0, 295, 293, 1, 0, 0, 0, 295, 296, 1, 0, 0, 0, 296, 300, 1, 0, 0, 0, 297, 298, 10, 17, 0, 0, 298, 300, 7, 0, 0, 0, 299, 231, 1, 0, 0, 0, 299, 234, 1, 0, 0, 0, 299, 237, 1, 0, 0, 0, 299, 240, 1, 0, 0, 0, 299, 243, 1, 0, 0, 0, 299, 246, 1, 0, 0, 0, 299, 249, 1, 0, 0, 0, 299, 252, 1, 0, 0, 0, 299, 255, 1, 0, 0, 0, 299, 258, 1, 0, 0, 0, 299, 261, 1, 0, 0, 0, 299, 267, 1, 0, 0, 0, 299, 270, 1, 0, 0, 0, 299, 288, 1, 0, 0, 0, 299, 297, 1, 0, 0, 0, 300, 303, 1, 0, 0, 0, 301, 299, 1, 0, 0, 0, 301, 302, 1, 0, 0, 0, 302, 17, 1, 0, 0, 0, 303, 301, 1, 0, 0, 0, 304, 326, 5, 10, 0, 0, 305, 306, 5, 44, 0, 0, 306, 307, 3, 16, 8, 0, 307, 308, 5, 45, 0, 0, 308, 326, 1, 0, 0, 0, 309, 326, 5, 56, 0, 0, 310, 311, 5, 56, 0, 0, 311, 320, 5, 44, 0, 0, 312, 317, 3, 16, 8, 0, 313, 314, 5, 51, 0, 0, 314, 316, 3, 16, 8, 0, 315, 313, 1, 0, 0, 0, 316, 319, 1, 0, 0, 0, 317, 315, 1, 0, 0, 0, 317, 318, 1, 0, 0, 0, 318, 321, 1, 0, 0, 0, 319, 317, 1, 0, 0, 0, 320, 312, 1, 0, 0, 0, 320, 321, 1, 0, 0, 0, 321, 322, 1, 0, 0, 0, 322, 326, 5, 45, 0, 0, 323, 326, 3, 20, 10, 0, 324, 326, 3, 22, 11, 0, 325, 304, 1, 0, 0, 0, 325, 305, 1, 0, 0, 0, 325, 309, 1, 0, 0, 0, 325, 310, 1, 0, 0, 0, 325, 323, 1, 0, 0, 0, 325, 324, 1, 0, 0, 0, 326, 19, 1, 0, 0, 0, 327, 340, 5, 52, 0, 0, 328, 329, 5, 53, 0, 0, 329, 334, 3, 16, 8, 0, 330, 331, 5, 55, 0, 0, 331, 333, 3, 16, 8, 0, 332, 330, 1, 0, 0, 0, 333, 336, 1, 0, 0, 0, 334, 335, 1, 0, 0, 0, 334, 332, 1, 0, 0, 0, 335, 337, 1, 0, 0, 0, 336, 334, 1, 0, 0, 0, 337, 338, 5, 54, 0, 0, 338, 340, 1, 0, 0, 0, 339, 327, 1, 0, 0, 0, 339, 328, 1, 0, 0, 0, 340, 21, 1, 0, 0, 0, 341, 359, 5, 8, 0, 0, 342, 359, 5, 9, 0, 0, 343, 359, 5, 57, 0, 0, 344, 359, 5, 58, 0, 0, 345, 359, 5, 7, 0, 0, 346, 355, 5, 48, 0, 0, 347, 352, 3, 22, 11, 0, 348, 349, 5, 51, 0, 0, 349, 351, 3, 22, 11, 0, 350, 348, 1, 0, 0, 0, 351, 354, 1, 0, 0, 0, 352, 350, 1, 0, 0, 0, 352, 353, 1, 0, 0, 0, 353, 356, 1, 0, 0, 0, 354, 352, 1, 0, 0, 0, 355, 347, 1, 0, 0, 0, 355, 356, 1, 0, 0, 0, 356, 357, 1, 0, 0, 0, 357, 359, 5, 49, 0, 0, 358, 341, 1, 0, 0, 0, 358, 342, 1, 0, 0, 0, 358, 343, 1, 0, 0, 0, 358, 344, 1, 0, 0, 0, 358, 345, 1, 0, 0, 0, 358, 346, 1, 0, 0, 0, 359, 23, 1, 0, 0, 0, 360, 361, 7, 6, 0, 0, 361, 25, 1, 0, 0, 0, 41, 29, 31, 40, 50, 61, 68, 71, 82, 84, 95, 103, 117, 134, 149, 152, 156, 164, 166, 170, 177, 183, 189, 193, 204, 209, 212, 229, 280, 283, 286, 295, 299, 301, 317, 320, 325, 334, 339, 352, 355, 358] \ No newline at end of file diff --git a/src/semantic/visitor.cpp b/src/semantic/visitor.cpp index 47fb996..4dc7a4f 100644 --- a/src/semantic/visitor.cpp +++ b/src/semantic/visitor.cpp @@ -207,6 +207,7 @@ std::any Visitor::visitClass_constructor(MXParser::Class_constructorContext *con construct_func->func_body = std::dynamic_pointer_cast( std::any_cast>(visit(context->suite()))); + std::cerr << std::string(nodetype_stk.size() * 2, ' ') << "constructor body visited" << std::endl; nodetype_stk.pop_back(); return construct_func; @@ -219,6 +220,7 @@ std::any Visitor::visitSuite(MXParser::SuiteContext *context) { suite_node->end_line = context->getStop()->getLine(); suite_node->end_char_pos = context->getStop()->getCharPositionInLine(); nodetype_stk.push_back(ASTNodeType::SuiteStatement); + std::cerr << std::string(nodetype_stk.size() * 2, ' ') << "Adding suite statements" << std::endl; std::vector stmts = context->statement(); for (auto stmt : stmts) { @@ -249,6 +251,7 @@ std::any Visitor::visitExpr_statement(MXParser::Expr_statementContext *context) expr_stmt->end_line = context->getStop()->getLine(); expr_stmt->end_char_pos = context->getStop()->getCharPositionInLine(); nodetype_stk.push_back(ASTNodeType::ExprStatement); + std::cerr << std::string(nodetype_stk.size() * 2, ' ') << "Adding an expression statement" << std::endl; expr_stmt->expr = std::any_cast>(visit(context->expr())); nodetype_stk.pop_back(); return std::static_pointer_cast(expr_stmt); @@ -261,6 +264,7 @@ std::any Visitor::visitIf_statement(MXParser::If_statementContext *context) { if_stmt->end_line = context->getStop()->getLine(); if_stmt->end_char_pos = context->getStop()->getCharPositionInLine(); nodetype_stk.push_back(ASTNodeType::IfStatement); + std::cerr << std::string(nodetype_stk.size() * 2, ' ') << "Adding an if statement" << std::endl; if_stmt->condition = std::any_cast>(visit(context->expr())); std::vector sub_stmts = context->statement(); if_stmt->if_clause = std::any_cast>(visit(sub_stmts[0])); @@ -282,6 +286,7 @@ std::any Visitor::visitWhile_statement(MXParser::While_statementContext *context while_stmt->end_line = context->getStop()->getLine(); while_stmt->end_char_pos = context->getStop()->getCharPositionInLine(); nodetype_stk.push_back(ASTNodeType::WhileStatement); + std::cerr << std::string(nodetype_stk.size() * 2, ' ') << "Adding a while statement" << std::endl; while_stmt->condition = std::any_cast>(visit(context->expr())); while_stmt->loop_body = std::any_cast>(visit(context->statement())); nodetype_stk.pop_back(); @@ -295,16 +300,19 @@ std::any Visitor::visitFor_statement(MXParser::For_statementContext *context) { for_stmt->end_line = context->getStop()->getLine(); for_stmt->end_char_pos = context->getStop()->getCharPositionInLine(); nodetype_stk.push_back(ASTNodeType::ForStatement); + std::cerr << std::string(nodetype_stk.size() * 2, ' ') << "Adding a for statement" << std::endl; size_t cur = 2; if (dynamic_cast(context->children[cur]) != nullptr && dynamic_cast(context->children[cur])->getSymbol()->getType() == MXParser::SEMICOLON) { for_stmt->initial = nullptr; cur += 1; + std::cerr << std::string(nodetype_stk.size() * 2, ' ') << "initial is empty" << std::endl; } else if (dynamic_cast(context->children[cur]) != nullptr) { for_stmt->initial = std::dynamic_pointer_cast( std::any_cast>(visit(context->children[cur]))); cur += 1; + std::cerr << std::string(nodetype_stk.size() * 2, ' ') << "initial is a define statement" << std::endl; } else if (dynamic_cast(context->children[cur]) != nullptr) { auto expr = std::any_cast>(visit(context->children[cur])); auto expr_stmt = std::make_shared(); @@ -316,6 +324,7 @@ std::any Visitor::visitFor_statement(MXParser::For_statementContext *context) { expr_stmt->expr = expr; for_stmt->initial = std::static_pointer_cast(expr_stmt); cur += 2; + std::cerr << std::string(nodetype_stk.size() * 2, ' ') << "initial is an expression statement" << std::endl; } else { throw std::runtime_error("unknown subnode occurred in visitFor_statement"); } @@ -324,15 +333,13 @@ std::any Visitor::visitFor_statement(MXParser::For_statementContext *context) { MXParser::SEMICOLON) { for_stmt->condition = nullptr; cur += 1; + std::cerr << std::string(nodetype_stk.size() * 2, ' ') << "condition is empty" << std::endl; } else { for_stmt->condition = std::any_cast>(visit(context->children[cur])); cur += 2; + std::cerr << std::string(nodetype_stk.size() * 2, ' ') << "condition is an expression" << std::endl; } - if (dynamic_cast(context->children[cur]) != nullptr) { - for_stmt->update = std::dynamic_pointer_cast( - std::any_cast>(visit(context->children[cur]))); - cur += 1; - } else if (dynamic_cast(context->children[cur]) != nullptr) { + if (dynamic_cast(context->children[cur]) != nullptr) { auto expr = std::any_cast>(visit(context->children[cur])); auto expr_stmt = std::make_shared(); expr_stmt->type = ASTNodeType::ExprStatement; @@ -343,10 +350,17 @@ std::any Visitor::visitFor_statement(MXParser::For_statementContext *context) { expr_stmt->expr = expr; for_stmt->update = std::static_pointer_cast(expr_stmt); cur += 2; + std::cerr << std::string(nodetype_stk.size() * 2, ' ') << "update is an expression statement" << std::endl; + } else if (dynamic_cast(context->children[cur]) != nullptr && + dynamic_cast(context->children[cur])->getSymbol()->getType() == + MXParser::RPAREN) { + std::cerr << std::string(nodetype_stk.size() * 2, ' ') << "update is empty" << std::endl; + for_stmt->update = nullptr; + cur += 1; } else { throw std::runtime_error("unknown subnode occurred in visitFor_statement"); } - for_stmt->loop_body = std::any_cast>(visit(context->children[cur])); + for_stmt->loop_body = std::any_cast>(visit(context->statement())); nodetype_stk.pop_back(); return std::static_pointer_cast(for_stmt); } @@ -358,6 +372,7 @@ std::any Visitor::visitJmp_statement(MXParser::Jmp_statementContext *context) { jmp_stmt->end_line = context->getStop()->getLine(); jmp_stmt->end_char_pos = context->getStop()->getCharPositionInLine(); nodetype_stk.push_back(ASTNodeType::JmpStatement); + std::cerr << std::string(nodetype_stk.size() * 2, ' ') << "Adding a jmp statement" << std::endl; if (context->RETURN() != nullptr) { jmp_stmt->jmp_type = 0; if (context->expr() != nullptr) { @@ -387,6 +402,7 @@ std::any Visitor::visitDefine_statement(MXParser::Define_statementContext *conte def_stmt->end_line = context->getStop()->getLine(); def_stmt->end_char_pos = context->getStop()->getCharPositionInLine(); nodetype_stk.push_back(ASTNodeType::DefinitionStatement); + std::cerr << std::string(nodetype_stk.size() * 2, ' ') << "Adding a definition statement" << std::endl; std::string define_type_base; if (auto type_context = dynamic_cast(context->children[0])) { define_type_base = type_context->getText(); @@ -403,12 +419,12 @@ std::any Visitor::visitDefine_statement(MXParser::Define_statementContext *conte define_dimensions >>= 1; if (define_dimensions == 0) { def_stmt->var_type = define_type_base; - std::cerr << std::string(nodetype_stk.size() * 2, ' ') << "recorded member variable type is [none-array]" + std::cerr << std::string(nodetype_stk.size() * 2, ' ') << "recorded variable type is [none-array]" << define_type_base << std::endl; } else { def_stmt->var_type = ArrayType{true, define_type_base, static_cast(define_dimensions)}; - std::cerr << std::string(nodetype_stk.size() * 2, ' ') << "recorded member variable type is [array]" - << define_type_base << " with dimensions=" << define_dimensions << std::endl; + std::cerr << std::string(nodetype_stk.size() * 2, ' ') << "recorded variable type is [array]" << define_type_base + << " with dimensions=" << define_dimensions << std::endl; } for (size_t i = 1 + 2 * define_dimensions; i < context->children.size();) { if (dynamic_cast(context->children[i]) != nullptr && @@ -539,6 +555,7 @@ std::any Visitor::visitNew_array_expression(MXParser::New_array_expressionContex new_array->end_char_pos = context->getStop()->getCharPositionInLine(); nodetype_stk.push_back(ASTNodeType::NewArrayExpr); + std::cerr << std::string(nodetype_stk.size() * 2, ' ') << "Adding a new array expression" << std::endl; size_t total_dimensions = context->LBRACKET().size(); std::string base_type = context->type()->getText(); new_array->expr_type_info = ArrayType{true, base_type, total_dimensions}; @@ -548,10 +565,11 @@ std::any Visitor::visitNew_array_expression(MXParser::New_array_expressionContex if (dynamic_cast(context->children[i]) != nullptr && dynamic_cast(context->children[i])->getSymbol()->getType() == MXParser::RBRACKET) { + total_dim_count++; } else if (dynamic_cast(context->children[i]) != nullptr) { new_array->dim_size[total_dim_count] = std::any_cast>(visit(context->children[i])); + std::cerr << std::string(nodetype_stk.size() * 2, ' ') << "dim " << total_dim_count << " has size " << std::endl; } - total_dim_count++; } if (context->constant() != nullptr) { new_array->has_initial_value = true; @@ -831,7 +849,7 @@ std::any Visitor::visitFormatted_string(MXParser::Formatted_stringContext *conte auto expr_subnodes = context->expr(); auto body_subnodes = context->FORMAT_STRING_BODY(); fmt_expr->literals.push_back(context->FORMAT_STRING_HEAD()->getText()); - for (size_t i = 0; i < expr_subnodes.size(); i++) { + for (size_t i = 0; i < body_subnodes.size(); i++) { fmt_expr->literals.push_back(body_subnodes[i]->getText()); } fmt_expr->literals.push_back(context->FORMAT_STRING_TAIL()->getText()); @@ -844,8 +862,53 @@ std::any Visitor::visitFormatted_string(MXParser::Formatted_stringContext *conte return std::static_pointer_cast(fmt_expr); } std::any Visitor::visitConstant(MXParser::ConstantContext *context) { - // TODO - throw std::runtime_error("Not implemented"); + auto constant_expr = std::make_shared(); + constant_expr->type = ASTNodeType::ConstantExpr; + constant_expr->start_line = context->getStart()->getLine(); + constant_expr->start_char_pos = context->getStart()->getCharPositionInLine(); + constant_expr->end_line = context->getStop()->getLine(); + constant_expr->end_char_pos = context->getStop()->getCharPositionInLine(); + nodetype_stk.push_back(ASTNodeType::ConstantExpr); + + if (context->TRUE() != nullptr || context->FALSE() != nullptr) { + constant_expr->expr_type_info = "bool"; + if (context->TRUE()) + constant_expr->value = true; + else + constant_expr->value = false; + constant_expr->level = 0; + } else if (context->INT_LITERAL() != nullptr) { + constant_expr->expr_type_info = "int"; + constant_expr->value = static_cast(std::stoull(context->INT_LITERAL()->getText())); + constant_expr->level = 0; + } else if (context->STRING_LITERAL() != nullptr) { + constant_expr->expr_type_info = "string"; + constant_expr->value = context->STRING_LITERAL()->getText(); + constant_expr->level = 0; + } else if (context->NULL_() != nullptr) { + constant_expr->expr_type_info = "null"; + constant_expr->value = NullType(); + constant_expr->level = 0; + } else if (context->LBRACE() != nullptr) { + // array constant + auto sub_constants = context->constant(); + size_t max_sub_level = 0; + std::vector> tmp; + for (auto sub_constant : sub_constants) { + auto sub_constant_expr = std::dynamic_pointer_cast( + std::any_cast>(visit(sub_constant))); + max_sub_level = + std::max(max_sub_level, std::dynamic_pointer_cast(sub_constant_expr)->level); + tmp.push_back(sub_constant_expr); + } + constant_expr->value = std::move(tmp); + constant_expr->level = max_sub_level + 1; + } else { + throw std::runtime_error("unknown constant type"); + } + + nodetype_stk.pop_back(); + return std::static_pointer_cast(constant_expr); } std::any Visitor::visitType(MXParser::TypeContext *context) { throw std::runtime_error("Visitor::visitType should not be called");