From: Patrick Schönberger Date: Fri, 30 Jul 2021 16:32:33 +0000 (+0200) Subject: complete grammar X-Git-Url: https://gitweb.ps.run/toc/commitdiff_plain/5f9668526491332f62c05ad831dbf6d5fdc2b6d0?ds=sidebyside complete grammar --- diff --git a/Toc.g4 b/Toc.g4 index 7b9ff97..631e2c3 100644 --- a/Toc.g4 +++ b/Toc.g4 @@ -9,8 +9,10 @@ decl: varDecl varDecl: 'var' var; var: varName (':' type) ('=' expr)?; +varInit: varName (':' type) ('=' expr); -type: typeName; +type: typeName (typeModifier)*; +typeModifier: '*' | '[' NUMBER? ']'; funcDecl: 'func' func; @@ -26,63 +28,60 @@ structVar: var; structMethod: func; -stmt: (varDecl - | conditional - | loop - | assignment - | returnStmt - | expr) ; +stmt: varDecl + | ifStmt + | switchStmt + | forStmt + | whileStmt + | assignStmt + | returnStmt + | expr; -conditional: ifCond; -ifCond: 'if' expr body; +ifStmt: 'if' expr body ('else' 'if' expr body)* ('else' body)?; -loop: whileLoop; -whileLoop: 'while' expr body; +switchStmt: 'switch' identifierExpr switchBody; +switchBody: '{' ('case' expr body)* '}'; -assignment: identifier '=' expr; +forStmt: 'for' (varInit | assignStmt) ',' expr ',' expr body; -returnStmt: 'return' expr; +whileStmt: 'while' expr body; -expr: funcCall - | literal - | identifier - | subscript - | memberAccess - | parenExpr - | operatorExpr; +assignStmt: identifierExpr '=' expr; -nonOpExpr: funcCall - | literal - | identifier - | subscript - | memberAccess - | parenExpr; +returnStmt: 'return' expr; -nonSubscriptExpr: funcCall - | literal - | identifier - | memberAccess - | parenExpr; +expr: funcExpr + | litExpr + | identifierExpr + | parenExpr + | accessExpr + | opExpr; -nonAccessExpr: funcCall - | literal - | identifier - | subscript - | parenExpr - | operatorExpr; +/* op */ +nonOpExpr: funcExpr + | litExpr + | identifierExpr + | parenExpr + | accessExpr; -funcCall: funcName '(' (expr (',' expr)*)? ')'; +/* lit access op */ +nonAccessExpr: funcExpr + | identifierExpr + | parenExpr; -operatorExpr: binaryOperator; -binaryOperator: nonOpExpr BINARY_OPERATOR nonOpExpr (BINARY_OPERATOR nonOpExpr)*; +funcExpr: funcName '(' (expr (',' expr)*)? ')'; -identifier: varName; +opExpr: binaryOp | prefixOp | postfixOp | ternaryOp; +binaryOp: nonOpExpr BINARY_OP nonOpExpr (BINARY_OP nonOpExpr)*; +prefixOp: PREFIX_OP nonOpExpr; +postfixOp: nonOpExpr POSTFIX_OP; +ternaryOp: nonOpExpr '?' expr ':' expr; -literal: INTLIT; +identifierExpr: varName; -subscript: nonSubscriptExpr '[' expr ']'; +litExpr: INT_LIT | DECIMAL_LIT | STRING_LIT | BOOL_LIT; -memberAccess: identifier '.' identifier; +accessExpr: nonAccessExpr ((('.' | '->') identifierExpr) | ('[' expr ']'))+; parenExpr: '(' expr ')'; @@ -92,11 +91,22 @@ typeName: NAME; structName: NAME; -BINARY_OPERATOR: - '+' | '-' | '*' | '/' - | '==' | '!=' - | '<' | '>'; -INTLIT: ('+' | '-')? [0-9]+; +POSTFIX_OP: + '++' | '--'; +PREFIX_OP: + [+!~&*-] | POSTFIX_OP; +BINARY_OP: + [+*/%&<|^>-] | + '==' | '!=' | '<=' | '>=' | '<' | '>' | + '<<' | '>>' | '||' | '&&' | '&=' | '|=' | '^=' | + '<<=' | '>>=' | '+=' | '-=' | '*=' | '/=' | '%='; + +INT_LIT: ('+' | '-')? [0-9]+; +DECIMAL_LIT: ('+' | '-')* [0-9]+ '.' [0-9]+; +STRING_LIT: '"' [^"]* '"'; +BOOL_LIT: 'true' | 'false'; + NAME: ([a-z] | [A-Z] | [0-9])+; WS: [ \t\r\n]+ -> skip; NEWLINE: [\r\n]+; +NUMBER: [0-9]+; diff --git a/gen/Toc.interp b/gen/Toc.interp index a115e25..5da1799 100644 --- a/gen/Toc.interp +++ b/gen/Toc.interp @@ -3,6 +3,9 @@ null 'var' ':' '=' +'*' +'[' +']' 'func' '(' ')' @@ -11,11 +14,21 @@ null '}' 'struct' 'if' +'else' +'switch' +'case' +'for' 'while' 'return' -'[' -']' +'?' '.' +'->' +null +null +null +null +null +null null null null @@ -40,18 +53,33 @@ null null null null -BINARY_OPERATOR -INTLIT +null +null +null +null +null +null +null +POSTFIX_OP +PREFIX_OP +BINARY_OP +INT_LIT +DECIMAL_LIT +STRING_LIT +BOOL_LIT NAME WS NEWLINE +NUMBER rule names: prog decl varDecl var +varInit type +typeModifier funcDecl func parameter @@ -61,23 +89,25 @@ structMember structVar structMethod stmt -conditional -ifCond -loop -whileLoop -assignment +ifStmt +switchStmt +switchBody +forStmt +whileStmt +assignStmt returnStmt expr nonOpExpr -nonSubscriptExpr nonAccessExpr -funcCall -operatorExpr -binaryOperator -identifier -literal -subscript -memberAccess +funcExpr +opExpr +binaryOp +prefixOp +postfixOp +ternaryOp +identifierExpr +litExpr +accessExpr parenExpr funcName varName @@ -86,4 +116,4 @@ structName atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 23, 260, 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, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 3, 2, 6, 2, 76, 10, 2, 13, 2, 14, 2, 77, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 5, 3, 85, 10, 3, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 96, 10, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 7, 9, 115, 10, 9, 12, 9, 14, 9, 118, 11, 9, 5, 9, 120, 10, 9, 3, 10, 3, 10, 7, 10, 124, 10, 10, 12, 10, 14, 10, 127, 11, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 135, 10, 11, 12, 11, 14, 11, 138, 11, 11, 3, 11, 3, 11, 3, 12, 3, 12, 5, 12, 144, 10, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 156, 10, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 5, 22, 184, 10, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 5, 23, 192, 10, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 5, 24, 199, 10, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 207, 10, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 7, 26, 214, 10, 26, 12, 26, 14, 26, 217, 11, 26, 5, 26, 219, 10, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 7, 28, 230, 10, 28, 12, 28, 14, 28, 233, 11, 28, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 2, 2, 38, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 2, 2, 2, 260, 2, 75, 3, 2, 2, 2, 4, 84, 3, 2, 2, 2, 6, 86, 3, 2, 2, 2, 8, 89, 3, 2, 2, 2, 10, 97, 3, 2, 2, 2, 12, 99, 3, 2, 2, 2, 14, 102, 3, 2, 2, 2, 16, 119, 3, 2, 2, 2, 18, 121, 3, 2, 2, 2, 20, 130, 3, 2, 2, 2, 22, 143, 3, 2, 2, 2, 24, 145, 3, 2, 2, 2, 26, 147, 3, 2, 2, 2, 28, 155, 3, 2, 2, 2, 30, 157, 3, 2, 2, 2, 32, 159, 3, 2, 2, 2, 34, 163, 3, 2, 2, 2, 36, 165, 3, 2, 2, 2, 38, 169, 3, 2, 2, 2, 40, 173, 3, 2, 2, 2, 42, 183, 3, 2, 2, 2, 44, 191, 3, 2, 2, 2, 46, 198, 3, 2, 2, 2, 48, 206, 3, 2, 2, 2, 50, 208, 3, 2, 2, 2, 52, 222, 3, 2, 2, 2, 54, 224, 3, 2, 2, 2, 56, 234, 3, 2, 2, 2, 58, 236, 3, 2, 2, 2, 60, 238, 3, 2, 2, 2, 62, 243, 3, 2, 2, 2, 64, 247, 3, 2, 2, 2, 66, 251, 3, 2, 2, 2, 68, 253, 3, 2, 2, 2, 70, 255, 3, 2, 2, 2, 72, 257, 3, 2, 2, 2, 74, 76, 5, 4, 3, 2, 75, 74, 3, 2, 2, 2, 76, 77, 3, 2, 2, 2, 77, 75, 3, 2, 2, 2, 77, 78, 3, 2, 2, 2, 78, 79, 3, 2, 2, 2, 79, 80, 7, 2, 2, 3, 80, 3, 3, 2, 2, 2, 81, 85, 5, 6, 4, 2, 82, 85, 5, 12, 7, 2, 83, 85, 5, 20, 11, 2, 84, 81, 3, 2, 2, 2, 84, 82, 3, 2, 2, 2, 84, 83, 3, 2, 2, 2, 85, 5, 3, 2, 2, 2, 86, 87, 7, 3, 2, 2, 87, 88, 5, 8, 5, 2, 88, 7, 3, 2, 2, 2, 89, 90, 5, 68, 35, 2, 90, 91, 7, 4, 2, 2, 91, 92, 5, 10, 6, 2, 92, 95, 3, 2, 2, 2, 93, 94, 7, 5, 2, 2, 94, 96, 5, 42, 22, 2, 95, 93, 3, 2, 2, 2, 95, 96, 3, 2, 2, 2, 96, 9, 3, 2, 2, 2, 97, 98, 5, 70, 36, 2, 98, 11, 3, 2, 2, 2, 99, 100, 7, 6, 2, 2, 100, 101, 5, 14, 8, 2, 101, 13, 3, 2, 2, 2, 102, 103, 5, 66, 34, 2, 103, 104, 7, 7, 2, 2, 104, 105, 5, 16, 9, 2, 105, 106, 7, 8, 2, 2, 106, 107, 7, 4, 2, 2, 107, 108, 5, 10, 6, 2, 108, 109, 3, 2, 2, 2, 109, 110, 5, 18, 10, 2, 110, 15, 3, 2, 2, 2, 111, 116, 5, 8, 5, 2, 112, 113, 7, 9, 2, 2, 113, 115, 5, 8, 5, 2, 114, 112, 3, 2, 2, 2, 115, 118, 3, 2, 2, 2, 116, 114, 3, 2, 2, 2, 116, 117, 3, 2, 2, 2, 117, 120, 3, 2, 2, 2, 118, 116, 3, 2, 2, 2, 119, 111, 3, 2, 2, 2, 119, 120, 3, 2, 2, 2, 120, 17, 3, 2, 2, 2, 121, 125, 7, 10, 2, 2, 122, 124, 5, 28, 15, 2, 123, 122, 3, 2, 2, 2, 124, 127, 3, 2, 2, 2, 125, 123, 3, 2, 2, 2, 125, 126, 3, 2, 2, 2, 126, 128, 3, 2, 2, 2, 127, 125, 3, 2, 2, 2, 128, 129, 7, 11, 2, 2, 129, 19, 3, 2, 2, 2, 130, 131, 7, 12, 2, 2, 131, 132, 5, 72, 37, 2, 132, 136, 7, 10, 2, 2, 133, 135, 5, 22, 12, 2, 134, 133, 3, 2, 2, 2, 135, 138, 3, 2, 2, 2, 136, 134, 3, 2, 2, 2, 136, 137, 3, 2, 2, 2, 137, 139, 3, 2, 2, 2, 138, 136, 3, 2, 2, 2, 139, 140, 7, 11, 2, 2, 140, 21, 3, 2, 2, 2, 141, 144, 5, 24, 13, 2, 142, 144, 5, 26, 14, 2, 143, 141, 3, 2, 2, 2, 143, 142, 3, 2, 2, 2, 144, 23, 3, 2, 2, 2, 145, 146, 5, 8, 5, 2, 146, 25, 3, 2, 2, 2, 147, 148, 5, 14, 8, 2, 148, 27, 3, 2, 2, 2, 149, 156, 5, 6, 4, 2, 150, 156, 5, 30, 16, 2, 151, 156, 5, 34, 18, 2, 152, 156, 5, 38, 20, 2, 153, 156, 5, 40, 21, 2, 154, 156, 5, 42, 22, 2, 155, 149, 3, 2, 2, 2, 155, 150, 3, 2, 2, 2, 155, 151, 3, 2, 2, 2, 155, 152, 3, 2, 2, 2, 155, 153, 3, 2, 2, 2, 155, 154, 3, 2, 2, 2, 156, 29, 3, 2, 2, 2, 157, 158, 5, 32, 17, 2, 158, 31, 3, 2, 2, 2, 159, 160, 7, 13, 2, 2, 160, 161, 5, 42, 22, 2, 161, 162, 5, 18, 10, 2, 162, 33, 3, 2, 2, 2, 163, 164, 5, 36, 19, 2, 164, 35, 3, 2, 2, 2, 165, 166, 7, 14, 2, 2, 166, 167, 5, 42, 22, 2, 167, 168, 5, 18, 10, 2, 168, 37, 3, 2, 2, 2, 169, 170, 5, 56, 29, 2, 170, 171, 7, 5, 2, 2, 171, 172, 5, 42, 22, 2, 172, 39, 3, 2, 2, 2, 173, 174, 7, 15, 2, 2, 174, 175, 5, 42, 22, 2, 175, 41, 3, 2, 2, 2, 176, 184, 5, 50, 26, 2, 177, 184, 5, 58, 30, 2, 178, 184, 5, 56, 29, 2, 179, 184, 5, 60, 31, 2, 180, 184, 5, 62, 32, 2, 181, 184, 5, 64, 33, 2, 182, 184, 5, 52, 27, 2, 183, 176, 3, 2, 2, 2, 183, 177, 3, 2, 2, 2, 183, 178, 3, 2, 2, 2, 183, 179, 3, 2, 2, 2, 183, 180, 3, 2, 2, 2, 183, 181, 3, 2, 2, 2, 183, 182, 3, 2, 2, 2, 184, 43, 3, 2, 2, 2, 185, 192, 5, 50, 26, 2, 186, 192, 5, 58, 30, 2, 187, 192, 5, 56, 29, 2, 188, 192, 5, 60, 31, 2, 189, 192, 5, 62, 32, 2, 190, 192, 5, 64, 33, 2, 191, 185, 3, 2, 2, 2, 191, 186, 3, 2, 2, 2, 191, 187, 3, 2, 2, 2, 191, 188, 3, 2, 2, 2, 191, 189, 3, 2, 2, 2, 191, 190, 3, 2, 2, 2, 192, 45, 3, 2, 2, 2, 193, 199, 5, 50, 26, 2, 194, 199, 5, 58, 30, 2, 195, 199, 5, 56, 29, 2, 196, 199, 5, 62, 32, 2, 197, 199, 5, 64, 33, 2, 198, 193, 3, 2, 2, 2, 198, 194, 3, 2, 2, 2, 198, 195, 3, 2, 2, 2, 198, 196, 3, 2, 2, 2, 198, 197, 3, 2, 2, 2, 199, 47, 3, 2, 2, 2, 200, 207, 5, 50, 26, 2, 201, 207, 5, 58, 30, 2, 202, 207, 5, 56, 29, 2, 203, 207, 5, 60, 31, 2, 204, 207, 5, 64, 33, 2, 205, 207, 5, 52, 27, 2, 206, 200, 3, 2, 2, 2, 206, 201, 3, 2, 2, 2, 206, 202, 3, 2, 2, 2, 206, 203, 3, 2, 2, 2, 206, 204, 3, 2, 2, 2, 206, 205, 3, 2, 2, 2, 207, 49, 3, 2, 2, 2, 208, 209, 5, 66, 34, 2, 209, 218, 7, 7, 2, 2, 210, 215, 5, 42, 22, 2, 211, 212, 7, 9, 2, 2, 212, 214, 5, 42, 22, 2, 213, 211, 3, 2, 2, 2, 214, 217, 3, 2, 2, 2, 215, 213, 3, 2, 2, 2, 215, 216, 3, 2, 2, 2, 216, 219, 3, 2, 2, 2, 217, 215, 3, 2, 2, 2, 218, 210, 3, 2, 2, 2, 218, 219, 3, 2, 2, 2, 219, 220, 3, 2, 2, 2, 220, 221, 7, 8, 2, 2, 221, 51, 3, 2, 2, 2, 222, 223, 5, 54, 28, 2, 223, 53, 3, 2, 2, 2, 224, 225, 5, 44, 23, 2, 225, 226, 7, 19, 2, 2, 226, 231, 5, 44, 23, 2, 227, 228, 7, 19, 2, 2, 228, 230, 5, 44, 23, 2, 229, 227, 3, 2, 2, 2, 230, 233, 3, 2, 2, 2, 231, 229, 3, 2, 2, 2, 231, 232, 3, 2, 2, 2, 232, 55, 3, 2, 2, 2, 233, 231, 3, 2, 2, 2, 234, 235, 5, 68, 35, 2, 235, 57, 3, 2, 2, 2, 236, 237, 7, 20, 2, 2, 237, 59, 3, 2, 2, 2, 238, 239, 5, 46, 24, 2, 239, 240, 7, 16, 2, 2, 240, 241, 5, 42, 22, 2, 241, 242, 7, 17, 2, 2, 242, 61, 3, 2, 2, 2, 243, 244, 5, 56, 29, 2, 244, 245, 7, 18, 2, 2, 245, 246, 5, 56, 29, 2, 246, 63, 3, 2, 2, 2, 247, 248, 7, 7, 2, 2, 248, 249, 5, 42, 22, 2, 249, 250, 7, 8, 2, 2, 250, 65, 3, 2, 2, 2, 251, 252, 7, 21, 2, 2, 252, 67, 3, 2, 2, 2, 253, 254, 7, 21, 2, 2, 254, 69, 3, 2, 2, 2, 255, 256, 7, 21, 2, 2, 256, 71, 3, 2, 2, 2, 257, 258, 7, 21, 2, 2, 258, 73, 3, 2, 2, 2, 18, 77, 84, 95, 116, 119, 125, 136, 143, 155, 183, 191, 198, 206, 215, 218, 231] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 36, 332, 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, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 3, 2, 6, 2, 84, 10, 2, 13, 2, 14, 2, 85, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 5, 3, 93, 10, 3, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 104, 10, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 7, 7, 115, 10, 7, 12, 7, 14, 7, 118, 11, 7, 3, 8, 3, 8, 3, 8, 5, 8, 123, 10, 8, 3, 8, 5, 8, 126, 10, 8, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 7, 11, 143, 10, 11, 12, 11, 14, 11, 146, 11, 11, 5, 11, 148, 10, 11, 3, 12, 3, 12, 7, 12, 152, 10, 12, 12, 12, 14, 12, 155, 11, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 7, 13, 163, 10, 13, 12, 13, 14, 13, 166, 11, 13, 3, 13, 3, 13, 3, 14, 3, 14, 5, 14, 172, 10, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 5, 17, 186, 10, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 7, 18, 196, 10, 18, 12, 18, 14, 18, 199, 11, 18, 3, 18, 3, 18, 5, 18, 203, 10, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 7, 20, 214, 10, 20, 12, 20, 14, 20, 217, 11, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 5, 21, 224, 10, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 249, 10, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 5, 26, 256, 10, 26, 3, 27, 3, 27, 3, 27, 5, 27, 261, 10, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 7, 28, 268, 10, 28, 12, 28, 14, 28, 271, 11, 28, 5, 28, 273, 10, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 5, 29, 281, 10, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 7, 30, 288, 10, 30, 12, 30, 14, 30, 291, 11, 30, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 6, 36, 316, 10, 36, 13, 36, 14, 36, 317, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 2, 2, 42, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 2, 4, 3, 2, 29, 32, 3, 2, 24, 25, 2, 333, 2, 83, 3, 2, 2, 2, 4, 92, 3, 2, 2, 2, 6, 94, 3, 2, 2, 2, 8, 97, 3, 2, 2, 2, 10, 105, 3, 2, 2, 2, 12, 112, 3, 2, 2, 2, 14, 125, 3, 2, 2, 2, 16, 127, 3, 2, 2, 2, 18, 130, 3, 2, 2, 2, 20, 147, 3, 2, 2, 2, 22, 149, 3, 2, 2, 2, 24, 158, 3, 2, 2, 2, 26, 171, 3, 2, 2, 2, 28, 173, 3, 2, 2, 2, 30, 175, 3, 2, 2, 2, 32, 185, 3, 2, 2, 2, 34, 187, 3, 2, 2, 2, 36, 204, 3, 2, 2, 2, 38, 208, 3, 2, 2, 2, 40, 220, 3, 2, 2, 2, 42, 231, 3, 2, 2, 2, 44, 235, 3, 2, 2, 2, 46, 239, 3, 2, 2, 2, 48, 248, 3, 2, 2, 2, 50, 255, 3, 2, 2, 2, 52, 260, 3, 2, 2, 2, 54, 262, 3, 2, 2, 2, 56, 280, 3, 2, 2, 2, 58, 282, 3, 2, 2, 2, 60, 292, 3, 2, 2, 2, 62, 295, 3, 2, 2, 2, 64, 298, 3, 2, 2, 2, 66, 304, 3, 2, 2, 2, 68, 306, 3, 2, 2, 2, 70, 308, 3, 2, 2, 2, 72, 319, 3, 2, 2, 2, 74, 323, 3, 2, 2, 2, 76, 325, 3, 2, 2, 2, 78, 327, 3, 2, 2, 2, 80, 329, 3, 2, 2, 2, 82, 84, 5, 4, 3, 2, 83, 82, 3, 2, 2, 2, 84, 85, 3, 2, 2, 2, 85, 83, 3, 2, 2, 2, 85, 86, 3, 2, 2, 2, 86, 87, 3, 2, 2, 2, 87, 88, 7, 2, 2, 3, 88, 3, 3, 2, 2, 2, 89, 93, 5, 6, 4, 2, 90, 93, 5, 16, 9, 2, 91, 93, 5, 24, 13, 2, 92, 89, 3, 2, 2, 2, 92, 90, 3, 2, 2, 2, 92, 91, 3, 2, 2, 2, 93, 5, 3, 2, 2, 2, 94, 95, 7, 3, 2, 2, 95, 96, 5, 8, 5, 2, 96, 7, 3, 2, 2, 2, 97, 98, 5, 76, 39, 2, 98, 99, 7, 4, 2, 2, 99, 100, 5, 12, 7, 2, 100, 103, 3, 2, 2, 2, 101, 102, 7, 5, 2, 2, 102, 104, 5, 48, 25, 2, 103, 101, 3, 2, 2, 2, 103, 104, 3, 2, 2, 2, 104, 9, 3, 2, 2, 2, 105, 106, 5, 76, 39, 2, 106, 107, 7, 4, 2, 2, 107, 108, 5, 12, 7, 2, 108, 109, 3, 2, 2, 2, 109, 110, 7, 5, 2, 2, 110, 111, 5, 48, 25, 2, 111, 11, 3, 2, 2, 2, 112, 116, 5, 78, 40, 2, 113, 115, 5, 14, 8, 2, 114, 113, 3, 2, 2, 2, 115, 118, 3, 2, 2, 2, 116, 114, 3, 2, 2, 2, 116, 117, 3, 2, 2, 2, 117, 13, 3, 2, 2, 2, 118, 116, 3, 2, 2, 2, 119, 126, 7, 6, 2, 2, 120, 122, 7, 7, 2, 2, 121, 123, 7, 36, 2, 2, 122, 121, 3, 2, 2, 2, 122, 123, 3, 2, 2, 2, 123, 124, 3, 2, 2, 2, 124, 126, 7, 8, 2, 2, 125, 119, 3, 2, 2, 2, 125, 120, 3, 2, 2, 2, 126, 15, 3, 2, 2, 2, 127, 128, 7, 9, 2, 2, 128, 129, 5, 18, 10, 2, 129, 17, 3, 2, 2, 2, 130, 131, 5, 74, 38, 2, 131, 132, 7, 10, 2, 2, 132, 133, 5, 20, 11, 2, 133, 134, 7, 11, 2, 2, 134, 135, 7, 4, 2, 2, 135, 136, 5, 12, 7, 2, 136, 137, 3, 2, 2, 2, 137, 138, 5, 22, 12, 2, 138, 19, 3, 2, 2, 2, 139, 144, 5, 8, 5, 2, 140, 141, 7, 12, 2, 2, 141, 143, 5, 8, 5, 2, 142, 140, 3, 2, 2, 2, 143, 146, 3, 2, 2, 2, 144, 142, 3, 2, 2, 2, 144, 145, 3, 2, 2, 2, 145, 148, 3, 2, 2, 2, 146, 144, 3, 2, 2, 2, 147, 139, 3, 2, 2, 2, 147, 148, 3, 2, 2, 2, 148, 21, 3, 2, 2, 2, 149, 153, 7, 13, 2, 2, 150, 152, 5, 32, 17, 2, 151, 150, 3, 2, 2, 2, 152, 155, 3, 2, 2, 2, 153, 151, 3, 2, 2, 2, 153, 154, 3, 2, 2, 2, 154, 156, 3, 2, 2, 2, 155, 153, 3, 2, 2, 2, 156, 157, 7, 14, 2, 2, 157, 23, 3, 2, 2, 2, 158, 159, 7, 15, 2, 2, 159, 160, 5, 80, 41, 2, 160, 164, 7, 13, 2, 2, 161, 163, 5, 26, 14, 2, 162, 161, 3, 2, 2, 2, 163, 166, 3, 2, 2, 2, 164, 162, 3, 2, 2, 2, 164, 165, 3, 2, 2, 2, 165, 167, 3, 2, 2, 2, 166, 164, 3, 2, 2, 2, 167, 168, 7, 14, 2, 2, 168, 25, 3, 2, 2, 2, 169, 172, 5, 28, 15, 2, 170, 172, 5, 30, 16, 2, 171, 169, 3, 2, 2, 2, 171, 170, 3, 2, 2, 2, 172, 27, 3, 2, 2, 2, 173, 174, 5, 8, 5, 2, 174, 29, 3, 2, 2, 2, 175, 176, 5, 18, 10, 2, 176, 31, 3, 2, 2, 2, 177, 186, 5, 6, 4, 2, 178, 186, 5, 34, 18, 2, 179, 186, 5, 36, 19, 2, 180, 186, 5, 40, 21, 2, 181, 186, 5, 42, 22, 2, 182, 186, 5, 44, 23, 2, 183, 186, 5, 46, 24, 2, 184, 186, 5, 48, 25, 2, 185, 177, 3, 2, 2, 2, 185, 178, 3, 2, 2, 2, 185, 179, 3, 2, 2, 2, 185, 180, 3, 2, 2, 2, 185, 181, 3, 2, 2, 2, 185, 182, 3, 2, 2, 2, 185, 183, 3, 2, 2, 2, 185, 184, 3, 2, 2, 2, 186, 33, 3, 2, 2, 2, 187, 188, 7, 16, 2, 2, 188, 189, 5, 48, 25, 2, 189, 197, 5, 22, 12, 2, 190, 191, 7, 17, 2, 2, 191, 192, 7, 16, 2, 2, 192, 193, 5, 48, 25, 2, 193, 194, 5, 22, 12, 2, 194, 196, 3, 2, 2, 2, 195, 190, 3, 2, 2, 2, 196, 199, 3, 2, 2, 2, 197, 195, 3, 2, 2, 2, 197, 198, 3, 2, 2, 2, 198, 202, 3, 2, 2, 2, 199, 197, 3, 2, 2, 2, 200, 201, 7, 17, 2, 2, 201, 203, 5, 22, 12, 2, 202, 200, 3, 2, 2, 2, 202, 203, 3, 2, 2, 2, 203, 35, 3, 2, 2, 2, 204, 205, 7, 18, 2, 2, 205, 206, 5, 66, 34, 2, 206, 207, 5, 38, 20, 2, 207, 37, 3, 2, 2, 2, 208, 215, 7, 13, 2, 2, 209, 210, 7, 19, 2, 2, 210, 211, 5, 48, 25, 2, 211, 212, 5, 22, 12, 2, 212, 214, 3, 2, 2, 2, 213, 209, 3, 2, 2, 2, 214, 217, 3, 2, 2, 2, 215, 213, 3, 2, 2, 2, 215, 216, 3, 2, 2, 2, 216, 218, 3, 2, 2, 2, 217, 215, 3, 2, 2, 2, 218, 219, 7, 14, 2, 2, 219, 39, 3, 2, 2, 2, 220, 223, 7, 20, 2, 2, 221, 224, 5, 10, 6, 2, 222, 224, 5, 44, 23, 2, 223, 221, 3, 2, 2, 2, 223, 222, 3, 2, 2, 2, 224, 225, 3, 2, 2, 2, 225, 226, 7, 12, 2, 2, 226, 227, 5, 48, 25, 2, 227, 228, 7, 12, 2, 2, 228, 229, 5, 48, 25, 2, 229, 230, 5, 22, 12, 2, 230, 41, 3, 2, 2, 2, 231, 232, 7, 21, 2, 2, 232, 233, 5, 48, 25, 2, 233, 234, 5, 22, 12, 2, 234, 43, 3, 2, 2, 2, 235, 236, 5, 66, 34, 2, 236, 237, 7, 5, 2, 2, 237, 238, 5, 48, 25, 2, 238, 45, 3, 2, 2, 2, 239, 240, 7, 22, 2, 2, 240, 241, 5, 48, 25, 2, 241, 47, 3, 2, 2, 2, 242, 249, 5, 54, 28, 2, 243, 249, 5, 68, 35, 2, 244, 249, 5, 66, 34, 2, 245, 249, 5, 72, 37, 2, 246, 249, 5, 70, 36, 2, 247, 249, 5, 56, 29, 2, 248, 242, 3, 2, 2, 2, 248, 243, 3, 2, 2, 2, 248, 244, 3, 2, 2, 2, 248, 245, 3, 2, 2, 2, 248, 246, 3, 2, 2, 2, 248, 247, 3, 2, 2, 2, 249, 49, 3, 2, 2, 2, 250, 256, 5, 54, 28, 2, 251, 256, 5, 68, 35, 2, 252, 256, 5, 66, 34, 2, 253, 256, 5, 72, 37, 2, 254, 256, 5, 70, 36, 2, 255, 250, 3, 2, 2, 2, 255, 251, 3, 2, 2, 2, 255, 252, 3, 2, 2, 2, 255, 253, 3, 2, 2, 2, 255, 254, 3, 2, 2, 2, 256, 51, 3, 2, 2, 2, 257, 261, 5, 54, 28, 2, 258, 261, 5, 66, 34, 2, 259, 261, 5, 72, 37, 2, 260, 257, 3, 2, 2, 2, 260, 258, 3, 2, 2, 2, 260, 259, 3, 2, 2, 2, 261, 53, 3, 2, 2, 2, 262, 263, 5, 74, 38, 2, 263, 272, 7, 10, 2, 2, 264, 269, 5, 48, 25, 2, 265, 266, 7, 12, 2, 2, 266, 268, 5, 48, 25, 2, 267, 265, 3, 2, 2, 2, 268, 271, 3, 2, 2, 2, 269, 267, 3, 2, 2, 2, 269, 270, 3, 2, 2, 2, 270, 273, 3, 2, 2, 2, 271, 269, 3, 2, 2, 2, 272, 264, 3, 2, 2, 2, 272, 273, 3, 2, 2, 2, 273, 274, 3, 2, 2, 2, 274, 275, 7, 11, 2, 2, 275, 55, 3, 2, 2, 2, 276, 281, 5, 58, 30, 2, 277, 281, 5, 60, 31, 2, 278, 281, 5, 62, 32, 2, 279, 281, 5, 64, 33, 2, 280, 276, 3, 2, 2, 2, 280, 277, 3, 2, 2, 2, 280, 278, 3, 2, 2, 2, 280, 279, 3, 2, 2, 2, 281, 57, 3, 2, 2, 2, 282, 283, 5, 50, 26, 2, 283, 284, 7, 28, 2, 2, 284, 289, 5, 50, 26, 2, 285, 286, 7, 28, 2, 2, 286, 288, 5, 50, 26, 2, 287, 285, 3, 2, 2, 2, 288, 291, 3, 2, 2, 2, 289, 287, 3, 2, 2, 2, 289, 290, 3, 2, 2, 2, 290, 59, 3, 2, 2, 2, 291, 289, 3, 2, 2, 2, 292, 293, 7, 27, 2, 2, 293, 294, 5, 50, 26, 2, 294, 61, 3, 2, 2, 2, 295, 296, 5, 50, 26, 2, 296, 297, 7, 26, 2, 2, 297, 63, 3, 2, 2, 2, 298, 299, 5, 50, 26, 2, 299, 300, 7, 23, 2, 2, 300, 301, 5, 48, 25, 2, 301, 302, 7, 4, 2, 2, 302, 303, 5, 48, 25, 2, 303, 65, 3, 2, 2, 2, 304, 305, 5, 76, 39, 2, 305, 67, 3, 2, 2, 2, 306, 307, 9, 2, 2, 2, 307, 69, 3, 2, 2, 2, 308, 315, 5, 52, 27, 2, 309, 310, 9, 3, 2, 2, 310, 316, 5, 66, 34, 2, 311, 312, 7, 7, 2, 2, 312, 313, 5, 48, 25, 2, 313, 314, 7, 8, 2, 2, 314, 316, 3, 2, 2, 2, 315, 309, 3, 2, 2, 2, 315, 311, 3, 2, 2, 2, 316, 317, 3, 2, 2, 2, 317, 315, 3, 2, 2, 2, 317, 318, 3, 2, 2, 2, 318, 71, 3, 2, 2, 2, 319, 320, 7, 10, 2, 2, 320, 321, 5, 48, 25, 2, 321, 322, 7, 11, 2, 2, 322, 73, 3, 2, 2, 2, 323, 324, 7, 33, 2, 2, 324, 75, 3, 2, 2, 2, 325, 326, 7, 33, 2, 2, 326, 77, 3, 2, 2, 2, 327, 328, 7, 33, 2, 2, 328, 79, 3, 2, 2, 2, 329, 330, 7, 33, 2, 2, 330, 81, 3, 2, 2, 2, 27, 85, 92, 103, 116, 122, 125, 144, 147, 153, 164, 171, 185, 197, 202, 215, 223, 248, 255, 260, 269, 272, 280, 289, 315, 317] \ No newline at end of file diff --git a/gen/Toc.tokens b/gen/Toc.tokens index 980b6cf..ccfc5b5 100644 --- a/gen/Toc.tokens +++ b/gen/Toc.tokens @@ -14,24 +14,44 @@ T__12=13 T__13=14 T__14=15 T__15=16 -BINARY_OPERATOR=17 -INTLIT=18 -NAME=19 -WS=20 -NEWLINE=21 +T__16=17 +T__17=18 +T__18=19 +T__19=20 +T__20=21 +T__21=22 +T__22=23 +POSTFIX_OP=24 +PREFIX_OP=25 +BINARY_OP=26 +INT_LIT=27 +DECIMAL_LIT=28 +STRING_LIT=29 +BOOL_LIT=30 +NAME=31 +WS=32 +NEWLINE=33 +NUMBER=34 'var'=1 ':'=2 '='=3 -'func'=4 -'('=5 -')'=6 -','=7 -'{'=8 -'}'=9 -'struct'=10 -'if'=11 -'while'=12 -'return'=13 -'['=14 -']'=15 -'.'=16 +'*'=4 +'['=5 +']'=6 +'func'=7 +'('=8 +')'=9 +','=10 +'{'=11 +'}'=12 +'struct'=13 +'if'=14 +'else'=15 +'switch'=16 +'case'=17 +'for'=18 +'while'=19 +'return'=20 +'?'=21 +'.'=22 +'->'=23 diff --git a/gen/TocBaseListener.h b/gen/TocBaseListener.h index bd19f54..dbebc54 100644 --- a/gen/TocBaseListener.h +++ b/gen/TocBaseListener.h @@ -28,9 +28,15 @@ public: virtual void enterVar(TocParser::VarContext * /*ctx*/) override { } virtual void exitVar(TocParser::VarContext * /*ctx*/) override { } + virtual void enterVarInit(TocParser::VarInitContext * /*ctx*/) override { } + virtual void exitVarInit(TocParser::VarInitContext * /*ctx*/) override { } + virtual void enterType(TocParser::TypeContext * /*ctx*/) override { } virtual void exitType(TocParser::TypeContext * /*ctx*/) override { } + virtual void enterTypeModifier(TocParser::TypeModifierContext * /*ctx*/) override { } + virtual void exitTypeModifier(TocParser::TypeModifierContext * /*ctx*/) override { } + virtual void enterFuncDecl(TocParser::FuncDeclContext * /*ctx*/) override { } virtual void exitFuncDecl(TocParser::FuncDeclContext * /*ctx*/) override { } @@ -58,20 +64,23 @@ public: virtual void enterStmt(TocParser::StmtContext * /*ctx*/) override { } virtual void exitStmt(TocParser::StmtContext * /*ctx*/) override { } - virtual void enterConditional(TocParser::ConditionalContext * /*ctx*/) override { } - virtual void exitConditional(TocParser::ConditionalContext * /*ctx*/) override { } + virtual void enterIfStmt(TocParser::IfStmtContext * /*ctx*/) override { } + virtual void exitIfStmt(TocParser::IfStmtContext * /*ctx*/) override { } + + virtual void enterSwitchStmt(TocParser::SwitchStmtContext * /*ctx*/) override { } + virtual void exitSwitchStmt(TocParser::SwitchStmtContext * /*ctx*/) override { } - virtual void enterIfCond(TocParser::IfCondContext * /*ctx*/) override { } - virtual void exitIfCond(TocParser::IfCondContext * /*ctx*/) override { } + virtual void enterSwitchBody(TocParser::SwitchBodyContext * /*ctx*/) override { } + virtual void exitSwitchBody(TocParser::SwitchBodyContext * /*ctx*/) override { } - virtual void enterLoop(TocParser::LoopContext * /*ctx*/) override { } - virtual void exitLoop(TocParser::LoopContext * /*ctx*/) override { } + virtual void enterForStmt(TocParser::ForStmtContext * /*ctx*/) override { } + virtual void exitForStmt(TocParser::ForStmtContext * /*ctx*/) override { } - virtual void enterWhileLoop(TocParser::WhileLoopContext * /*ctx*/) override { } - virtual void exitWhileLoop(TocParser::WhileLoopContext * /*ctx*/) override { } + virtual void enterWhileStmt(TocParser::WhileStmtContext * /*ctx*/) override { } + virtual void exitWhileStmt(TocParser::WhileStmtContext * /*ctx*/) override { } - virtual void enterAssignment(TocParser::AssignmentContext * /*ctx*/) override { } - virtual void exitAssignment(TocParser::AssignmentContext * /*ctx*/) override { } + virtual void enterAssignStmt(TocParser::AssignStmtContext * /*ctx*/) override { } + virtual void exitAssignStmt(TocParser::AssignStmtContext * /*ctx*/) override { } virtual void enterReturnStmt(TocParser::ReturnStmtContext * /*ctx*/) override { } virtual void exitReturnStmt(TocParser::ReturnStmtContext * /*ctx*/) override { } @@ -82,32 +91,35 @@ public: virtual void enterNonOpExpr(TocParser::NonOpExprContext * /*ctx*/) override { } virtual void exitNonOpExpr(TocParser::NonOpExprContext * /*ctx*/) override { } - virtual void enterNonSubscriptExpr(TocParser::NonSubscriptExprContext * /*ctx*/) override { } - virtual void exitNonSubscriptExpr(TocParser::NonSubscriptExprContext * /*ctx*/) override { } - virtual void enterNonAccessExpr(TocParser::NonAccessExprContext * /*ctx*/) override { } virtual void exitNonAccessExpr(TocParser::NonAccessExprContext * /*ctx*/) override { } - virtual void enterFuncCall(TocParser::FuncCallContext * /*ctx*/) override { } - virtual void exitFuncCall(TocParser::FuncCallContext * /*ctx*/) override { } + virtual void enterFuncExpr(TocParser::FuncExprContext * /*ctx*/) override { } + virtual void exitFuncExpr(TocParser::FuncExprContext * /*ctx*/) override { } + + virtual void enterOpExpr(TocParser::OpExprContext * /*ctx*/) override { } + virtual void exitOpExpr(TocParser::OpExprContext * /*ctx*/) override { } + + virtual void enterBinaryOp(TocParser::BinaryOpContext * /*ctx*/) override { } + virtual void exitBinaryOp(TocParser::BinaryOpContext * /*ctx*/) override { } - virtual void enterOperatorExpr(TocParser::OperatorExprContext * /*ctx*/) override { } - virtual void exitOperatorExpr(TocParser::OperatorExprContext * /*ctx*/) override { } + virtual void enterPrefixOp(TocParser::PrefixOpContext * /*ctx*/) override { } + virtual void exitPrefixOp(TocParser::PrefixOpContext * /*ctx*/) override { } - virtual void enterBinaryOperator(TocParser::BinaryOperatorContext * /*ctx*/) override { } - virtual void exitBinaryOperator(TocParser::BinaryOperatorContext * /*ctx*/) override { } + virtual void enterPostfixOp(TocParser::PostfixOpContext * /*ctx*/) override { } + virtual void exitPostfixOp(TocParser::PostfixOpContext * /*ctx*/) override { } - virtual void enterIdentifier(TocParser::IdentifierContext * /*ctx*/) override { } - virtual void exitIdentifier(TocParser::IdentifierContext * /*ctx*/) override { } + virtual void enterTernaryOp(TocParser::TernaryOpContext * /*ctx*/) override { } + virtual void exitTernaryOp(TocParser::TernaryOpContext * /*ctx*/) override { } - virtual void enterLiteral(TocParser::LiteralContext * /*ctx*/) override { } - virtual void exitLiteral(TocParser::LiteralContext * /*ctx*/) override { } + virtual void enterIdentifierExpr(TocParser::IdentifierExprContext * /*ctx*/) override { } + virtual void exitIdentifierExpr(TocParser::IdentifierExprContext * /*ctx*/) override { } - virtual void enterSubscript(TocParser::SubscriptContext * /*ctx*/) override { } - virtual void exitSubscript(TocParser::SubscriptContext * /*ctx*/) override { } + virtual void enterLitExpr(TocParser::LitExprContext * /*ctx*/) override { } + virtual void exitLitExpr(TocParser::LitExprContext * /*ctx*/) override { } - virtual void enterMemberAccess(TocParser::MemberAccessContext * /*ctx*/) override { } - virtual void exitMemberAccess(TocParser::MemberAccessContext * /*ctx*/) override { } + virtual void enterAccessExpr(TocParser::AccessExprContext * /*ctx*/) override { } + virtual void exitAccessExpr(TocParser::AccessExprContext * /*ctx*/) override { } virtual void enterParenExpr(TocParser::ParenExprContext * /*ctx*/) override { } virtual void exitParenExpr(TocParser::ParenExprContext * /*ctx*/) override { } diff --git a/gen/TocLexer.cpp b/gen/TocLexer.cpp index 5e7a299..59b8f65 100644 --- a/gen/TocLexer.cpp +++ b/gen/TocLexer.cpp @@ -61,8 +61,10 @@ std::vector TocLexer::_serializedATN; std::vector TocLexer::_ruleNames = { "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "T__8", - "T__9", "T__10", "T__11", "T__12", "T__13", "T__14", "T__15", "BINARY_OPERATOR", - "INTLIT", "NAME", "WS", "NEWLINE" + "T__9", "T__10", "T__11", "T__12", "T__13", "T__14", "T__15", "T__16", + "T__17", "T__18", "T__19", "T__20", "T__21", "T__22", "POSTFIX_OP", "PREFIX_OP", + "BINARY_OP", "INT_LIT", "DECIMAL_LIT", "STRING_LIT", "BOOL_LIT", "NAME", + "WS", "NEWLINE", "NUMBER" }; std::vector TocLexer::_channelNames = { @@ -74,13 +76,15 @@ std::vector TocLexer::_modeNames = { }; std::vector TocLexer::_literalNames = { - "", "'var'", "':'", "'='", "'func'", "'('", "')'", "','", "'{'", "'}'", - "'struct'", "'if'", "'while'", "'return'", "'['", "']'", "'.'" + "", "'var'", "':'", "'='", "'*'", "'['", "']'", "'func'", "'('", "')'", + "','", "'{'", "'}'", "'struct'", "'if'", "'else'", "'switch'", "'case'", + "'for'", "'while'", "'return'", "'\u003F'", "'.'", "'->'" }; std::vector TocLexer::_symbolicNames = { - "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "BINARY_OPERATOR", - "INTLIT", "NAME", "WS", "NEWLINE" + "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", + "", "", "", "", "", "", "POSTFIX_OP", "PREFIX_OP", "BINARY_OP", "INT_LIT", + "DECIMAL_LIT", "STRING_LIT", "BOOL_LIT", "NAME", "WS", "NEWLINE", "NUMBER" }; dfa::Vocabulary TocLexer::_vocabulary(_literalNames, _symbolicNames); @@ -104,101 +108,211 @@ TocLexer::Initializer::Initializer() { static const uint16_t serializedATNSegment0[] = { 0x3, 0x608b, 0xa72a, 0x8133, 0xb9ed, 0x417c, 0x3be7, 0x7786, 0x5964, - 0x2, 0x17, 0x82, 0x8, 0x1, 0x4, 0x2, 0x9, 0x2, 0x4, 0x3, 0x9, 0x3, + 0x2, 0x24, 0x10e, 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, 0x4, 0x16, 0x9, 0x16, - 0x3, 0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x3, 0x3, 0x3, 0x3, - 0x4, 0x3, 0x4, 0x3, 0x5, 0x3, 0x5, 0x3, 0x5, 0x3, 0x5, 0x3, 0x5, - 0x3, 0x6, 0x3, 0x6, 0x3, 0x7, 0x3, 0x7, 0x3, 0x8, 0x3, 0x8, 0x3, - 0x9, 0x3, 0x9, 0x3, 0xa, 0x3, 0xa, 0x3, 0xb, 0x3, 0xb, 0x3, 0xb, - 0x3, 0xb, 0x3, 0xb, 0x3, 0xb, 0x3, 0xb, 0x3, 0xc, 0x3, 0xc, 0x3, - 0xc, 0x3, 0xd, 0x3, 0xd, 0x3, 0xd, 0x3, 0xd, 0x3, 0xd, 0x3, 0xd, - 0x3, 0xe, 0x3, 0xe, 0x3, 0xe, 0x3, 0xe, 0x3, 0xe, 0x3, 0xe, 0x3, - 0xe, 0x3, 0xf, 0x3, 0xf, 0x3, 0x10, 0x3, 0x10, 0x3, 0x11, 0x3, 0x11, - 0x3, 0x12, 0x3, 0x12, 0x3, 0x12, 0x3, 0x12, 0x3, 0x12, 0x3, 0x12, - 0x5, 0x12, 0x68, 0xa, 0x12, 0x3, 0x13, 0x5, 0x13, 0x6b, 0xa, 0x13, - 0x3, 0x13, 0x6, 0x13, 0x6e, 0xa, 0x13, 0xd, 0x13, 0xe, 0x13, 0x6f, - 0x3, 0x14, 0x6, 0x14, 0x73, 0xa, 0x14, 0xd, 0x14, 0xe, 0x14, 0x74, - 0x3, 0x15, 0x6, 0x15, 0x78, 0xa, 0x15, 0xd, 0x15, 0xe, 0x15, 0x79, - 0x3, 0x15, 0x3, 0x15, 0x3, 0x16, 0x6, 0x16, 0x7f, 0xa, 0x16, 0xd, - 0x16, 0xe, 0x16, 0x80, 0x2, 0x2, 0x17, 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, 0xf, 0x1d, 0x10, 0x1f, 0x11, 0x21, - 0x12, 0x23, 0x13, 0x25, 0x14, 0x27, 0x15, 0x29, 0x16, 0x2b, 0x17, - 0x3, 0x2, 0x9, 0x5, 0x2, 0x2c, 0x2d, 0x2f, 0x2f, 0x31, 0x31, 0x4, - 0x2, 0x3e, 0x3e, 0x40, 0x40, 0x4, 0x2, 0x2d, 0x2d, 0x2f, 0x2f, 0x3, - 0x2, 0x32, 0x3b, 0x5, 0x2, 0x32, 0x3b, 0x43, 0x5c, 0x63, 0x7c, 0x5, - 0x2, 0xb, 0xc, 0xf, 0xf, 0x22, 0x22, 0x4, 0x2, 0xc, 0xc, 0xf, 0xf, - 0x2, 0x89, 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, 0x1b, 0x3, 0x2, - 0x2, 0x2, 0x2, 0x1d, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1f, 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, 0x2, 0x2b, 0x3, 0x2, 0x2, 0x2, 0x3, 0x2d, - 0x3, 0x2, 0x2, 0x2, 0x5, 0x31, 0x3, 0x2, 0x2, 0x2, 0x7, 0x33, 0x3, - 0x2, 0x2, 0x2, 0x9, 0x35, 0x3, 0x2, 0x2, 0x2, 0xb, 0x3a, 0x3, 0x2, - 0x2, 0x2, 0xd, 0x3c, 0x3, 0x2, 0x2, 0x2, 0xf, 0x3e, 0x3, 0x2, 0x2, - 0x2, 0x11, 0x40, 0x3, 0x2, 0x2, 0x2, 0x13, 0x42, 0x3, 0x2, 0x2, 0x2, - 0x15, 0x44, 0x3, 0x2, 0x2, 0x2, 0x17, 0x4b, 0x3, 0x2, 0x2, 0x2, 0x19, - 0x4e, 0x3, 0x2, 0x2, 0x2, 0x1b, 0x54, 0x3, 0x2, 0x2, 0x2, 0x1d, 0x5b, - 0x3, 0x2, 0x2, 0x2, 0x1f, 0x5d, 0x3, 0x2, 0x2, 0x2, 0x21, 0x5f, 0x3, - 0x2, 0x2, 0x2, 0x23, 0x67, 0x3, 0x2, 0x2, 0x2, 0x25, 0x6a, 0x3, 0x2, - 0x2, 0x2, 0x27, 0x72, 0x3, 0x2, 0x2, 0x2, 0x29, 0x77, 0x3, 0x2, 0x2, - 0x2, 0x2b, 0x7e, 0x3, 0x2, 0x2, 0x2, 0x2d, 0x2e, 0x7, 0x78, 0x2, - 0x2, 0x2e, 0x2f, 0x7, 0x63, 0x2, 0x2, 0x2f, 0x30, 0x7, 0x74, 0x2, - 0x2, 0x30, 0x4, 0x3, 0x2, 0x2, 0x2, 0x31, 0x32, 0x7, 0x3c, 0x2, 0x2, - 0x32, 0x6, 0x3, 0x2, 0x2, 0x2, 0x33, 0x34, 0x7, 0x3f, 0x2, 0x2, 0x34, - 0x8, 0x3, 0x2, 0x2, 0x2, 0x35, 0x36, 0x7, 0x68, 0x2, 0x2, 0x36, 0x37, - 0x7, 0x77, 0x2, 0x2, 0x37, 0x38, 0x7, 0x70, 0x2, 0x2, 0x38, 0x39, - 0x7, 0x65, 0x2, 0x2, 0x39, 0xa, 0x3, 0x2, 0x2, 0x2, 0x3a, 0x3b, 0x7, - 0x2a, 0x2, 0x2, 0x3b, 0xc, 0x3, 0x2, 0x2, 0x2, 0x3c, 0x3d, 0x7, 0x2b, - 0x2, 0x2, 0x3d, 0xe, 0x3, 0x2, 0x2, 0x2, 0x3e, 0x3f, 0x7, 0x2e, 0x2, - 0x2, 0x3f, 0x10, 0x3, 0x2, 0x2, 0x2, 0x40, 0x41, 0x7, 0x7d, 0x2, - 0x2, 0x41, 0x12, 0x3, 0x2, 0x2, 0x2, 0x42, 0x43, 0x7, 0x7f, 0x2, - 0x2, 0x43, 0x14, 0x3, 0x2, 0x2, 0x2, 0x44, 0x45, 0x7, 0x75, 0x2, - 0x2, 0x45, 0x46, 0x7, 0x76, 0x2, 0x2, 0x46, 0x47, 0x7, 0x74, 0x2, - 0x2, 0x47, 0x48, 0x7, 0x77, 0x2, 0x2, 0x48, 0x49, 0x7, 0x65, 0x2, - 0x2, 0x49, 0x4a, 0x7, 0x76, 0x2, 0x2, 0x4a, 0x16, 0x3, 0x2, 0x2, - 0x2, 0x4b, 0x4c, 0x7, 0x6b, 0x2, 0x2, 0x4c, 0x4d, 0x7, 0x68, 0x2, - 0x2, 0x4d, 0x18, 0x3, 0x2, 0x2, 0x2, 0x4e, 0x4f, 0x7, 0x79, 0x2, - 0x2, 0x4f, 0x50, 0x7, 0x6a, 0x2, 0x2, 0x50, 0x51, 0x7, 0x6b, 0x2, - 0x2, 0x51, 0x52, 0x7, 0x6e, 0x2, 0x2, 0x52, 0x53, 0x7, 0x67, 0x2, - 0x2, 0x53, 0x1a, 0x3, 0x2, 0x2, 0x2, 0x54, 0x55, 0x7, 0x74, 0x2, - 0x2, 0x55, 0x56, 0x7, 0x67, 0x2, 0x2, 0x56, 0x57, 0x7, 0x76, 0x2, - 0x2, 0x57, 0x58, 0x7, 0x77, 0x2, 0x2, 0x58, 0x59, 0x7, 0x74, 0x2, - 0x2, 0x59, 0x5a, 0x7, 0x70, 0x2, 0x2, 0x5a, 0x1c, 0x3, 0x2, 0x2, - 0x2, 0x5b, 0x5c, 0x7, 0x5d, 0x2, 0x2, 0x5c, 0x1e, 0x3, 0x2, 0x2, - 0x2, 0x5d, 0x5e, 0x7, 0x5f, 0x2, 0x2, 0x5e, 0x20, 0x3, 0x2, 0x2, - 0x2, 0x5f, 0x60, 0x7, 0x30, 0x2, 0x2, 0x60, 0x22, 0x3, 0x2, 0x2, - 0x2, 0x61, 0x68, 0x9, 0x2, 0x2, 0x2, 0x62, 0x63, 0x7, 0x3f, 0x2, - 0x2, 0x63, 0x68, 0x7, 0x3f, 0x2, 0x2, 0x64, 0x65, 0x7, 0x23, 0x2, - 0x2, 0x65, 0x68, 0x7, 0x3f, 0x2, 0x2, 0x66, 0x68, 0x9, 0x3, 0x2, - 0x2, 0x67, 0x61, 0x3, 0x2, 0x2, 0x2, 0x67, 0x62, 0x3, 0x2, 0x2, 0x2, - 0x67, 0x64, 0x3, 0x2, 0x2, 0x2, 0x67, 0x66, 0x3, 0x2, 0x2, 0x2, 0x68, - 0x24, 0x3, 0x2, 0x2, 0x2, 0x69, 0x6b, 0x9, 0x4, 0x2, 0x2, 0x6a, 0x69, - 0x3, 0x2, 0x2, 0x2, 0x6a, 0x6b, 0x3, 0x2, 0x2, 0x2, 0x6b, 0x6d, 0x3, - 0x2, 0x2, 0x2, 0x6c, 0x6e, 0x9, 0x5, 0x2, 0x2, 0x6d, 0x6c, 0x3, 0x2, - 0x2, 0x2, 0x6e, 0x6f, 0x3, 0x2, 0x2, 0x2, 0x6f, 0x6d, 0x3, 0x2, 0x2, - 0x2, 0x6f, 0x70, 0x3, 0x2, 0x2, 0x2, 0x70, 0x26, 0x3, 0x2, 0x2, 0x2, - 0x71, 0x73, 0x9, 0x6, 0x2, 0x2, 0x72, 0x71, 0x3, 0x2, 0x2, 0x2, 0x73, - 0x74, 0x3, 0x2, 0x2, 0x2, 0x74, 0x72, 0x3, 0x2, 0x2, 0x2, 0x74, 0x75, - 0x3, 0x2, 0x2, 0x2, 0x75, 0x28, 0x3, 0x2, 0x2, 0x2, 0x76, 0x78, 0x9, - 0x7, 0x2, 0x2, 0x77, 0x76, 0x3, 0x2, 0x2, 0x2, 0x78, 0x79, 0x3, 0x2, - 0x2, 0x2, 0x79, 0x77, 0x3, 0x2, 0x2, 0x2, 0x79, 0x7a, 0x3, 0x2, 0x2, - 0x2, 0x7a, 0x7b, 0x3, 0x2, 0x2, 0x2, 0x7b, 0x7c, 0x8, 0x15, 0x2, - 0x2, 0x7c, 0x2a, 0x3, 0x2, 0x2, 0x2, 0x7d, 0x7f, 0x9, 0x8, 0x2, 0x2, - 0x7e, 0x7d, 0x3, 0x2, 0x2, 0x2, 0x7f, 0x80, 0x3, 0x2, 0x2, 0x2, 0x80, - 0x7e, 0x3, 0x2, 0x2, 0x2, 0x80, 0x81, 0x3, 0x2, 0x2, 0x2, 0x81, 0x2c, - 0x3, 0x2, 0x2, 0x2, 0xa, 0x2, 0x67, 0x6a, 0x6f, 0x72, 0x74, 0x79, - 0x80, 0x3, 0x8, 0x2, 0x2, + 0x4, 0x17, 0x9, 0x17, 0x4, 0x18, 0x9, 0x18, 0x4, 0x19, 0x9, 0x19, + 0x4, 0x1a, 0x9, 0x1a, 0x4, 0x1b, 0x9, 0x1b, 0x4, 0x1c, 0x9, 0x1c, + 0x4, 0x1d, 0x9, 0x1d, 0x4, 0x1e, 0x9, 0x1e, 0x4, 0x1f, 0x9, 0x1f, + 0x4, 0x20, 0x9, 0x20, 0x4, 0x21, 0x9, 0x21, 0x4, 0x22, 0x9, 0x22, + 0x4, 0x23, 0x9, 0x23, 0x3, 0x2, 0x3, 0x2, 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, 0x8, 0x3, + 0x8, 0x3, 0x8, 0x3, 0x9, 0x3, 0x9, 0x3, 0xa, 0x3, 0xa, 0x3, 0xb, + 0x3, 0xb, 0x3, 0xc, 0x3, 0xc, 0x3, 0xd, 0x3, 0xd, 0x3, 0xe, 0x3, + 0xe, 0x3, 0xe, 0x3, 0xe, 0x3, 0xe, 0x3, 0xe, 0x3, 0xe, 0x3, 0xf, + 0x3, 0xf, 0x3, 0xf, 0x3, 0x10, 0x3, 0x10, 0x3, 0x10, 0x3, 0x10, 0x3, + 0x10, 0x3, 0x11, 0x3, 0x11, 0x3, 0x11, 0x3, 0x11, 0x3, 0x11, 0x3, + 0x11, 0x3, 0x11, 0x3, 0x12, 0x3, 0x12, 0x3, 0x12, 0x3, 0x12, 0x3, + 0x12, 0x3, 0x13, 0x3, 0x13, 0x3, 0x13, 0x3, 0x13, 0x3, 0x14, 0x3, + 0x14, 0x3, 0x14, 0x3, 0x14, 0x3, 0x14, 0x3, 0x14, 0x3, 0x15, 0x3, + 0x15, 0x3, 0x15, 0x3, 0x15, 0x3, 0x15, 0x3, 0x15, 0x3, 0x15, 0x3, + 0x16, 0x3, 0x16, 0x3, 0x17, 0x3, 0x17, 0x3, 0x18, 0x3, 0x18, 0x3, + 0x18, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x5, 0x19, 0x9c, + 0xa, 0x19, 0x3, 0x1a, 0x3, 0x1a, 0x5, 0x1a, 0xa0, 0xa, 0x1a, 0x3, + 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x3, + 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x3, + 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x3, + 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x3, + 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x3, + 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x3, + 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x5, 0x1b, 0xca, 0xa, 0x1b, + 0x3, 0x1c, 0x5, 0x1c, 0xcd, 0xa, 0x1c, 0x3, 0x1c, 0x6, 0x1c, 0xd0, + 0xa, 0x1c, 0xd, 0x1c, 0xe, 0x1c, 0xd1, 0x3, 0x1d, 0x7, 0x1d, 0xd5, + 0xa, 0x1d, 0xc, 0x1d, 0xe, 0x1d, 0xd8, 0xb, 0x1d, 0x3, 0x1d, 0x6, + 0x1d, 0xdb, 0xa, 0x1d, 0xd, 0x1d, 0xe, 0x1d, 0xdc, 0x3, 0x1d, 0x3, + 0x1d, 0x6, 0x1d, 0xe1, 0xa, 0x1d, 0xd, 0x1d, 0xe, 0x1d, 0xe2, 0x3, + 0x1e, 0x3, 0x1e, 0x7, 0x1e, 0xe7, 0xa, 0x1e, 0xc, 0x1e, 0xe, 0x1e, + 0xea, 0xb, 0x1e, 0x3, 0x1e, 0x3, 0x1e, 0x3, 0x1f, 0x3, 0x1f, 0x3, + 0x1f, 0x3, 0x1f, 0x3, 0x1f, 0x3, 0x1f, 0x3, 0x1f, 0x3, 0x1f, 0x3, + 0x1f, 0x5, 0x1f, 0xf7, 0xa, 0x1f, 0x3, 0x20, 0x6, 0x20, 0xfa, 0xa, + 0x20, 0xd, 0x20, 0xe, 0x20, 0xfb, 0x3, 0x21, 0x6, 0x21, 0xff, 0xa, + 0x21, 0xd, 0x21, 0xe, 0x21, 0x100, 0x3, 0x21, 0x3, 0x21, 0x3, 0x22, + 0x6, 0x22, 0x106, 0xa, 0x22, 0xd, 0x22, 0xe, 0x22, 0x107, 0x3, 0x23, + 0x6, 0x23, 0x10b, 0xa, 0x23, 0xd, 0x23, 0xe, 0x23, 0x10c, 0x2, 0x2, + 0x24, 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, 0xf, 0x1d, 0x10, 0x1f, 0x11, 0x21, 0x12, 0x23, 0x13, 0x25, + 0x14, 0x27, 0x15, 0x29, 0x16, 0x2b, 0x17, 0x2d, 0x18, 0x2f, 0x19, + 0x31, 0x1a, 0x33, 0x1b, 0x35, 0x1c, 0x37, 0x1d, 0x39, 0x1e, 0x3b, + 0x1f, 0x3d, 0x20, 0x3f, 0x21, 0x41, 0x22, 0x43, 0x23, 0x45, 0x24, + 0x3, 0x2, 0xb, 0x7, 0x2, 0x23, 0x23, 0x28, 0x28, 0x2c, 0x2d, 0x2f, + 0x2f, 0x80, 0x80, 0xa, 0x2, 0x27, 0x28, 0x2c, 0x2d, 0x2f, 0x2f, 0x31, + 0x31, 0x3e, 0x3e, 0x40, 0x40, 0x60, 0x60, 0x7e, 0x7e, 0x4, 0x2, 0x3e, + 0x3e, 0x40, 0x40, 0x4, 0x2, 0x2d, 0x2d, 0x2f, 0x2f, 0x3, 0x2, 0x32, + 0x3b, 0x4, 0x2, 0x24, 0x24, 0x60, 0x60, 0x5, 0x2, 0x32, 0x3b, 0x43, + 0x5c, 0x63, 0x7c, 0x5, 0x2, 0xb, 0xc, 0xf, 0xf, 0x22, 0x22, 0x4, + 0x2, 0xc, 0xc, 0xf, 0xf, 0x2, 0x12d, 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, 0x1b, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1d, 0x3, 0x2, 0x2, 0x2, + 0x2, 0x1f, 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, 0x2, 0x2b, 0x3, + 0x2, 0x2, 0x2, 0x2, 0x2d, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2f, 0x3, 0x2, + 0x2, 0x2, 0x2, 0x31, 0x3, 0x2, 0x2, 0x2, 0x2, 0x33, 0x3, 0x2, 0x2, + 0x2, 0x2, 0x35, 0x3, 0x2, 0x2, 0x2, 0x2, 0x37, 0x3, 0x2, 0x2, 0x2, + 0x2, 0x39, 0x3, 0x2, 0x2, 0x2, 0x2, 0x3b, 0x3, 0x2, 0x2, 0x2, 0x2, + 0x3d, 0x3, 0x2, 0x2, 0x2, 0x2, 0x3f, 0x3, 0x2, 0x2, 0x2, 0x2, 0x41, + 0x3, 0x2, 0x2, 0x2, 0x2, 0x43, 0x3, 0x2, 0x2, 0x2, 0x2, 0x45, 0x3, + 0x2, 0x2, 0x2, 0x3, 0x47, 0x3, 0x2, 0x2, 0x2, 0x5, 0x4b, 0x3, 0x2, + 0x2, 0x2, 0x7, 0x4d, 0x3, 0x2, 0x2, 0x2, 0x9, 0x4f, 0x3, 0x2, 0x2, + 0x2, 0xb, 0x51, 0x3, 0x2, 0x2, 0x2, 0xd, 0x53, 0x3, 0x2, 0x2, 0x2, + 0xf, 0x55, 0x3, 0x2, 0x2, 0x2, 0x11, 0x5a, 0x3, 0x2, 0x2, 0x2, 0x13, + 0x5c, 0x3, 0x2, 0x2, 0x2, 0x15, 0x5e, 0x3, 0x2, 0x2, 0x2, 0x17, 0x60, + 0x3, 0x2, 0x2, 0x2, 0x19, 0x62, 0x3, 0x2, 0x2, 0x2, 0x1b, 0x64, 0x3, + 0x2, 0x2, 0x2, 0x1d, 0x6b, 0x3, 0x2, 0x2, 0x2, 0x1f, 0x6e, 0x3, 0x2, + 0x2, 0x2, 0x21, 0x73, 0x3, 0x2, 0x2, 0x2, 0x23, 0x7a, 0x3, 0x2, 0x2, + 0x2, 0x25, 0x7f, 0x3, 0x2, 0x2, 0x2, 0x27, 0x83, 0x3, 0x2, 0x2, 0x2, + 0x29, 0x89, 0x3, 0x2, 0x2, 0x2, 0x2b, 0x90, 0x3, 0x2, 0x2, 0x2, 0x2d, + 0x92, 0x3, 0x2, 0x2, 0x2, 0x2f, 0x94, 0x3, 0x2, 0x2, 0x2, 0x31, 0x9b, + 0x3, 0x2, 0x2, 0x2, 0x33, 0x9f, 0x3, 0x2, 0x2, 0x2, 0x35, 0xc9, 0x3, + 0x2, 0x2, 0x2, 0x37, 0xcc, 0x3, 0x2, 0x2, 0x2, 0x39, 0xd6, 0x3, 0x2, + 0x2, 0x2, 0x3b, 0xe4, 0x3, 0x2, 0x2, 0x2, 0x3d, 0xf6, 0x3, 0x2, 0x2, + 0x2, 0x3f, 0xf9, 0x3, 0x2, 0x2, 0x2, 0x41, 0xfe, 0x3, 0x2, 0x2, 0x2, + 0x43, 0x105, 0x3, 0x2, 0x2, 0x2, 0x45, 0x10a, 0x3, 0x2, 0x2, 0x2, + 0x47, 0x48, 0x7, 0x78, 0x2, 0x2, 0x48, 0x49, 0x7, 0x63, 0x2, 0x2, + 0x49, 0x4a, 0x7, 0x74, 0x2, 0x2, 0x4a, 0x4, 0x3, 0x2, 0x2, 0x2, 0x4b, + 0x4c, 0x7, 0x3c, 0x2, 0x2, 0x4c, 0x6, 0x3, 0x2, 0x2, 0x2, 0x4d, 0x4e, + 0x7, 0x3f, 0x2, 0x2, 0x4e, 0x8, 0x3, 0x2, 0x2, 0x2, 0x4f, 0x50, 0x7, + 0x2c, 0x2, 0x2, 0x50, 0xa, 0x3, 0x2, 0x2, 0x2, 0x51, 0x52, 0x7, 0x5d, + 0x2, 0x2, 0x52, 0xc, 0x3, 0x2, 0x2, 0x2, 0x53, 0x54, 0x7, 0x5f, 0x2, + 0x2, 0x54, 0xe, 0x3, 0x2, 0x2, 0x2, 0x55, 0x56, 0x7, 0x68, 0x2, 0x2, + 0x56, 0x57, 0x7, 0x77, 0x2, 0x2, 0x57, 0x58, 0x7, 0x70, 0x2, 0x2, + 0x58, 0x59, 0x7, 0x65, 0x2, 0x2, 0x59, 0x10, 0x3, 0x2, 0x2, 0x2, + 0x5a, 0x5b, 0x7, 0x2a, 0x2, 0x2, 0x5b, 0x12, 0x3, 0x2, 0x2, 0x2, + 0x5c, 0x5d, 0x7, 0x2b, 0x2, 0x2, 0x5d, 0x14, 0x3, 0x2, 0x2, 0x2, + 0x5e, 0x5f, 0x7, 0x2e, 0x2, 0x2, 0x5f, 0x16, 0x3, 0x2, 0x2, 0x2, + 0x60, 0x61, 0x7, 0x7d, 0x2, 0x2, 0x61, 0x18, 0x3, 0x2, 0x2, 0x2, + 0x62, 0x63, 0x7, 0x7f, 0x2, 0x2, 0x63, 0x1a, 0x3, 0x2, 0x2, 0x2, + 0x64, 0x65, 0x7, 0x75, 0x2, 0x2, 0x65, 0x66, 0x7, 0x76, 0x2, 0x2, + 0x66, 0x67, 0x7, 0x74, 0x2, 0x2, 0x67, 0x68, 0x7, 0x77, 0x2, 0x2, + 0x68, 0x69, 0x7, 0x65, 0x2, 0x2, 0x69, 0x6a, 0x7, 0x76, 0x2, 0x2, + 0x6a, 0x1c, 0x3, 0x2, 0x2, 0x2, 0x6b, 0x6c, 0x7, 0x6b, 0x2, 0x2, + 0x6c, 0x6d, 0x7, 0x68, 0x2, 0x2, 0x6d, 0x1e, 0x3, 0x2, 0x2, 0x2, + 0x6e, 0x6f, 0x7, 0x67, 0x2, 0x2, 0x6f, 0x70, 0x7, 0x6e, 0x2, 0x2, + 0x70, 0x71, 0x7, 0x75, 0x2, 0x2, 0x71, 0x72, 0x7, 0x67, 0x2, 0x2, + 0x72, 0x20, 0x3, 0x2, 0x2, 0x2, 0x73, 0x74, 0x7, 0x75, 0x2, 0x2, + 0x74, 0x75, 0x7, 0x79, 0x2, 0x2, 0x75, 0x76, 0x7, 0x6b, 0x2, 0x2, + 0x76, 0x77, 0x7, 0x76, 0x2, 0x2, 0x77, 0x78, 0x7, 0x65, 0x2, 0x2, + 0x78, 0x79, 0x7, 0x6a, 0x2, 0x2, 0x79, 0x22, 0x3, 0x2, 0x2, 0x2, + 0x7a, 0x7b, 0x7, 0x65, 0x2, 0x2, 0x7b, 0x7c, 0x7, 0x63, 0x2, 0x2, + 0x7c, 0x7d, 0x7, 0x75, 0x2, 0x2, 0x7d, 0x7e, 0x7, 0x67, 0x2, 0x2, + 0x7e, 0x24, 0x3, 0x2, 0x2, 0x2, 0x7f, 0x80, 0x7, 0x68, 0x2, 0x2, + 0x80, 0x81, 0x7, 0x71, 0x2, 0x2, 0x81, 0x82, 0x7, 0x74, 0x2, 0x2, + 0x82, 0x26, 0x3, 0x2, 0x2, 0x2, 0x83, 0x84, 0x7, 0x79, 0x2, 0x2, + 0x84, 0x85, 0x7, 0x6a, 0x2, 0x2, 0x85, 0x86, 0x7, 0x6b, 0x2, 0x2, + 0x86, 0x87, 0x7, 0x6e, 0x2, 0x2, 0x87, 0x88, 0x7, 0x67, 0x2, 0x2, + 0x88, 0x28, 0x3, 0x2, 0x2, 0x2, 0x89, 0x8a, 0x7, 0x74, 0x2, 0x2, + 0x8a, 0x8b, 0x7, 0x67, 0x2, 0x2, 0x8b, 0x8c, 0x7, 0x76, 0x2, 0x2, + 0x8c, 0x8d, 0x7, 0x77, 0x2, 0x2, 0x8d, 0x8e, 0x7, 0x74, 0x2, 0x2, + 0x8e, 0x8f, 0x7, 0x70, 0x2, 0x2, 0x8f, 0x2a, 0x3, 0x2, 0x2, 0x2, + 0x90, 0x91, 0x7, 0x41, 0x2, 0x2, 0x91, 0x2c, 0x3, 0x2, 0x2, 0x2, + 0x92, 0x93, 0x7, 0x30, 0x2, 0x2, 0x93, 0x2e, 0x3, 0x2, 0x2, 0x2, + 0x94, 0x95, 0x7, 0x2f, 0x2, 0x2, 0x95, 0x96, 0x7, 0x40, 0x2, 0x2, + 0x96, 0x30, 0x3, 0x2, 0x2, 0x2, 0x97, 0x98, 0x7, 0x2d, 0x2, 0x2, + 0x98, 0x9c, 0x7, 0x2d, 0x2, 0x2, 0x99, 0x9a, 0x7, 0x2f, 0x2, 0x2, + 0x9a, 0x9c, 0x7, 0x2f, 0x2, 0x2, 0x9b, 0x97, 0x3, 0x2, 0x2, 0x2, + 0x9b, 0x99, 0x3, 0x2, 0x2, 0x2, 0x9c, 0x32, 0x3, 0x2, 0x2, 0x2, 0x9d, + 0xa0, 0x9, 0x2, 0x2, 0x2, 0x9e, 0xa0, 0x5, 0x31, 0x19, 0x2, 0x9f, + 0x9d, 0x3, 0x2, 0x2, 0x2, 0x9f, 0x9e, 0x3, 0x2, 0x2, 0x2, 0xa0, 0x34, + 0x3, 0x2, 0x2, 0x2, 0xa1, 0xca, 0x9, 0x3, 0x2, 0x2, 0xa2, 0xa3, 0x7, + 0x3f, 0x2, 0x2, 0xa3, 0xca, 0x7, 0x3f, 0x2, 0x2, 0xa4, 0xa5, 0x7, + 0x23, 0x2, 0x2, 0xa5, 0xca, 0x7, 0x3f, 0x2, 0x2, 0xa6, 0xa7, 0x7, + 0x3e, 0x2, 0x2, 0xa7, 0xca, 0x7, 0x3f, 0x2, 0x2, 0xa8, 0xa9, 0x7, + 0x40, 0x2, 0x2, 0xa9, 0xca, 0x7, 0x3f, 0x2, 0x2, 0xaa, 0xca, 0x9, + 0x4, 0x2, 0x2, 0xab, 0xac, 0x7, 0x3e, 0x2, 0x2, 0xac, 0xca, 0x7, + 0x3e, 0x2, 0x2, 0xad, 0xae, 0x7, 0x40, 0x2, 0x2, 0xae, 0xca, 0x7, + 0x40, 0x2, 0x2, 0xaf, 0xb0, 0x7, 0x7e, 0x2, 0x2, 0xb0, 0xca, 0x7, + 0x7e, 0x2, 0x2, 0xb1, 0xb2, 0x7, 0x28, 0x2, 0x2, 0xb2, 0xca, 0x7, + 0x28, 0x2, 0x2, 0xb3, 0xb4, 0x7, 0x28, 0x2, 0x2, 0xb4, 0xca, 0x7, + 0x3f, 0x2, 0x2, 0xb5, 0xb6, 0x7, 0x7e, 0x2, 0x2, 0xb6, 0xca, 0x7, + 0x3f, 0x2, 0x2, 0xb7, 0xb8, 0x7, 0x60, 0x2, 0x2, 0xb8, 0xca, 0x7, + 0x3f, 0x2, 0x2, 0xb9, 0xba, 0x7, 0x3e, 0x2, 0x2, 0xba, 0xbb, 0x7, + 0x3e, 0x2, 0x2, 0xbb, 0xca, 0x7, 0x3f, 0x2, 0x2, 0xbc, 0xbd, 0x7, + 0x40, 0x2, 0x2, 0xbd, 0xbe, 0x7, 0x40, 0x2, 0x2, 0xbe, 0xca, 0x7, + 0x3f, 0x2, 0x2, 0xbf, 0xc0, 0x7, 0x2d, 0x2, 0x2, 0xc0, 0xca, 0x7, + 0x3f, 0x2, 0x2, 0xc1, 0xc2, 0x7, 0x2f, 0x2, 0x2, 0xc2, 0xca, 0x7, + 0x3f, 0x2, 0x2, 0xc3, 0xc4, 0x7, 0x2c, 0x2, 0x2, 0xc4, 0xca, 0x7, + 0x3f, 0x2, 0x2, 0xc5, 0xc6, 0x7, 0x31, 0x2, 0x2, 0xc6, 0xca, 0x7, + 0x3f, 0x2, 0x2, 0xc7, 0xc8, 0x7, 0x27, 0x2, 0x2, 0xc8, 0xca, 0x7, + 0x3f, 0x2, 0x2, 0xc9, 0xa1, 0x3, 0x2, 0x2, 0x2, 0xc9, 0xa2, 0x3, + 0x2, 0x2, 0x2, 0xc9, 0xa4, 0x3, 0x2, 0x2, 0x2, 0xc9, 0xa6, 0x3, 0x2, + 0x2, 0x2, 0xc9, 0xa8, 0x3, 0x2, 0x2, 0x2, 0xc9, 0xaa, 0x3, 0x2, 0x2, + 0x2, 0xc9, 0xab, 0x3, 0x2, 0x2, 0x2, 0xc9, 0xad, 0x3, 0x2, 0x2, 0x2, + 0xc9, 0xaf, 0x3, 0x2, 0x2, 0x2, 0xc9, 0xb1, 0x3, 0x2, 0x2, 0x2, 0xc9, + 0xb3, 0x3, 0x2, 0x2, 0x2, 0xc9, 0xb5, 0x3, 0x2, 0x2, 0x2, 0xc9, 0xb7, + 0x3, 0x2, 0x2, 0x2, 0xc9, 0xb9, 0x3, 0x2, 0x2, 0x2, 0xc9, 0xbc, 0x3, + 0x2, 0x2, 0x2, 0xc9, 0xbf, 0x3, 0x2, 0x2, 0x2, 0xc9, 0xc1, 0x3, 0x2, + 0x2, 0x2, 0xc9, 0xc3, 0x3, 0x2, 0x2, 0x2, 0xc9, 0xc5, 0x3, 0x2, 0x2, + 0x2, 0xc9, 0xc7, 0x3, 0x2, 0x2, 0x2, 0xca, 0x36, 0x3, 0x2, 0x2, 0x2, + 0xcb, 0xcd, 0x9, 0x5, 0x2, 0x2, 0xcc, 0xcb, 0x3, 0x2, 0x2, 0x2, 0xcc, + 0xcd, 0x3, 0x2, 0x2, 0x2, 0xcd, 0xcf, 0x3, 0x2, 0x2, 0x2, 0xce, 0xd0, + 0x9, 0x6, 0x2, 0x2, 0xcf, 0xce, 0x3, 0x2, 0x2, 0x2, 0xd0, 0xd1, 0x3, + 0x2, 0x2, 0x2, 0xd1, 0xcf, 0x3, 0x2, 0x2, 0x2, 0xd1, 0xd2, 0x3, 0x2, + 0x2, 0x2, 0xd2, 0x38, 0x3, 0x2, 0x2, 0x2, 0xd3, 0xd5, 0x9, 0x5, 0x2, + 0x2, 0xd4, 0xd3, 0x3, 0x2, 0x2, 0x2, 0xd5, 0xd8, 0x3, 0x2, 0x2, 0x2, + 0xd6, 0xd4, 0x3, 0x2, 0x2, 0x2, 0xd6, 0xd7, 0x3, 0x2, 0x2, 0x2, 0xd7, + 0xda, 0x3, 0x2, 0x2, 0x2, 0xd8, 0xd6, 0x3, 0x2, 0x2, 0x2, 0xd9, 0xdb, + 0x9, 0x6, 0x2, 0x2, 0xda, 0xd9, 0x3, 0x2, 0x2, 0x2, 0xdb, 0xdc, 0x3, + 0x2, 0x2, 0x2, 0xdc, 0xda, 0x3, 0x2, 0x2, 0x2, 0xdc, 0xdd, 0x3, 0x2, + 0x2, 0x2, 0xdd, 0xde, 0x3, 0x2, 0x2, 0x2, 0xde, 0xe0, 0x7, 0x30, + 0x2, 0x2, 0xdf, 0xe1, 0x9, 0x6, 0x2, 0x2, 0xe0, 0xdf, 0x3, 0x2, 0x2, + 0x2, 0xe1, 0xe2, 0x3, 0x2, 0x2, 0x2, 0xe2, 0xe0, 0x3, 0x2, 0x2, 0x2, + 0xe2, 0xe3, 0x3, 0x2, 0x2, 0x2, 0xe3, 0x3a, 0x3, 0x2, 0x2, 0x2, 0xe4, + 0xe8, 0x7, 0x24, 0x2, 0x2, 0xe5, 0xe7, 0x9, 0x7, 0x2, 0x2, 0xe6, + 0xe5, 0x3, 0x2, 0x2, 0x2, 0xe7, 0xea, 0x3, 0x2, 0x2, 0x2, 0xe8, 0xe6, + 0x3, 0x2, 0x2, 0x2, 0xe8, 0xe9, 0x3, 0x2, 0x2, 0x2, 0xe9, 0xeb, 0x3, + 0x2, 0x2, 0x2, 0xea, 0xe8, 0x3, 0x2, 0x2, 0x2, 0xeb, 0xec, 0x7, 0x24, + 0x2, 0x2, 0xec, 0x3c, 0x3, 0x2, 0x2, 0x2, 0xed, 0xee, 0x7, 0x76, + 0x2, 0x2, 0xee, 0xef, 0x7, 0x74, 0x2, 0x2, 0xef, 0xf0, 0x7, 0x77, + 0x2, 0x2, 0xf0, 0xf7, 0x7, 0x67, 0x2, 0x2, 0xf1, 0xf2, 0x7, 0x68, + 0x2, 0x2, 0xf2, 0xf3, 0x7, 0x63, 0x2, 0x2, 0xf3, 0xf4, 0x7, 0x6e, + 0x2, 0x2, 0xf4, 0xf5, 0x7, 0x75, 0x2, 0x2, 0xf5, 0xf7, 0x7, 0x67, + 0x2, 0x2, 0xf6, 0xed, 0x3, 0x2, 0x2, 0x2, 0xf6, 0xf1, 0x3, 0x2, 0x2, + 0x2, 0xf7, 0x3e, 0x3, 0x2, 0x2, 0x2, 0xf8, 0xfa, 0x9, 0x8, 0x2, 0x2, + 0xf9, 0xf8, 0x3, 0x2, 0x2, 0x2, 0xfa, 0xfb, 0x3, 0x2, 0x2, 0x2, 0xfb, + 0xf9, 0x3, 0x2, 0x2, 0x2, 0xfb, 0xfc, 0x3, 0x2, 0x2, 0x2, 0xfc, 0x40, + 0x3, 0x2, 0x2, 0x2, 0xfd, 0xff, 0x9, 0x9, 0x2, 0x2, 0xfe, 0xfd, 0x3, + 0x2, 0x2, 0x2, 0xff, 0x100, 0x3, 0x2, 0x2, 0x2, 0x100, 0xfe, 0x3, + 0x2, 0x2, 0x2, 0x100, 0x101, 0x3, 0x2, 0x2, 0x2, 0x101, 0x102, 0x3, + 0x2, 0x2, 0x2, 0x102, 0x103, 0x8, 0x21, 0x2, 0x2, 0x103, 0x42, 0x3, + 0x2, 0x2, 0x2, 0x104, 0x106, 0x9, 0xa, 0x2, 0x2, 0x105, 0x104, 0x3, + 0x2, 0x2, 0x2, 0x106, 0x107, 0x3, 0x2, 0x2, 0x2, 0x107, 0x105, 0x3, + 0x2, 0x2, 0x2, 0x107, 0x108, 0x3, 0x2, 0x2, 0x2, 0x108, 0x44, 0x3, + 0x2, 0x2, 0x2, 0x109, 0x10b, 0x9, 0x6, 0x2, 0x2, 0x10a, 0x109, 0x3, + 0x2, 0x2, 0x2, 0x10b, 0x10c, 0x3, 0x2, 0x2, 0x2, 0x10c, 0x10a, 0x3, + 0x2, 0x2, 0x2, 0x10c, 0x10d, 0x3, 0x2, 0x2, 0x2, 0x10d, 0x46, 0x3, + 0x2, 0x2, 0x2, 0x12, 0x2, 0x9b, 0x9f, 0xc9, 0xcc, 0xd1, 0xd6, 0xdc, + 0xe2, 0xe8, 0xf6, 0xf9, 0xfb, 0x100, 0x107, 0x10c, 0x3, 0x8, 0x2, + 0x2, }; _serializedATN.insert(_serializedATN.end(), serializedATNSegment0, diff --git a/gen/TocLexer.h b/gen/TocLexer.h index f2f1ecb..97d739e 100644 --- a/gen/TocLexer.h +++ b/gen/TocLexer.h @@ -14,8 +14,10 @@ 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, T__9 = 10, T__10 = 11, T__11 = 12, T__12 = 13, T__13 = 14, - T__14 = 15, T__15 = 16, BINARY_OPERATOR = 17, INTLIT = 18, NAME = 19, - WS = 20, NEWLINE = 21 + T__14 = 15, T__15 = 16, T__16 = 17, T__17 = 18, T__18 = 19, T__19 = 20, + T__20 = 21, T__21 = 22, T__22 = 23, POSTFIX_OP = 24, PREFIX_OP = 25, + BINARY_OP = 26, INT_LIT = 27, DECIMAL_LIT = 28, STRING_LIT = 29, BOOL_LIT = 30, + NAME = 31, WS = 32, NEWLINE = 33, NUMBER = 34 }; explicit TocLexer(antlr4::CharStream *input); diff --git a/gen/TocLexer.interp b/gen/TocLexer.interp index 4f0a6ba..c37f3ff 100644 --- a/gen/TocLexer.interp +++ b/gen/TocLexer.interp @@ -3,6 +3,9 @@ null 'var' ':' '=' +'*' +'[' +']' 'func' '(' ')' @@ -11,11 +14,21 @@ null '}' 'struct' 'if' +'else' +'switch' +'case' +'for' 'while' 'return' -'[' -']' +'?' '.' +'->' +null +null +null +null +null +null null null null @@ -40,11 +53,24 @@ null null null null -BINARY_OPERATOR -INTLIT +null +null +null +null +null +null +null +POSTFIX_OP +PREFIX_OP +BINARY_OP +INT_LIT +DECIMAL_LIT +STRING_LIT +BOOL_LIT NAME WS NEWLINE +NUMBER rule names: T__0 @@ -63,11 +89,24 @@ T__12 T__13 T__14 T__15 -BINARY_OPERATOR -INTLIT +T__16 +T__17 +T__18 +T__19 +T__20 +T__21 +T__22 +POSTFIX_OP +PREFIX_OP +BINARY_OP +INT_LIT +DECIMAL_LIT +STRING_LIT +BOOL_LIT NAME WS NEWLINE +NUMBER channel names: DEFAULT_TOKEN_CHANNEL @@ -77,4 +116,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 23, 130, 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, 4, 22, 9, 22, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 5, 18, 104, 10, 18, 3, 19, 5, 19, 107, 10, 19, 3, 19, 6, 19, 110, 10, 19, 13, 19, 14, 19, 111, 3, 20, 6, 20, 115, 10, 20, 13, 20, 14, 20, 116, 3, 21, 6, 21, 120, 10, 21, 13, 21, 14, 21, 121, 3, 21, 3, 21, 3, 22, 6, 22, 127, 10, 22, 13, 22, 14, 22, 128, 2, 2, 23, 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, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 3, 2, 9, 5, 2, 44, 45, 47, 47, 49, 49, 4, 2, 62, 62, 64, 64, 4, 2, 45, 45, 47, 47, 3, 2, 50, 59, 5, 2, 50, 59, 67, 92, 99, 124, 5, 2, 11, 12, 15, 15, 34, 34, 4, 2, 12, 12, 15, 15, 2, 137, 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, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 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, 2, 43, 3, 2, 2, 2, 3, 45, 3, 2, 2, 2, 5, 49, 3, 2, 2, 2, 7, 51, 3, 2, 2, 2, 9, 53, 3, 2, 2, 2, 11, 58, 3, 2, 2, 2, 13, 60, 3, 2, 2, 2, 15, 62, 3, 2, 2, 2, 17, 64, 3, 2, 2, 2, 19, 66, 3, 2, 2, 2, 21, 68, 3, 2, 2, 2, 23, 75, 3, 2, 2, 2, 25, 78, 3, 2, 2, 2, 27, 84, 3, 2, 2, 2, 29, 91, 3, 2, 2, 2, 31, 93, 3, 2, 2, 2, 33, 95, 3, 2, 2, 2, 35, 103, 3, 2, 2, 2, 37, 106, 3, 2, 2, 2, 39, 114, 3, 2, 2, 2, 41, 119, 3, 2, 2, 2, 43, 126, 3, 2, 2, 2, 45, 46, 7, 120, 2, 2, 46, 47, 7, 99, 2, 2, 47, 48, 7, 116, 2, 2, 48, 4, 3, 2, 2, 2, 49, 50, 7, 60, 2, 2, 50, 6, 3, 2, 2, 2, 51, 52, 7, 63, 2, 2, 52, 8, 3, 2, 2, 2, 53, 54, 7, 104, 2, 2, 54, 55, 7, 119, 2, 2, 55, 56, 7, 112, 2, 2, 56, 57, 7, 101, 2, 2, 57, 10, 3, 2, 2, 2, 58, 59, 7, 42, 2, 2, 59, 12, 3, 2, 2, 2, 60, 61, 7, 43, 2, 2, 61, 14, 3, 2, 2, 2, 62, 63, 7, 46, 2, 2, 63, 16, 3, 2, 2, 2, 64, 65, 7, 125, 2, 2, 65, 18, 3, 2, 2, 2, 66, 67, 7, 127, 2, 2, 67, 20, 3, 2, 2, 2, 68, 69, 7, 117, 2, 2, 69, 70, 7, 118, 2, 2, 70, 71, 7, 116, 2, 2, 71, 72, 7, 119, 2, 2, 72, 73, 7, 101, 2, 2, 73, 74, 7, 118, 2, 2, 74, 22, 3, 2, 2, 2, 75, 76, 7, 107, 2, 2, 76, 77, 7, 104, 2, 2, 77, 24, 3, 2, 2, 2, 78, 79, 7, 121, 2, 2, 79, 80, 7, 106, 2, 2, 80, 81, 7, 107, 2, 2, 81, 82, 7, 110, 2, 2, 82, 83, 7, 103, 2, 2, 83, 26, 3, 2, 2, 2, 84, 85, 7, 116, 2, 2, 85, 86, 7, 103, 2, 2, 86, 87, 7, 118, 2, 2, 87, 88, 7, 119, 2, 2, 88, 89, 7, 116, 2, 2, 89, 90, 7, 112, 2, 2, 90, 28, 3, 2, 2, 2, 91, 92, 7, 93, 2, 2, 92, 30, 3, 2, 2, 2, 93, 94, 7, 95, 2, 2, 94, 32, 3, 2, 2, 2, 95, 96, 7, 48, 2, 2, 96, 34, 3, 2, 2, 2, 97, 104, 9, 2, 2, 2, 98, 99, 7, 63, 2, 2, 99, 104, 7, 63, 2, 2, 100, 101, 7, 35, 2, 2, 101, 104, 7, 63, 2, 2, 102, 104, 9, 3, 2, 2, 103, 97, 3, 2, 2, 2, 103, 98, 3, 2, 2, 2, 103, 100, 3, 2, 2, 2, 103, 102, 3, 2, 2, 2, 104, 36, 3, 2, 2, 2, 105, 107, 9, 4, 2, 2, 106, 105, 3, 2, 2, 2, 106, 107, 3, 2, 2, 2, 107, 109, 3, 2, 2, 2, 108, 110, 9, 5, 2, 2, 109, 108, 3, 2, 2, 2, 110, 111, 3, 2, 2, 2, 111, 109, 3, 2, 2, 2, 111, 112, 3, 2, 2, 2, 112, 38, 3, 2, 2, 2, 113, 115, 9, 6, 2, 2, 114, 113, 3, 2, 2, 2, 115, 116, 3, 2, 2, 2, 116, 114, 3, 2, 2, 2, 116, 117, 3, 2, 2, 2, 117, 40, 3, 2, 2, 2, 118, 120, 9, 7, 2, 2, 119, 118, 3, 2, 2, 2, 120, 121, 3, 2, 2, 2, 121, 119, 3, 2, 2, 2, 121, 122, 3, 2, 2, 2, 122, 123, 3, 2, 2, 2, 123, 124, 8, 21, 2, 2, 124, 42, 3, 2, 2, 2, 125, 127, 9, 8, 2, 2, 126, 125, 3, 2, 2, 2, 127, 128, 3, 2, 2, 2, 128, 126, 3, 2, 2, 2, 128, 129, 3, 2, 2, 2, 129, 44, 3, 2, 2, 2, 10, 2, 103, 106, 111, 114, 116, 121, 128, 3, 8, 2, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 36, 270, 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, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 3, 2, 3, 2, 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, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 156, 10, 25, 3, 26, 3, 26, 5, 26, 160, 10, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 5, 27, 202, 10, 27, 3, 28, 5, 28, 205, 10, 28, 3, 28, 6, 28, 208, 10, 28, 13, 28, 14, 28, 209, 3, 29, 7, 29, 213, 10, 29, 12, 29, 14, 29, 216, 11, 29, 3, 29, 6, 29, 219, 10, 29, 13, 29, 14, 29, 220, 3, 29, 3, 29, 6, 29, 225, 10, 29, 13, 29, 14, 29, 226, 3, 30, 3, 30, 7, 30, 231, 10, 30, 12, 30, 14, 30, 234, 11, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 5, 31, 247, 10, 31, 3, 32, 6, 32, 250, 10, 32, 13, 32, 14, 32, 251, 3, 33, 6, 33, 255, 10, 33, 13, 33, 14, 33, 256, 3, 33, 3, 33, 3, 34, 6, 34, 262, 10, 34, 13, 34, 14, 34, 263, 3, 35, 6, 35, 267, 10, 35, 13, 35, 14, 35, 268, 2, 2, 36, 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, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 3, 2, 11, 7, 2, 35, 35, 40, 40, 44, 45, 47, 47, 128, 128, 10, 2, 39, 40, 44, 45, 47, 47, 49, 49, 62, 62, 64, 64, 96, 96, 126, 126, 4, 2, 62, 62, 64, 64, 4, 2, 45, 45, 47, 47, 3, 2, 50, 59, 4, 2, 36, 36, 96, 96, 5, 2, 50, 59, 67, 92, 99, 124, 5, 2, 11, 12, 15, 15, 34, 34, 4, 2, 12, 12, 15, 15, 2, 301, 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, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 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, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 3, 71, 3, 2, 2, 2, 5, 75, 3, 2, 2, 2, 7, 77, 3, 2, 2, 2, 9, 79, 3, 2, 2, 2, 11, 81, 3, 2, 2, 2, 13, 83, 3, 2, 2, 2, 15, 85, 3, 2, 2, 2, 17, 90, 3, 2, 2, 2, 19, 92, 3, 2, 2, 2, 21, 94, 3, 2, 2, 2, 23, 96, 3, 2, 2, 2, 25, 98, 3, 2, 2, 2, 27, 100, 3, 2, 2, 2, 29, 107, 3, 2, 2, 2, 31, 110, 3, 2, 2, 2, 33, 115, 3, 2, 2, 2, 35, 122, 3, 2, 2, 2, 37, 127, 3, 2, 2, 2, 39, 131, 3, 2, 2, 2, 41, 137, 3, 2, 2, 2, 43, 144, 3, 2, 2, 2, 45, 146, 3, 2, 2, 2, 47, 148, 3, 2, 2, 2, 49, 155, 3, 2, 2, 2, 51, 159, 3, 2, 2, 2, 53, 201, 3, 2, 2, 2, 55, 204, 3, 2, 2, 2, 57, 214, 3, 2, 2, 2, 59, 228, 3, 2, 2, 2, 61, 246, 3, 2, 2, 2, 63, 249, 3, 2, 2, 2, 65, 254, 3, 2, 2, 2, 67, 261, 3, 2, 2, 2, 69, 266, 3, 2, 2, 2, 71, 72, 7, 120, 2, 2, 72, 73, 7, 99, 2, 2, 73, 74, 7, 116, 2, 2, 74, 4, 3, 2, 2, 2, 75, 76, 7, 60, 2, 2, 76, 6, 3, 2, 2, 2, 77, 78, 7, 63, 2, 2, 78, 8, 3, 2, 2, 2, 79, 80, 7, 44, 2, 2, 80, 10, 3, 2, 2, 2, 81, 82, 7, 93, 2, 2, 82, 12, 3, 2, 2, 2, 83, 84, 7, 95, 2, 2, 84, 14, 3, 2, 2, 2, 85, 86, 7, 104, 2, 2, 86, 87, 7, 119, 2, 2, 87, 88, 7, 112, 2, 2, 88, 89, 7, 101, 2, 2, 89, 16, 3, 2, 2, 2, 90, 91, 7, 42, 2, 2, 91, 18, 3, 2, 2, 2, 92, 93, 7, 43, 2, 2, 93, 20, 3, 2, 2, 2, 94, 95, 7, 46, 2, 2, 95, 22, 3, 2, 2, 2, 96, 97, 7, 125, 2, 2, 97, 24, 3, 2, 2, 2, 98, 99, 7, 127, 2, 2, 99, 26, 3, 2, 2, 2, 100, 101, 7, 117, 2, 2, 101, 102, 7, 118, 2, 2, 102, 103, 7, 116, 2, 2, 103, 104, 7, 119, 2, 2, 104, 105, 7, 101, 2, 2, 105, 106, 7, 118, 2, 2, 106, 28, 3, 2, 2, 2, 107, 108, 7, 107, 2, 2, 108, 109, 7, 104, 2, 2, 109, 30, 3, 2, 2, 2, 110, 111, 7, 103, 2, 2, 111, 112, 7, 110, 2, 2, 112, 113, 7, 117, 2, 2, 113, 114, 7, 103, 2, 2, 114, 32, 3, 2, 2, 2, 115, 116, 7, 117, 2, 2, 116, 117, 7, 121, 2, 2, 117, 118, 7, 107, 2, 2, 118, 119, 7, 118, 2, 2, 119, 120, 7, 101, 2, 2, 120, 121, 7, 106, 2, 2, 121, 34, 3, 2, 2, 2, 122, 123, 7, 101, 2, 2, 123, 124, 7, 99, 2, 2, 124, 125, 7, 117, 2, 2, 125, 126, 7, 103, 2, 2, 126, 36, 3, 2, 2, 2, 127, 128, 7, 104, 2, 2, 128, 129, 7, 113, 2, 2, 129, 130, 7, 116, 2, 2, 130, 38, 3, 2, 2, 2, 131, 132, 7, 121, 2, 2, 132, 133, 7, 106, 2, 2, 133, 134, 7, 107, 2, 2, 134, 135, 7, 110, 2, 2, 135, 136, 7, 103, 2, 2, 136, 40, 3, 2, 2, 2, 137, 138, 7, 116, 2, 2, 138, 139, 7, 103, 2, 2, 139, 140, 7, 118, 2, 2, 140, 141, 7, 119, 2, 2, 141, 142, 7, 116, 2, 2, 142, 143, 7, 112, 2, 2, 143, 42, 3, 2, 2, 2, 144, 145, 7, 65, 2, 2, 145, 44, 3, 2, 2, 2, 146, 147, 7, 48, 2, 2, 147, 46, 3, 2, 2, 2, 148, 149, 7, 47, 2, 2, 149, 150, 7, 64, 2, 2, 150, 48, 3, 2, 2, 2, 151, 152, 7, 45, 2, 2, 152, 156, 7, 45, 2, 2, 153, 154, 7, 47, 2, 2, 154, 156, 7, 47, 2, 2, 155, 151, 3, 2, 2, 2, 155, 153, 3, 2, 2, 2, 156, 50, 3, 2, 2, 2, 157, 160, 9, 2, 2, 2, 158, 160, 5, 49, 25, 2, 159, 157, 3, 2, 2, 2, 159, 158, 3, 2, 2, 2, 160, 52, 3, 2, 2, 2, 161, 202, 9, 3, 2, 2, 162, 163, 7, 63, 2, 2, 163, 202, 7, 63, 2, 2, 164, 165, 7, 35, 2, 2, 165, 202, 7, 63, 2, 2, 166, 167, 7, 62, 2, 2, 167, 202, 7, 63, 2, 2, 168, 169, 7, 64, 2, 2, 169, 202, 7, 63, 2, 2, 170, 202, 9, 4, 2, 2, 171, 172, 7, 62, 2, 2, 172, 202, 7, 62, 2, 2, 173, 174, 7, 64, 2, 2, 174, 202, 7, 64, 2, 2, 175, 176, 7, 126, 2, 2, 176, 202, 7, 126, 2, 2, 177, 178, 7, 40, 2, 2, 178, 202, 7, 40, 2, 2, 179, 180, 7, 40, 2, 2, 180, 202, 7, 63, 2, 2, 181, 182, 7, 126, 2, 2, 182, 202, 7, 63, 2, 2, 183, 184, 7, 96, 2, 2, 184, 202, 7, 63, 2, 2, 185, 186, 7, 62, 2, 2, 186, 187, 7, 62, 2, 2, 187, 202, 7, 63, 2, 2, 188, 189, 7, 64, 2, 2, 189, 190, 7, 64, 2, 2, 190, 202, 7, 63, 2, 2, 191, 192, 7, 45, 2, 2, 192, 202, 7, 63, 2, 2, 193, 194, 7, 47, 2, 2, 194, 202, 7, 63, 2, 2, 195, 196, 7, 44, 2, 2, 196, 202, 7, 63, 2, 2, 197, 198, 7, 49, 2, 2, 198, 202, 7, 63, 2, 2, 199, 200, 7, 39, 2, 2, 200, 202, 7, 63, 2, 2, 201, 161, 3, 2, 2, 2, 201, 162, 3, 2, 2, 2, 201, 164, 3, 2, 2, 2, 201, 166, 3, 2, 2, 2, 201, 168, 3, 2, 2, 2, 201, 170, 3, 2, 2, 2, 201, 171, 3, 2, 2, 2, 201, 173, 3, 2, 2, 2, 201, 175, 3, 2, 2, 2, 201, 177, 3, 2, 2, 2, 201, 179, 3, 2, 2, 2, 201, 181, 3, 2, 2, 2, 201, 183, 3, 2, 2, 2, 201, 185, 3, 2, 2, 2, 201, 188, 3, 2, 2, 2, 201, 191, 3, 2, 2, 2, 201, 193, 3, 2, 2, 2, 201, 195, 3, 2, 2, 2, 201, 197, 3, 2, 2, 2, 201, 199, 3, 2, 2, 2, 202, 54, 3, 2, 2, 2, 203, 205, 9, 5, 2, 2, 204, 203, 3, 2, 2, 2, 204, 205, 3, 2, 2, 2, 205, 207, 3, 2, 2, 2, 206, 208, 9, 6, 2, 2, 207, 206, 3, 2, 2, 2, 208, 209, 3, 2, 2, 2, 209, 207, 3, 2, 2, 2, 209, 210, 3, 2, 2, 2, 210, 56, 3, 2, 2, 2, 211, 213, 9, 5, 2, 2, 212, 211, 3, 2, 2, 2, 213, 216, 3, 2, 2, 2, 214, 212, 3, 2, 2, 2, 214, 215, 3, 2, 2, 2, 215, 218, 3, 2, 2, 2, 216, 214, 3, 2, 2, 2, 217, 219, 9, 6, 2, 2, 218, 217, 3, 2, 2, 2, 219, 220, 3, 2, 2, 2, 220, 218, 3, 2, 2, 2, 220, 221, 3, 2, 2, 2, 221, 222, 3, 2, 2, 2, 222, 224, 7, 48, 2, 2, 223, 225, 9, 6, 2, 2, 224, 223, 3, 2, 2, 2, 225, 226, 3, 2, 2, 2, 226, 224, 3, 2, 2, 2, 226, 227, 3, 2, 2, 2, 227, 58, 3, 2, 2, 2, 228, 232, 7, 36, 2, 2, 229, 231, 9, 7, 2, 2, 230, 229, 3, 2, 2, 2, 231, 234, 3, 2, 2, 2, 232, 230, 3, 2, 2, 2, 232, 233, 3, 2, 2, 2, 233, 235, 3, 2, 2, 2, 234, 232, 3, 2, 2, 2, 235, 236, 7, 36, 2, 2, 236, 60, 3, 2, 2, 2, 237, 238, 7, 118, 2, 2, 238, 239, 7, 116, 2, 2, 239, 240, 7, 119, 2, 2, 240, 247, 7, 103, 2, 2, 241, 242, 7, 104, 2, 2, 242, 243, 7, 99, 2, 2, 243, 244, 7, 110, 2, 2, 244, 245, 7, 117, 2, 2, 245, 247, 7, 103, 2, 2, 246, 237, 3, 2, 2, 2, 246, 241, 3, 2, 2, 2, 247, 62, 3, 2, 2, 2, 248, 250, 9, 8, 2, 2, 249, 248, 3, 2, 2, 2, 250, 251, 3, 2, 2, 2, 251, 249, 3, 2, 2, 2, 251, 252, 3, 2, 2, 2, 252, 64, 3, 2, 2, 2, 253, 255, 9, 9, 2, 2, 254, 253, 3, 2, 2, 2, 255, 256, 3, 2, 2, 2, 256, 254, 3, 2, 2, 2, 256, 257, 3, 2, 2, 2, 257, 258, 3, 2, 2, 2, 258, 259, 8, 33, 2, 2, 259, 66, 3, 2, 2, 2, 260, 262, 9, 10, 2, 2, 261, 260, 3, 2, 2, 2, 262, 263, 3, 2, 2, 2, 263, 261, 3, 2, 2, 2, 263, 264, 3, 2, 2, 2, 264, 68, 3, 2, 2, 2, 265, 267, 9, 6, 2, 2, 266, 265, 3, 2, 2, 2, 267, 268, 3, 2, 2, 2, 268, 266, 3, 2, 2, 2, 268, 269, 3, 2, 2, 2, 269, 70, 3, 2, 2, 2, 18, 2, 155, 159, 201, 204, 209, 214, 220, 226, 232, 246, 249, 251, 256, 263, 268, 3, 8, 2, 2] \ No newline at end of file diff --git a/gen/TocLexer.tokens b/gen/TocLexer.tokens index 980b6cf..ccfc5b5 100644 --- a/gen/TocLexer.tokens +++ b/gen/TocLexer.tokens @@ -14,24 +14,44 @@ T__12=13 T__13=14 T__14=15 T__15=16 -BINARY_OPERATOR=17 -INTLIT=18 -NAME=19 -WS=20 -NEWLINE=21 +T__16=17 +T__17=18 +T__18=19 +T__19=20 +T__20=21 +T__21=22 +T__22=23 +POSTFIX_OP=24 +PREFIX_OP=25 +BINARY_OP=26 +INT_LIT=27 +DECIMAL_LIT=28 +STRING_LIT=29 +BOOL_LIT=30 +NAME=31 +WS=32 +NEWLINE=33 +NUMBER=34 'var'=1 ':'=2 '='=3 -'func'=4 -'('=5 -')'=6 -','=7 -'{'=8 -'}'=9 -'struct'=10 -'if'=11 -'while'=12 -'return'=13 -'['=14 -']'=15 -'.'=16 +'*'=4 +'['=5 +']'=6 +'func'=7 +'('=8 +')'=9 +','=10 +'{'=11 +'}'=12 +'struct'=13 +'if'=14 +'else'=15 +'switch'=16 +'case'=17 +'for'=18 +'while'=19 +'return'=20 +'?'=21 +'.'=22 +'->'=23 diff --git a/gen/TocListener.h b/gen/TocListener.h index 0c635a0..aa72186 100644 --- a/gen/TocListener.h +++ b/gen/TocListener.h @@ -26,9 +26,15 @@ public: virtual void enterVar(TocParser::VarContext *ctx) = 0; virtual void exitVar(TocParser::VarContext *ctx) = 0; + virtual void enterVarInit(TocParser::VarInitContext *ctx) = 0; + virtual void exitVarInit(TocParser::VarInitContext *ctx) = 0; + virtual void enterType(TocParser::TypeContext *ctx) = 0; virtual void exitType(TocParser::TypeContext *ctx) = 0; + virtual void enterTypeModifier(TocParser::TypeModifierContext *ctx) = 0; + virtual void exitTypeModifier(TocParser::TypeModifierContext *ctx) = 0; + virtual void enterFuncDecl(TocParser::FuncDeclContext *ctx) = 0; virtual void exitFuncDecl(TocParser::FuncDeclContext *ctx) = 0; @@ -56,20 +62,23 @@ public: virtual void enterStmt(TocParser::StmtContext *ctx) = 0; virtual void exitStmt(TocParser::StmtContext *ctx) = 0; - virtual void enterConditional(TocParser::ConditionalContext *ctx) = 0; - virtual void exitConditional(TocParser::ConditionalContext *ctx) = 0; + virtual void enterIfStmt(TocParser::IfStmtContext *ctx) = 0; + virtual void exitIfStmt(TocParser::IfStmtContext *ctx) = 0; + + virtual void enterSwitchStmt(TocParser::SwitchStmtContext *ctx) = 0; + virtual void exitSwitchStmt(TocParser::SwitchStmtContext *ctx) = 0; - virtual void enterIfCond(TocParser::IfCondContext *ctx) = 0; - virtual void exitIfCond(TocParser::IfCondContext *ctx) = 0; + virtual void enterSwitchBody(TocParser::SwitchBodyContext *ctx) = 0; + virtual void exitSwitchBody(TocParser::SwitchBodyContext *ctx) = 0; - virtual void enterLoop(TocParser::LoopContext *ctx) = 0; - virtual void exitLoop(TocParser::LoopContext *ctx) = 0; + virtual void enterForStmt(TocParser::ForStmtContext *ctx) = 0; + virtual void exitForStmt(TocParser::ForStmtContext *ctx) = 0; - virtual void enterWhileLoop(TocParser::WhileLoopContext *ctx) = 0; - virtual void exitWhileLoop(TocParser::WhileLoopContext *ctx) = 0; + virtual void enterWhileStmt(TocParser::WhileStmtContext *ctx) = 0; + virtual void exitWhileStmt(TocParser::WhileStmtContext *ctx) = 0; - virtual void enterAssignment(TocParser::AssignmentContext *ctx) = 0; - virtual void exitAssignment(TocParser::AssignmentContext *ctx) = 0; + virtual void enterAssignStmt(TocParser::AssignStmtContext *ctx) = 0; + virtual void exitAssignStmt(TocParser::AssignStmtContext *ctx) = 0; virtual void enterReturnStmt(TocParser::ReturnStmtContext *ctx) = 0; virtual void exitReturnStmt(TocParser::ReturnStmtContext *ctx) = 0; @@ -80,32 +89,35 @@ public: virtual void enterNonOpExpr(TocParser::NonOpExprContext *ctx) = 0; virtual void exitNonOpExpr(TocParser::NonOpExprContext *ctx) = 0; - virtual void enterNonSubscriptExpr(TocParser::NonSubscriptExprContext *ctx) = 0; - virtual void exitNonSubscriptExpr(TocParser::NonSubscriptExprContext *ctx) = 0; - virtual void enterNonAccessExpr(TocParser::NonAccessExprContext *ctx) = 0; virtual void exitNonAccessExpr(TocParser::NonAccessExprContext *ctx) = 0; - virtual void enterFuncCall(TocParser::FuncCallContext *ctx) = 0; - virtual void exitFuncCall(TocParser::FuncCallContext *ctx) = 0; + virtual void enterFuncExpr(TocParser::FuncExprContext *ctx) = 0; + virtual void exitFuncExpr(TocParser::FuncExprContext *ctx) = 0; + + virtual void enterOpExpr(TocParser::OpExprContext *ctx) = 0; + virtual void exitOpExpr(TocParser::OpExprContext *ctx) = 0; + + virtual void enterBinaryOp(TocParser::BinaryOpContext *ctx) = 0; + virtual void exitBinaryOp(TocParser::BinaryOpContext *ctx) = 0; - virtual void enterOperatorExpr(TocParser::OperatorExprContext *ctx) = 0; - virtual void exitOperatorExpr(TocParser::OperatorExprContext *ctx) = 0; + virtual void enterPrefixOp(TocParser::PrefixOpContext *ctx) = 0; + virtual void exitPrefixOp(TocParser::PrefixOpContext *ctx) = 0; - virtual void enterBinaryOperator(TocParser::BinaryOperatorContext *ctx) = 0; - virtual void exitBinaryOperator(TocParser::BinaryOperatorContext *ctx) = 0; + virtual void enterPostfixOp(TocParser::PostfixOpContext *ctx) = 0; + virtual void exitPostfixOp(TocParser::PostfixOpContext *ctx) = 0; - virtual void enterIdentifier(TocParser::IdentifierContext *ctx) = 0; - virtual void exitIdentifier(TocParser::IdentifierContext *ctx) = 0; + virtual void enterTernaryOp(TocParser::TernaryOpContext *ctx) = 0; + virtual void exitTernaryOp(TocParser::TernaryOpContext *ctx) = 0; - virtual void enterLiteral(TocParser::LiteralContext *ctx) = 0; - virtual void exitLiteral(TocParser::LiteralContext *ctx) = 0; + virtual void enterIdentifierExpr(TocParser::IdentifierExprContext *ctx) = 0; + virtual void exitIdentifierExpr(TocParser::IdentifierExprContext *ctx) = 0; - virtual void enterSubscript(TocParser::SubscriptContext *ctx) = 0; - virtual void exitSubscript(TocParser::SubscriptContext *ctx) = 0; + virtual void enterLitExpr(TocParser::LitExprContext *ctx) = 0; + virtual void exitLitExpr(TocParser::LitExprContext *ctx) = 0; - virtual void enterMemberAccess(TocParser::MemberAccessContext *ctx) = 0; - virtual void exitMemberAccess(TocParser::MemberAccessContext *ctx) = 0; + virtual void enterAccessExpr(TocParser::AccessExprContext *ctx) = 0; + virtual void exitAccessExpr(TocParser::AccessExprContext *ctx) = 0; virtual void enterParenExpr(TocParser::ParenExprContext *ctx) = 0; virtual void exitParenExpr(TocParser::ParenExprContext *ctx) = 0; diff --git a/gen/TocParser.cpp b/gen/TocParser.cpp index eb6928d..e1d5b1f 100644 --- a/gen/TocParser.cpp +++ b/gen/TocParser.cpp @@ -80,20 +80,20 @@ TocParser::ProgContext* TocParser::prog() { }); try { enterOuterAlt(_localctx, 1); - setState(73); + setState(81); _errHandler->sync(this); _la = _input->LA(1); do { - setState(72); + setState(80); decl(); - setState(75); + setState(83); _errHandler->sync(this); _la = _input->LA(1); } while ((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & ((1ULL << TocParser::T__0) - | (1ULL << TocParser::T__3) - | (1ULL << TocParser::T__9))) != 0)); - setState(77); + | (1ULL << TocParser::T__6) + | (1ULL << TocParser::T__12))) != 0)); + setState(85); match(TocParser::EOF); } @@ -153,26 +153,26 @@ TocParser::DeclContext* TocParser::decl() { exitRule(); }); try { - setState(82); + setState(90); _errHandler->sync(this); switch (_input->LA(1)) { case TocParser::T__0: { enterOuterAlt(_localctx, 1); - setState(79); + setState(87); varDecl(); break; } - case TocParser::T__3: { + case TocParser::T__6: { enterOuterAlt(_localctx, 2); - setState(80); + setState(88); funcDecl(); break; } - case TocParser::T__9: { + case TocParser::T__12: { enterOuterAlt(_localctx, 3); - setState(81); + setState(89); structDecl(); break; } @@ -231,9 +231,9 @@ TocParser::VarDeclContext* TocParser::varDecl() { }); try { enterOuterAlt(_localctx, 1); - setState(84); + setState(92); match(TocParser::T__0); - setState(85); + setState(93); var(); } @@ -295,21 +295,21 @@ TocParser::VarContext* TocParser::var() { }); try { enterOuterAlt(_localctx, 1); - setState(87); + setState(95); varName(); - setState(88); + setState(96); match(TocParser::T__1); - setState(89); + setState(97); type(); - setState(93); + setState(101); _errHandler->sync(this); _la = _input->LA(1); if (_la == TocParser::T__2) { - setState(91); + setState(99); match(TocParser::T__2); - setState(92); + setState(100); expr(); } @@ -323,6 +323,77 @@ TocParser::VarContext* TocParser::var() { return _localctx; } +//----------------- VarInitContext ------------------------------------------------------------------ + +TocParser::VarInitContext::VarInitContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +TocParser::VarNameContext* TocParser::VarInitContext::varName() { + return getRuleContext(0); +} + +TocParser::TypeContext* TocParser::VarInitContext::type() { + return getRuleContext(0); +} + +TocParser::ExprContext* TocParser::VarInitContext::expr() { + return getRuleContext(0); +} + + +size_t TocParser::VarInitContext::getRuleIndex() const { + return TocParser::RuleVarInit; +} + +void TocParser::VarInitContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterVarInit(this); +} + +void TocParser::VarInitContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitVarInit(this); +} + +TocParser::VarInitContext* TocParser::varInit() { + VarInitContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 8, TocParser::RuleVarInit); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(103); + varName(); + + setState(104); + match(TocParser::T__1); + setState(105); + type(); + + setState(107); + match(TocParser::T__2); + setState(108); + expr(); + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + //----------------- TypeContext ------------------------------------------------------------------ TocParser::TypeContext::TypeContext(ParserRuleContext *parent, size_t invokingState) @@ -333,6 +404,14 @@ TocParser::TypeNameContext* TocParser::TypeContext::typeName() { return getRuleContext(0); } +std::vector TocParser::TypeContext::typeModifier() { + return getRuleContexts(); +} + +TocParser::TypeModifierContext* TocParser::TypeContext::typeModifier(size_t i) { + return getRuleContext(i); +} + size_t TocParser::TypeContext::getRuleIndex() const { return TocParser::RuleType; @@ -352,7 +431,8 @@ void TocParser::TypeContext::exitRule(tree::ParseTreeListener *listener) { TocParser::TypeContext* TocParser::type() { TypeContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 8, TocParser::RuleType); + enterRule(_localctx, 10, TocParser::RuleType); + size_t _la = 0; #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -363,8 +443,101 @@ TocParser::TypeContext* TocParser::type() { }); try { enterOuterAlt(_localctx, 1); - setState(95); + setState(110); typeName(); + setState(114); + _errHandler->sync(this); + _la = _input->LA(1); + while (_la == TocParser::T__3 + + || _la == TocParser::T__4) { + setState(111); + typeModifier(); + setState(116); + _errHandler->sync(this); + _la = _input->LA(1); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- TypeModifierContext ------------------------------------------------------------------ + +TocParser::TypeModifierContext::TypeModifierContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* TocParser::TypeModifierContext::NUMBER() { + return getToken(TocParser::NUMBER, 0); +} + + +size_t TocParser::TypeModifierContext::getRuleIndex() const { + return TocParser::RuleTypeModifier; +} + +void TocParser::TypeModifierContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterTypeModifier(this); +} + +void TocParser::TypeModifierContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitTypeModifier(this); +} + +TocParser::TypeModifierContext* TocParser::typeModifier() { + TypeModifierContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 12, TocParser::RuleTypeModifier); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(123); + _errHandler->sync(this); + switch (_input->LA(1)) { + case TocParser::T__3: { + enterOuterAlt(_localctx, 1); + setState(117); + match(TocParser::T__3); + break; + } + + case TocParser::T__4: { + enterOuterAlt(_localctx, 2); + setState(118); + match(TocParser::T__4); + setState(120); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == TocParser::NUMBER) { + setState(119); + match(TocParser::NUMBER); + } + setState(122); + match(TocParser::T__5); + break; + } + + default: + throw NoViableAltException(this); + } } catch (RecognitionException &e) { @@ -405,7 +578,7 @@ void TocParser::FuncDeclContext::exitRule(tree::ParseTreeListener *listener) { TocParser::FuncDeclContext* TocParser::funcDecl() { FuncDeclContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 10, TocParser::RuleFuncDecl); + enterRule(_localctx, 14, TocParser::RuleFuncDecl); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -416,9 +589,9 @@ TocParser::FuncDeclContext* TocParser::funcDecl() { }); try { enterOuterAlt(_localctx, 1); - setState(97); - match(TocParser::T__3); - setState(98); + setState(125); + match(TocParser::T__6); + setState(126); func(); } @@ -472,7 +645,7 @@ void TocParser::FuncContext::exitRule(tree::ParseTreeListener *listener) { TocParser::FuncContext* TocParser::func() { FuncContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 12, TocParser::RuleFunc); + enterRule(_localctx, 16, TocParser::RuleFunc); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -483,20 +656,20 @@ TocParser::FuncContext* TocParser::func() { }); try { enterOuterAlt(_localctx, 1); - setState(100); + setState(128); funcName(); - setState(101); - match(TocParser::T__4); - setState(102); + setState(129); + match(TocParser::T__7); + setState(130); parameter(); - setState(103); - match(TocParser::T__5); + setState(131); + match(TocParser::T__8); - setState(104); + setState(132); match(TocParser::T__1); - setState(105); + setState(133); type(); - setState(107); + setState(135); body(); } @@ -542,7 +715,7 @@ void TocParser::ParameterContext::exitRule(tree::ParseTreeListener *listener) { TocParser::ParameterContext* TocParser::parameter() { ParameterContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 14, TocParser::RuleParameter); + enterRule(_localctx, 18, TocParser::RuleParameter); size_t _la = 0; #if __cplusplus > 201703L @@ -554,22 +727,22 @@ TocParser::ParameterContext* TocParser::parameter() { }); try { enterOuterAlt(_localctx, 1); - setState(117); + setState(145); _errHandler->sync(this); _la = _input->LA(1); if (_la == TocParser::NAME) { - setState(109); + setState(137); var(); - setState(114); + setState(142); _errHandler->sync(this); _la = _input->LA(1); - while (_la == TocParser::T__6) { - setState(110); - match(TocParser::T__6); - setState(111); + while (_la == TocParser::T__9) { + setState(138); + match(TocParser::T__9); + setState(139); var(); - setState(116); + setState(144); _errHandler->sync(this); _la = _input->LA(1); } @@ -618,7 +791,7 @@ void TocParser::BodyContext::exitRule(tree::ParseTreeListener *listener) { TocParser::BodyContext* TocParser::body() { BodyContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 16, TocParser::RuleBody); + enterRule(_localctx, 20, TocParser::RuleBody); size_t _la = 0; #if __cplusplus > 201703L @@ -630,27 +803,33 @@ TocParser::BodyContext* TocParser::body() { }); try { enterOuterAlt(_localctx, 1); - setState(119); - match(TocParser::T__7); - setState(123); + setState(147); + match(TocParser::T__10); + setState(151); _errHandler->sync(this); _la = _input->LA(1); while ((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & ((1ULL << TocParser::T__0) - | (1ULL << TocParser::T__4) - | (1ULL << TocParser::T__10) - | (1ULL << TocParser::T__11) - | (1ULL << TocParser::T__12) - | (1ULL << TocParser::INTLIT) + | (1ULL << TocParser::T__7) + | (1ULL << TocParser::T__13) + | (1ULL << TocParser::T__15) + | (1ULL << TocParser::T__17) + | (1ULL << TocParser::T__18) + | (1ULL << TocParser::T__19) + | (1ULL << TocParser::PREFIX_OP) + | (1ULL << TocParser::INT_LIT) + | (1ULL << TocParser::DECIMAL_LIT) + | (1ULL << TocParser::STRING_LIT) + | (1ULL << TocParser::BOOL_LIT) | (1ULL << TocParser::NAME))) != 0)) { - setState(120); + setState(148); stmt(); - setState(125); + setState(153); _errHandler->sync(this); _la = _input->LA(1); } - setState(126); - match(TocParser::T__8); + setState(154); + match(TocParser::T__11); } catch (RecognitionException &e) { @@ -699,7 +878,7 @@ void TocParser::StructDeclContext::exitRule(tree::ParseTreeListener *listener) { TocParser::StructDeclContext* TocParser::structDecl() { StructDeclContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 18, TocParser::RuleStructDecl); + enterRule(_localctx, 22, TocParser::RuleStructDecl); size_t _la = 0; #if __cplusplus > 201703L @@ -711,24 +890,24 @@ TocParser::StructDeclContext* TocParser::structDecl() { }); try { enterOuterAlt(_localctx, 1); - setState(128); - match(TocParser::T__9); - setState(129); + setState(156); + match(TocParser::T__12); + setState(157); structName(); - setState(130); - match(TocParser::T__7); - setState(134); + setState(158); + match(TocParser::T__10); + setState(162); _errHandler->sync(this); _la = _input->LA(1); while (_la == TocParser::NAME) { - setState(131); + setState(159); structMember(); - setState(136); + setState(164); _errHandler->sync(this); _la = _input->LA(1); } - setState(137); - match(TocParser::T__8); + setState(165); + match(TocParser::T__11); } catch (RecognitionException &e) { @@ -773,7 +952,7 @@ void TocParser::StructMemberContext::exitRule(tree::ParseTreeListener *listener) TocParser::StructMemberContext* TocParser::structMember() { StructMemberContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 20, TocParser::RuleStructMember); + enterRule(_localctx, 24, TocParser::RuleStructMember); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -783,19 +962,19 @@ TocParser::StructMemberContext* TocParser::structMember() { exitRule(); }); try { - setState(141); + setState(169); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 7, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 10, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(139); + setState(167); structVar(); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(140); + setState(168); structMethod(); break; } @@ -843,7 +1022,7 @@ void TocParser::StructVarContext::exitRule(tree::ParseTreeListener *listener) { TocParser::StructVarContext* TocParser::structVar() { StructVarContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 22, TocParser::RuleStructVar); + enterRule(_localctx, 26, TocParser::RuleStructVar); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -854,7 +1033,7 @@ TocParser::StructVarContext* TocParser::structVar() { }); try { enterOuterAlt(_localctx, 1); - setState(143); + setState(171); var(); } @@ -896,7 +1075,7 @@ void TocParser::StructMethodContext::exitRule(tree::ParseTreeListener *listener) TocParser::StructMethodContext* TocParser::structMethod() { StructMethodContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 24, TocParser::RuleStructMethod); + enterRule(_localctx, 28, TocParser::RuleStructMethod); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -907,7 +1086,7 @@ TocParser::StructMethodContext* TocParser::structMethod() { }); try { enterOuterAlt(_localctx, 1); - setState(145); + setState(173); func(); } @@ -930,16 +1109,24 @@ TocParser::VarDeclContext* TocParser::StmtContext::varDecl() { return getRuleContext(0); } -TocParser::ConditionalContext* TocParser::StmtContext::conditional() { - return getRuleContext(0); +TocParser::IfStmtContext* TocParser::StmtContext::ifStmt() { + return getRuleContext(0); } -TocParser::LoopContext* TocParser::StmtContext::loop() { - return getRuleContext(0); +TocParser::SwitchStmtContext* TocParser::StmtContext::switchStmt() { + return getRuleContext(0); } -TocParser::AssignmentContext* TocParser::StmtContext::assignment() { - return getRuleContext(0); +TocParser::ForStmtContext* TocParser::StmtContext::forStmt() { + return getRuleContext(0); +} + +TocParser::WhileStmtContext* TocParser::StmtContext::whileStmt() { + return getRuleContext(0); +} + +TocParser::AssignStmtContext* TocParser::StmtContext::assignStmt() { + return getRuleContext(0); } TocParser::ReturnStmtContext* TocParser::StmtContext::returnStmt() { @@ -969,7 +1156,7 @@ void TocParser::StmtContext::exitRule(tree::ParseTreeListener *listener) { TocParser::StmtContext* TocParser::stmt() { StmtContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 26, TocParser::RuleStmt); + enterRule(_localctx, 30, TocParser::RuleStmt); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -979,42 +1166,61 @@ TocParser::StmtContext* TocParser::stmt() { exitRule(); }); try { - enterOuterAlt(_localctx, 1); - setState(153); + setState(183); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 8, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 11, _ctx)) { case 1: { - setState(147); + enterOuterAlt(_localctx, 1); + setState(175); varDecl(); break; } case 2: { - setState(148); - conditional(); + enterOuterAlt(_localctx, 2); + setState(176); + ifStmt(); break; } case 3: { - setState(149); - loop(); + enterOuterAlt(_localctx, 3); + setState(177); + switchStmt(); break; } case 4: { - setState(150); - assignment(); + enterOuterAlt(_localctx, 4); + setState(178); + forStmt(); break; } case 5: { - setState(151); - returnStmt(); + enterOuterAlt(_localctx, 5); + setState(179); + whileStmt(); break; } case 6: { - setState(152); + enterOuterAlt(_localctx, 6); + setState(180); + assignStmt(); + break; + } + + case 7: { + enterOuterAlt(_localctx, 7); + setState(181); + returnStmt(); + break; + } + + case 8: { + enterOuterAlt(_localctx, 8); + setState(182); expr(); break; } @@ -1033,36 +1239,49 @@ TocParser::StmtContext* TocParser::stmt() { return _localctx; } -//----------------- ConditionalContext ------------------------------------------------------------------ +//----------------- IfStmtContext ------------------------------------------------------------------ -TocParser::ConditionalContext::ConditionalContext(ParserRuleContext *parent, size_t invokingState) +TocParser::IfStmtContext::IfStmtContext(ParserRuleContext *parent, size_t invokingState) : ParserRuleContext(parent, invokingState) { } -TocParser::IfCondContext* TocParser::ConditionalContext::ifCond() { - return getRuleContext(0); +std::vector TocParser::IfStmtContext::expr() { + return getRuleContexts(); +} + +TocParser::ExprContext* TocParser::IfStmtContext::expr(size_t i) { + return getRuleContext(i); +} + +std::vector TocParser::IfStmtContext::body() { + return getRuleContexts(); +} + +TocParser::BodyContext* TocParser::IfStmtContext::body(size_t i) { + return getRuleContext(i); } -size_t TocParser::ConditionalContext::getRuleIndex() const { - return TocParser::RuleConditional; +size_t TocParser::IfStmtContext::getRuleIndex() const { + return TocParser::RuleIfStmt; } -void TocParser::ConditionalContext::enterRule(tree::ParseTreeListener *listener) { +void TocParser::IfStmtContext::enterRule(tree::ParseTreeListener *listener) { auto parserListener = dynamic_cast(listener); if (parserListener != nullptr) - parserListener->enterConditional(this); + parserListener->enterIfStmt(this); } -void TocParser::ConditionalContext::exitRule(tree::ParseTreeListener *listener) { +void TocParser::IfStmtContext::exitRule(tree::ParseTreeListener *listener) { auto parserListener = dynamic_cast(listener); if (parserListener != nullptr) - parserListener->exitConditional(this); + parserListener->exitIfStmt(this); } -TocParser::ConditionalContext* TocParser::conditional() { - ConditionalContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 28, TocParser::RuleConditional); +TocParser::IfStmtContext* TocParser::ifStmt() { + IfStmtContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 32, TocParser::RuleIfStmt); + size_t _la = 0; #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -1072,9 +1291,42 @@ TocParser::ConditionalContext* TocParser::conditional() { exitRule(); }); try { + size_t alt; enterOuterAlt(_localctx, 1); - setState(155); - ifCond(); + setState(185); + match(TocParser::T__13); + setState(186); + expr(); + setState(187); + body(); + setState(195); + _errHandler->sync(this); + alt = getInterpreter()->adaptivePredict(_input, 12, _ctx); + while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { + if (alt == 1) { + setState(188); + match(TocParser::T__14); + setState(189); + match(TocParser::T__13); + setState(190); + expr(); + setState(191); + body(); + } + setState(197); + _errHandler->sync(this); + alt = getInterpreter()->adaptivePredict(_input, 12, _ctx); + } + setState(200); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == TocParser::T__14) { + setState(198); + match(TocParser::T__14); + setState(199); + body(); + } } catch (RecognitionException &e) { @@ -1086,40 +1338,40 @@ TocParser::ConditionalContext* TocParser::conditional() { return _localctx; } -//----------------- IfCondContext ------------------------------------------------------------------ +//----------------- SwitchStmtContext ------------------------------------------------------------------ -TocParser::IfCondContext::IfCondContext(ParserRuleContext *parent, size_t invokingState) +TocParser::SwitchStmtContext::SwitchStmtContext(ParserRuleContext *parent, size_t invokingState) : ParserRuleContext(parent, invokingState) { } -TocParser::ExprContext* TocParser::IfCondContext::expr() { - return getRuleContext(0); +TocParser::IdentifierExprContext* TocParser::SwitchStmtContext::identifierExpr() { + return getRuleContext(0); } -TocParser::BodyContext* TocParser::IfCondContext::body() { - return getRuleContext(0); +TocParser::SwitchBodyContext* TocParser::SwitchStmtContext::switchBody() { + return getRuleContext(0); } -size_t TocParser::IfCondContext::getRuleIndex() const { - return TocParser::RuleIfCond; +size_t TocParser::SwitchStmtContext::getRuleIndex() const { + return TocParser::RuleSwitchStmt; } -void TocParser::IfCondContext::enterRule(tree::ParseTreeListener *listener) { +void TocParser::SwitchStmtContext::enterRule(tree::ParseTreeListener *listener) { auto parserListener = dynamic_cast(listener); if (parserListener != nullptr) - parserListener->enterIfCond(this); + parserListener->enterSwitchStmt(this); } -void TocParser::IfCondContext::exitRule(tree::ParseTreeListener *listener) { +void TocParser::SwitchStmtContext::exitRule(tree::ParseTreeListener *listener) { auto parserListener = dynamic_cast(listener); if (parserListener != nullptr) - parserListener->exitIfCond(this); + parserListener->exitSwitchStmt(this); } -TocParser::IfCondContext* TocParser::ifCond() { - IfCondContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 30, TocParser::RuleIfCond); +TocParser::SwitchStmtContext* TocParser::switchStmt() { + SwitchStmtContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 34, TocParser::RuleSwitchStmt); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -1130,12 +1382,12 @@ TocParser::IfCondContext* TocParser::ifCond() { }); try { enterOuterAlt(_localctx, 1); - setState(157); - match(TocParser::T__10); - setState(158); - expr(); - setState(159); - body(); + setState(202); + match(TocParser::T__15); + setState(203); + identifierExpr(); + setState(204); + switchBody(); } catch (RecognitionException &e) { @@ -1147,36 +1399,49 @@ TocParser::IfCondContext* TocParser::ifCond() { return _localctx; } -//----------------- LoopContext ------------------------------------------------------------------ +//----------------- SwitchBodyContext ------------------------------------------------------------------ -TocParser::LoopContext::LoopContext(ParserRuleContext *parent, size_t invokingState) +TocParser::SwitchBodyContext::SwitchBodyContext(ParserRuleContext *parent, size_t invokingState) : ParserRuleContext(parent, invokingState) { } -TocParser::WhileLoopContext* TocParser::LoopContext::whileLoop() { - return getRuleContext(0); +std::vector TocParser::SwitchBodyContext::expr() { + return getRuleContexts(); +} + +TocParser::ExprContext* TocParser::SwitchBodyContext::expr(size_t i) { + return getRuleContext(i); +} + +std::vector TocParser::SwitchBodyContext::body() { + return getRuleContexts(); +} + +TocParser::BodyContext* TocParser::SwitchBodyContext::body(size_t i) { + return getRuleContext(i); } -size_t TocParser::LoopContext::getRuleIndex() const { - return TocParser::RuleLoop; +size_t TocParser::SwitchBodyContext::getRuleIndex() const { + return TocParser::RuleSwitchBody; } -void TocParser::LoopContext::enterRule(tree::ParseTreeListener *listener) { +void TocParser::SwitchBodyContext::enterRule(tree::ParseTreeListener *listener) { auto parserListener = dynamic_cast(listener); if (parserListener != nullptr) - parserListener->enterLoop(this); + parserListener->enterSwitchBody(this); } -void TocParser::LoopContext::exitRule(tree::ParseTreeListener *listener) { +void TocParser::SwitchBodyContext::exitRule(tree::ParseTreeListener *listener) { auto parserListener = dynamic_cast(listener); if (parserListener != nullptr) - parserListener->exitLoop(this); + parserListener->exitSwitchBody(this); } -TocParser::LoopContext* TocParser::loop() { - LoopContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 32, TocParser::RuleLoop); +TocParser::SwitchBodyContext* TocParser::switchBody() { + SwitchBodyContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 36, TocParser::RuleSwitchBody); + size_t _la = 0; #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -1187,8 +1452,24 @@ TocParser::LoopContext* TocParser::loop() { }); try { enterOuterAlt(_localctx, 1); - setState(161); - whileLoop(); + setState(206); + match(TocParser::T__10); + setState(213); + _errHandler->sync(this); + _la = _input->LA(1); + while (_la == TocParser::T__16) { + setState(207); + match(TocParser::T__16); + setState(208); + expr(); + setState(209); + body(); + setState(215); + _errHandler->sync(this); + _la = _input->LA(1); + } + setState(216); + match(TocParser::T__11); } catch (RecognitionException &e) { @@ -1200,40 +1481,52 @@ TocParser::LoopContext* TocParser::loop() { return _localctx; } -//----------------- WhileLoopContext ------------------------------------------------------------------ +//----------------- ForStmtContext ------------------------------------------------------------------ -TocParser::WhileLoopContext::WhileLoopContext(ParserRuleContext *parent, size_t invokingState) +TocParser::ForStmtContext::ForStmtContext(ParserRuleContext *parent, size_t invokingState) : ParserRuleContext(parent, invokingState) { } -TocParser::ExprContext* TocParser::WhileLoopContext::expr() { - return getRuleContext(0); +std::vector TocParser::ForStmtContext::expr() { + return getRuleContexts(); +} + +TocParser::ExprContext* TocParser::ForStmtContext::expr(size_t i) { + return getRuleContext(i); } -TocParser::BodyContext* TocParser::WhileLoopContext::body() { +TocParser::BodyContext* TocParser::ForStmtContext::body() { return getRuleContext(0); } +TocParser::VarInitContext* TocParser::ForStmtContext::varInit() { + return getRuleContext(0); +} -size_t TocParser::WhileLoopContext::getRuleIndex() const { - return TocParser::RuleWhileLoop; +TocParser::AssignStmtContext* TocParser::ForStmtContext::assignStmt() { + return getRuleContext(0); } -void TocParser::WhileLoopContext::enterRule(tree::ParseTreeListener *listener) { - auto parserListener = dynamic_cast(listener); + +size_t TocParser::ForStmtContext::getRuleIndex() const { + return TocParser::RuleForStmt; +} + +void TocParser::ForStmtContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); if (parserListener != nullptr) - parserListener->enterWhileLoop(this); + parserListener->enterForStmt(this); } -void TocParser::WhileLoopContext::exitRule(tree::ParseTreeListener *listener) { +void TocParser::ForStmtContext::exitRule(tree::ParseTreeListener *listener) { auto parserListener = dynamic_cast(listener); if (parserListener != nullptr) - parserListener->exitWhileLoop(this); + parserListener->exitForStmt(this); } -TocParser::WhileLoopContext* TocParser::whileLoop() { - WhileLoopContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 34, TocParser::RuleWhileLoop); +TocParser::ForStmtContext* TocParser::forStmt() { + ForStmtContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 38, TocParser::RuleForStmt); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -1244,11 +1537,35 @@ TocParser::WhileLoopContext* TocParser::whileLoop() { }); try { enterOuterAlt(_localctx, 1); - setState(163); - match(TocParser::T__11); - setState(164); + setState(218); + match(TocParser::T__17); + setState(221); + _errHandler->sync(this); + switch (getInterpreter()->adaptivePredict(_input, 15, _ctx)) { + case 1: { + setState(219); + varInit(); + break; + } + + case 2: { + setState(220); + assignStmt(); + break; + } + + default: + break; + } + setState(223); + match(TocParser::T__9); + setState(224); expr(); - setState(165); + setState(225); + match(TocParser::T__9); + setState(226); + expr(); + setState(227); body(); } @@ -1261,40 +1578,101 @@ TocParser::WhileLoopContext* TocParser::whileLoop() { return _localctx; } -//----------------- AssignmentContext ------------------------------------------------------------------ +//----------------- WhileStmtContext ------------------------------------------------------------------ -TocParser::AssignmentContext::AssignmentContext(ParserRuleContext *parent, size_t invokingState) +TocParser::WhileStmtContext::WhileStmtContext(ParserRuleContext *parent, size_t invokingState) : ParserRuleContext(parent, invokingState) { } -TocParser::IdentifierContext* TocParser::AssignmentContext::identifier() { - return getRuleContext(0); +TocParser::ExprContext* TocParser::WhileStmtContext::expr() { + return getRuleContext(0); +} + +TocParser::BodyContext* TocParser::WhileStmtContext::body() { + return getRuleContext(0); +} + + +size_t TocParser::WhileStmtContext::getRuleIndex() const { + return TocParser::RuleWhileStmt; +} + +void TocParser::WhileStmtContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterWhileStmt(this); } -TocParser::ExprContext* TocParser::AssignmentContext::expr() { +void TocParser::WhileStmtContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitWhileStmt(this); +} + +TocParser::WhileStmtContext* TocParser::whileStmt() { + WhileStmtContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 40, TocParser::RuleWhileStmt); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(229); + match(TocParser::T__18); + setState(230); + expr(); + setState(231); + body(); + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- AssignStmtContext ------------------------------------------------------------------ + +TocParser::AssignStmtContext::AssignStmtContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +TocParser::IdentifierExprContext* TocParser::AssignStmtContext::identifierExpr() { + return getRuleContext(0); +} + +TocParser::ExprContext* TocParser::AssignStmtContext::expr() { return getRuleContext(0); } -size_t TocParser::AssignmentContext::getRuleIndex() const { - return TocParser::RuleAssignment; +size_t TocParser::AssignStmtContext::getRuleIndex() const { + return TocParser::RuleAssignStmt; } -void TocParser::AssignmentContext::enterRule(tree::ParseTreeListener *listener) { +void TocParser::AssignStmtContext::enterRule(tree::ParseTreeListener *listener) { auto parserListener = dynamic_cast(listener); if (parserListener != nullptr) - parserListener->enterAssignment(this); + parserListener->enterAssignStmt(this); } -void TocParser::AssignmentContext::exitRule(tree::ParseTreeListener *listener) { +void TocParser::AssignStmtContext::exitRule(tree::ParseTreeListener *listener) { auto parserListener = dynamic_cast(listener); if (parserListener != nullptr) - parserListener->exitAssignment(this); + parserListener->exitAssignStmt(this); } -TocParser::AssignmentContext* TocParser::assignment() { - AssignmentContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 36, TocParser::RuleAssignment); +TocParser::AssignStmtContext* TocParser::assignStmt() { + AssignStmtContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 42, TocParser::RuleAssignStmt); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -1305,11 +1683,11 @@ TocParser::AssignmentContext* TocParser::assignment() { }); try { enterOuterAlt(_localctx, 1); - setState(167); - identifier(); - setState(168); + setState(233); + identifierExpr(); + setState(234); match(TocParser::T__2); - setState(169); + setState(235); expr(); } @@ -1351,7 +1729,7 @@ void TocParser::ReturnStmtContext::exitRule(tree::ParseTreeListener *listener) { TocParser::ReturnStmtContext* TocParser::returnStmt() { ReturnStmtContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 38, TocParser::RuleReturnStmt); + enterRule(_localctx, 44, TocParser::RuleReturnStmt); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -1362,9 +1740,9 @@ TocParser::ReturnStmtContext* TocParser::returnStmt() { }); try { enterOuterAlt(_localctx, 1); - setState(171); - match(TocParser::T__12); - setState(172); + setState(237); + match(TocParser::T__19); + setState(238); expr(); } @@ -1383,32 +1761,28 @@ TocParser::ExprContext::ExprContext(ParserRuleContext *parent, size_t invokingSt : ParserRuleContext(parent, invokingState) { } -TocParser::FuncCallContext* TocParser::ExprContext::funcCall() { - return getRuleContext(0); -} - -TocParser::LiteralContext* TocParser::ExprContext::literal() { - return getRuleContext(0); -} - -TocParser::IdentifierContext* TocParser::ExprContext::identifier() { - return getRuleContext(0); +TocParser::FuncExprContext* TocParser::ExprContext::funcExpr() { + return getRuleContext(0); } -TocParser::SubscriptContext* TocParser::ExprContext::subscript() { - return getRuleContext(0); +TocParser::LitExprContext* TocParser::ExprContext::litExpr() { + return getRuleContext(0); } -TocParser::MemberAccessContext* TocParser::ExprContext::memberAccess() { - return getRuleContext(0); +TocParser::IdentifierExprContext* TocParser::ExprContext::identifierExpr() { + return getRuleContext(0); } TocParser::ParenExprContext* TocParser::ExprContext::parenExpr() { return getRuleContext(0); } -TocParser::OperatorExprContext* TocParser::ExprContext::operatorExpr() { - return getRuleContext(0); +TocParser::AccessExprContext* TocParser::ExprContext::accessExpr() { + return getRuleContext(0); +} + +TocParser::OpExprContext* TocParser::ExprContext::opExpr() { + return getRuleContext(0); } @@ -1430,7 +1804,7 @@ void TocParser::ExprContext::exitRule(tree::ParseTreeListener *listener) { TocParser::ExprContext* TocParser::expr() { ExprContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 40, TocParser::RuleExpr); + enterRule(_localctx, 46, TocParser::RuleExpr); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -1440,55 +1814,48 @@ TocParser::ExprContext* TocParser::expr() { exitRule(); }); try { - setState(181); + setState(246); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 9, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 16, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(174); - funcCall(); + setState(240); + funcExpr(); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(175); - literal(); + setState(241); + litExpr(); break; } case 3: { enterOuterAlt(_localctx, 3); - setState(176); - identifier(); + setState(242); + identifierExpr(); break; } case 4: { enterOuterAlt(_localctx, 4); - setState(177); - subscript(); + setState(243); + parenExpr(); break; } case 5: { enterOuterAlt(_localctx, 5); - setState(178); - memberAccess(); + setState(244); + accessExpr(); break; } case 6: { enterOuterAlt(_localctx, 6); - setState(179); - parenExpr(); - break; - } - - case 7: { - enterOuterAlt(_localctx, 7); - setState(180); - operatorExpr(); + setState(245); + opExpr(); break; } @@ -1512,30 +1879,26 @@ TocParser::NonOpExprContext::NonOpExprContext(ParserRuleContext *parent, size_t : ParserRuleContext(parent, invokingState) { } -TocParser::FuncCallContext* TocParser::NonOpExprContext::funcCall() { - return getRuleContext(0); -} - -TocParser::LiteralContext* TocParser::NonOpExprContext::literal() { - return getRuleContext(0); -} - -TocParser::IdentifierContext* TocParser::NonOpExprContext::identifier() { - return getRuleContext(0); +TocParser::FuncExprContext* TocParser::NonOpExprContext::funcExpr() { + return getRuleContext(0); } -TocParser::SubscriptContext* TocParser::NonOpExprContext::subscript() { - return getRuleContext(0); +TocParser::LitExprContext* TocParser::NonOpExprContext::litExpr() { + return getRuleContext(0); } -TocParser::MemberAccessContext* TocParser::NonOpExprContext::memberAccess() { - return getRuleContext(0); +TocParser::IdentifierExprContext* TocParser::NonOpExprContext::identifierExpr() { + return getRuleContext(0); } TocParser::ParenExprContext* TocParser::NonOpExprContext::parenExpr() { return getRuleContext(0); } +TocParser::AccessExprContext* TocParser::NonOpExprContext::accessExpr() { + return getRuleContext(0); +} + size_t TocParser::NonOpExprContext::getRuleIndex() const { return TocParser::RuleNonOpExpr; @@ -1555,7 +1918,7 @@ void TocParser::NonOpExprContext::exitRule(tree::ParseTreeListener *listener) { TocParser::NonOpExprContext* TocParser::nonOpExpr() { NonOpExprContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 42, TocParser::RuleNonOpExpr); + enterRule(_localctx, 48, TocParser::RuleNonOpExpr); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -1565,48 +1928,41 @@ TocParser::NonOpExprContext* TocParser::nonOpExpr() { exitRule(); }); try { - setState(189); + setState(253); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 10, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 17, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(183); - funcCall(); + setState(248); + funcExpr(); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(184); - literal(); + setState(249); + litExpr(); break; } case 3: { enterOuterAlt(_localctx, 3); - setState(185); - identifier(); + setState(250); + identifierExpr(); break; } case 4: { enterOuterAlt(_localctx, 4); - setState(186); - subscript(); + setState(251); + parenExpr(); break; } case 5: { enterOuterAlt(_localctx, 5); - setState(187); - memberAccess(); - break; - } - - case 6: { - enterOuterAlt(_localctx, 6); - setState(188); - parenExpr(); + setState(252); + accessExpr(); break; } @@ -1624,52 +1980,44 @@ TocParser::NonOpExprContext* TocParser::nonOpExpr() { return _localctx; } -//----------------- NonSubscriptExprContext ------------------------------------------------------------------ +//----------------- NonAccessExprContext ------------------------------------------------------------------ -TocParser::NonSubscriptExprContext::NonSubscriptExprContext(ParserRuleContext *parent, size_t invokingState) +TocParser::NonAccessExprContext::NonAccessExprContext(ParserRuleContext *parent, size_t invokingState) : ParserRuleContext(parent, invokingState) { } -TocParser::FuncCallContext* TocParser::NonSubscriptExprContext::funcCall() { - return getRuleContext(0); -} - -TocParser::LiteralContext* TocParser::NonSubscriptExprContext::literal() { - return getRuleContext(0); +TocParser::FuncExprContext* TocParser::NonAccessExprContext::funcExpr() { + return getRuleContext(0); } -TocParser::IdentifierContext* TocParser::NonSubscriptExprContext::identifier() { - return getRuleContext(0); +TocParser::IdentifierExprContext* TocParser::NonAccessExprContext::identifierExpr() { + return getRuleContext(0); } -TocParser::MemberAccessContext* TocParser::NonSubscriptExprContext::memberAccess() { - return getRuleContext(0); -} - -TocParser::ParenExprContext* TocParser::NonSubscriptExprContext::parenExpr() { +TocParser::ParenExprContext* TocParser::NonAccessExprContext::parenExpr() { return getRuleContext(0); } -size_t TocParser::NonSubscriptExprContext::getRuleIndex() const { - return TocParser::RuleNonSubscriptExpr; +size_t TocParser::NonAccessExprContext::getRuleIndex() const { + return TocParser::RuleNonAccessExpr; } -void TocParser::NonSubscriptExprContext::enterRule(tree::ParseTreeListener *listener) { +void TocParser::NonAccessExprContext::enterRule(tree::ParseTreeListener *listener) { auto parserListener = dynamic_cast(listener); if (parserListener != nullptr) - parserListener->enterNonSubscriptExpr(this); + parserListener->enterNonAccessExpr(this); } -void TocParser::NonSubscriptExprContext::exitRule(tree::ParseTreeListener *listener) { +void TocParser::NonAccessExprContext::exitRule(tree::ParseTreeListener *listener) { auto parserListener = dynamic_cast(listener); if (parserListener != nullptr) - parserListener->exitNonSubscriptExpr(this); + parserListener->exitNonAccessExpr(this); } -TocParser::NonSubscriptExprContext* TocParser::nonSubscriptExpr() { - NonSubscriptExprContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 44, TocParser::RuleNonSubscriptExpr); +TocParser::NonAccessExprContext* TocParser::nonAccessExpr() { + NonAccessExprContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 50, TocParser::RuleNonAccessExpr); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -1679,40 +2027,26 @@ TocParser::NonSubscriptExprContext* TocParser::nonSubscriptExpr() { exitRule(); }); try { - setState(196); + setState(258); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 11, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 18, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(191); - funcCall(); + setState(255); + funcExpr(); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(192); - literal(); + setState(256); + identifierExpr(); break; } case 3: { enterOuterAlt(_localctx, 3); - setState(193); - identifier(); - break; - } - - case 4: { - enterOuterAlt(_localctx, 4); - setState(194); - memberAccess(); - break; - } - - case 5: { - enterOuterAlt(_localctx, 5); - setState(195); + setState(257); parenExpr(); break; } @@ -1731,56 +2065,141 @@ TocParser::NonSubscriptExprContext* TocParser::nonSubscriptExpr() { return _localctx; } -//----------------- NonAccessExprContext ------------------------------------------------------------------ +//----------------- FuncExprContext ------------------------------------------------------------------ -TocParser::NonAccessExprContext::NonAccessExprContext(ParserRuleContext *parent, size_t invokingState) +TocParser::FuncExprContext::FuncExprContext(ParserRuleContext *parent, size_t invokingState) : ParserRuleContext(parent, invokingState) { } -TocParser::FuncCallContext* TocParser::NonAccessExprContext::funcCall() { - return getRuleContext(0); +TocParser::FuncNameContext* TocParser::FuncExprContext::funcName() { + return getRuleContext(0); } -TocParser::LiteralContext* TocParser::NonAccessExprContext::literal() { - return getRuleContext(0); +std::vector TocParser::FuncExprContext::expr() { + return getRuleContexts(); } -TocParser::IdentifierContext* TocParser::NonAccessExprContext::identifier() { - return getRuleContext(0); +TocParser::ExprContext* TocParser::FuncExprContext::expr(size_t i) { + return getRuleContext(i); } -TocParser::SubscriptContext* TocParser::NonAccessExprContext::subscript() { - return getRuleContext(0); + +size_t TocParser::FuncExprContext::getRuleIndex() const { + return TocParser::RuleFuncExpr; } -TocParser::ParenExprContext* TocParser::NonAccessExprContext::parenExpr() { - return getRuleContext(0); +void TocParser::FuncExprContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterFuncExpr(this); } -TocParser::OperatorExprContext* TocParser::NonAccessExprContext::operatorExpr() { - return getRuleContext(0); +void TocParser::FuncExprContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitFuncExpr(this); } +TocParser::FuncExprContext* TocParser::funcExpr() { + FuncExprContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 52, TocParser::RuleFuncExpr); + size_t _la = 0; -size_t TocParser::NonAccessExprContext::getRuleIndex() const { - return TocParser::RuleNonAccessExpr; +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(260); + funcName(); + setState(261); + match(TocParser::T__7); + setState(270); + _errHandler->sync(this); + + _la = _input->LA(1); + if ((((_la & ~ 0x3fULL) == 0) && + ((1ULL << _la) & ((1ULL << TocParser::T__7) + | (1ULL << TocParser::PREFIX_OP) + | (1ULL << TocParser::INT_LIT) + | (1ULL << TocParser::DECIMAL_LIT) + | (1ULL << TocParser::STRING_LIT) + | (1ULL << TocParser::BOOL_LIT) + | (1ULL << TocParser::NAME))) != 0)) { + setState(262); + expr(); + setState(267); + _errHandler->sync(this); + _la = _input->LA(1); + while (_la == TocParser::T__9) { + setState(263); + match(TocParser::T__9); + setState(264); + expr(); + setState(269); + _errHandler->sync(this); + _la = _input->LA(1); + } + } + setState(272); + match(TocParser::T__8); + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; } -void TocParser::NonAccessExprContext::enterRule(tree::ParseTreeListener *listener) { +//----------------- OpExprContext ------------------------------------------------------------------ + +TocParser::OpExprContext::OpExprContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +TocParser::BinaryOpContext* TocParser::OpExprContext::binaryOp() { + return getRuleContext(0); +} + +TocParser::PrefixOpContext* TocParser::OpExprContext::prefixOp() { + return getRuleContext(0); +} + +TocParser::PostfixOpContext* TocParser::OpExprContext::postfixOp() { + return getRuleContext(0); +} + +TocParser::TernaryOpContext* TocParser::OpExprContext::ternaryOp() { + return getRuleContext(0); +} + + +size_t TocParser::OpExprContext::getRuleIndex() const { + return TocParser::RuleOpExpr; +} + +void TocParser::OpExprContext::enterRule(tree::ParseTreeListener *listener) { auto parserListener = dynamic_cast(listener); if (parserListener != nullptr) - parserListener->enterNonAccessExpr(this); + parserListener->enterOpExpr(this); } -void TocParser::NonAccessExprContext::exitRule(tree::ParseTreeListener *listener) { +void TocParser::OpExprContext::exitRule(tree::ParseTreeListener *listener) { auto parserListener = dynamic_cast(listener); if (parserListener != nullptr) - parserListener->exitNonAccessExpr(this); + parserListener->exitOpExpr(this); } -TocParser::NonAccessExprContext* TocParser::nonAccessExpr() { - NonAccessExprContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 46, TocParser::RuleNonAccessExpr); +TocParser::OpExprContext* TocParser::opExpr() { + OpExprContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 54, TocParser::RuleOpExpr); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -1790,48 +2209,34 @@ TocParser::NonAccessExprContext* TocParser::nonAccessExpr() { exitRule(); }); try { - setState(204); + setState(278); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 12, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 21, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(198); - funcCall(); + setState(274); + binaryOp(); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(199); - literal(); + setState(275); + prefixOp(); break; } case 3: { enterOuterAlt(_localctx, 3); - setState(200); - identifier(); + setState(276); + postfixOp(); break; } case 4: { enterOuterAlt(_localctx, 4); - setState(201); - subscript(); - break; - } - - case 5: { - enterOuterAlt(_localctx, 5); - setState(202); - parenExpr(); - break; - } - - case 6: { - enterOuterAlt(_localctx, 6); - setState(203); - operatorExpr(); + setState(277); + ternaryOp(); break; } @@ -1849,44 +2254,48 @@ TocParser::NonAccessExprContext* TocParser::nonAccessExpr() { return _localctx; } -//----------------- FuncCallContext ------------------------------------------------------------------ +//----------------- BinaryOpContext ------------------------------------------------------------------ -TocParser::FuncCallContext::FuncCallContext(ParserRuleContext *parent, size_t invokingState) +TocParser::BinaryOpContext::BinaryOpContext(ParserRuleContext *parent, size_t invokingState) : ParserRuleContext(parent, invokingState) { } -TocParser::FuncNameContext* TocParser::FuncCallContext::funcName() { - return getRuleContext(0); +std::vector TocParser::BinaryOpContext::nonOpExpr() { + return getRuleContexts(); } -std::vector TocParser::FuncCallContext::expr() { - return getRuleContexts(); +TocParser::NonOpExprContext* TocParser::BinaryOpContext::nonOpExpr(size_t i) { + return getRuleContext(i); } -TocParser::ExprContext* TocParser::FuncCallContext::expr(size_t i) { - return getRuleContext(i); +std::vector TocParser::BinaryOpContext::BINARY_OP() { + return getTokens(TocParser::BINARY_OP); } +tree::TerminalNode* TocParser::BinaryOpContext::BINARY_OP(size_t i) { + return getToken(TocParser::BINARY_OP, i); +} -size_t TocParser::FuncCallContext::getRuleIndex() const { - return TocParser::RuleFuncCall; + +size_t TocParser::BinaryOpContext::getRuleIndex() const { + return TocParser::RuleBinaryOp; } -void TocParser::FuncCallContext::enterRule(tree::ParseTreeListener *listener) { +void TocParser::BinaryOpContext::enterRule(tree::ParseTreeListener *listener) { auto parserListener = dynamic_cast(listener); if (parserListener != nullptr) - parserListener->enterFuncCall(this); + parserListener->enterBinaryOp(this); } -void TocParser::FuncCallContext::exitRule(tree::ParseTreeListener *listener) { +void TocParser::BinaryOpContext::exitRule(tree::ParseTreeListener *listener) { auto parserListener = dynamic_cast(listener); if (parserListener != nullptr) - parserListener->exitFuncCall(this); + parserListener->exitBinaryOp(this); } -TocParser::FuncCallContext* TocParser::funcCall() { - FuncCallContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 48, TocParser::RuleFuncCall); +TocParser::BinaryOpContext* TocParser::binaryOp() { + BinaryOpContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 56, TocParser::RuleBinaryOp); size_t _la = 0; #if __cplusplus > 201703L @@ -1898,35 +2307,24 @@ TocParser::FuncCallContext* TocParser::funcCall() { }); try { enterOuterAlt(_localctx, 1); - setState(206); - funcName(); - setState(207); - match(TocParser::T__4); - setState(216); + setState(280); + nonOpExpr(); + setState(281); + match(TocParser::BINARY_OP); + setState(282); + nonOpExpr(); + setState(287); _errHandler->sync(this); - _la = _input->LA(1); - if ((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & ((1ULL << TocParser::T__4) - | (1ULL << TocParser::INTLIT) - | (1ULL << TocParser::NAME))) != 0)) { - setState(208); - expr(); - setState(213); + while (_la == TocParser::BINARY_OP) { + setState(283); + match(TocParser::BINARY_OP); + setState(284); + nonOpExpr(); + setState(289); _errHandler->sync(this); _la = _input->LA(1); - while (_la == TocParser::T__6) { - setState(209); - match(TocParser::T__6); - setState(210); - expr(); - setState(215); - _errHandler->sync(this); - _la = _input->LA(1); - } } - setState(218); - match(TocParser::T__5); } catch (RecognitionException &e) { @@ -1938,36 +2336,40 @@ TocParser::FuncCallContext* TocParser::funcCall() { return _localctx; } -//----------------- OperatorExprContext ------------------------------------------------------------------ +//----------------- PrefixOpContext ------------------------------------------------------------------ -TocParser::OperatorExprContext::OperatorExprContext(ParserRuleContext *parent, size_t invokingState) +TocParser::PrefixOpContext::PrefixOpContext(ParserRuleContext *parent, size_t invokingState) : ParserRuleContext(parent, invokingState) { } -TocParser::BinaryOperatorContext* TocParser::OperatorExprContext::binaryOperator() { - return getRuleContext(0); +tree::TerminalNode* TocParser::PrefixOpContext::PREFIX_OP() { + return getToken(TocParser::PREFIX_OP, 0); } +TocParser::NonOpExprContext* TocParser::PrefixOpContext::nonOpExpr() { + return getRuleContext(0); +} -size_t TocParser::OperatorExprContext::getRuleIndex() const { - return TocParser::RuleOperatorExpr; + +size_t TocParser::PrefixOpContext::getRuleIndex() const { + return TocParser::RulePrefixOp; } -void TocParser::OperatorExprContext::enterRule(tree::ParseTreeListener *listener) { +void TocParser::PrefixOpContext::enterRule(tree::ParseTreeListener *listener) { auto parserListener = dynamic_cast(listener); if (parserListener != nullptr) - parserListener->enterOperatorExpr(this); + parserListener->enterPrefixOp(this); } -void TocParser::OperatorExprContext::exitRule(tree::ParseTreeListener *listener) { +void TocParser::PrefixOpContext::exitRule(tree::ParseTreeListener *listener) { auto parserListener = dynamic_cast(listener); if (parserListener != nullptr) - parserListener->exitOperatorExpr(this); + parserListener->exitPrefixOp(this); } -TocParser::OperatorExprContext* TocParser::operatorExpr() { - OperatorExprContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 50, TocParser::RuleOperatorExpr); +TocParser::PrefixOpContext* TocParser::prefixOp() { + PrefixOpContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 58, TocParser::RulePrefixOp); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -1978,8 +2380,10 @@ TocParser::OperatorExprContext* TocParser::operatorExpr() { }); try { enterOuterAlt(_localctx, 1); - setState(220); - binaryOperator(); + setState(290); + match(TocParser::PREFIX_OP); + setState(291); + nonOpExpr(); } catch (RecognitionException &e) { @@ -1991,49 +2395,40 @@ TocParser::OperatorExprContext* TocParser::operatorExpr() { return _localctx; } -//----------------- BinaryOperatorContext ------------------------------------------------------------------ +//----------------- PostfixOpContext ------------------------------------------------------------------ -TocParser::BinaryOperatorContext::BinaryOperatorContext(ParserRuleContext *parent, size_t invokingState) +TocParser::PostfixOpContext::PostfixOpContext(ParserRuleContext *parent, size_t invokingState) : ParserRuleContext(parent, invokingState) { } -std::vector TocParser::BinaryOperatorContext::nonOpExpr() { - return getRuleContexts(); -} - -TocParser::NonOpExprContext* TocParser::BinaryOperatorContext::nonOpExpr(size_t i) { - return getRuleContext(i); -} - -std::vector TocParser::BinaryOperatorContext::BINARY_OPERATOR() { - return getTokens(TocParser::BINARY_OPERATOR); +TocParser::NonOpExprContext* TocParser::PostfixOpContext::nonOpExpr() { + return getRuleContext(0); } -tree::TerminalNode* TocParser::BinaryOperatorContext::BINARY_OPERATOR(size_t i) { - return getToken(TocParser::BINARY_OPERATOR, i); +tree::TerminalNode* TocParser::PostfixOpContext::POSTFIX_OP() { + return getToken(TocParser::POSTFIX_OP, 0); } -size_t TocParser::BinaryOperatorContext::getRuleIndex() const { - return TocParser::RuleBinaryOperator; +size_t TocParser::PostfixOpContext::getRuleIndex() const { + return TocParser::RulePostfixOp; } -void TocParser::BinaryOperatorContext::enterRule(tree::ParseTreeListener *listener) { +void TocParser::PostfixOpContext::enterRule(tree::ParseTreeListener *listener) { auto parserListener = dynamic_cast(listener); if (parserListener != nullptr) - parserListener->enterBinaryOperator(this); + parserListener->enterPostfixOp(this); } -void TocParser::BinaryOperatorContext::exitRule(tree::ParseTreeListener *listener) { +void TocParser::PostfixOpContext::exitRule(tree::ParseTreeListener *listener) { auto parserListener = dynamic_cast(listener); if (parserListener != nullptr) - parserListener->exitBinaryOperator(this); + parserListener->exitPostfixOp(this); } -TocParser::BinaryOperatorContext* TocParser::binaryOperator() { - BinaryOperatorContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 52, TocParser::RuleBinaryOperator); - size_t _la = 0; +TocParser::PostfixOpContext* TocParser::postfixOp() { + PostfixOpContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 60, TocParser::RulePostfixOp); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -2044,24 +2439,10 @@ TocParser::BinaryOperatorContext* TocParser::binaryOperator() { }); try { enterOuterAlt(_localctx, 1); - setState(222); - nonOpExpr(); - setState(223); - match(TocParser::BINARY_OPERATOR); - setState(224); + setState(293); nonOpExpr(); - setState(229); - _errHandler->sync(this); - _la = _input->LA(1); - while (_la == TocParser::BINARY_OPERATOR) { - setState(225); - match(TocParser::BINARY_OPERATOR); - setState(226); - nonOpExpr(); - setState(231); - _errHandler->sync(this); - _la = _input->LA(1); - } + setState(294); + match(TocParser::POSTFIX_OP); } catch (RecognitionException &e) { @@ -2073,36 +2454,44 @@ TocParser::BinaryOperatorContext* TocParser::binaryOperator() { return _localctx; } -//----------------- IdentifierContext ------------------------------------------------------------------ +//----------------- TernaryOpContext ------------------------------------------------------------------ -TocParser::IdentifierContext::IdentifierContext(ParserRuleContext *parent, size_t invokingState) +TocParser::TernaryOpContext::TernaryOpContext(ParserRuleContext *parent, size_t invokingState) : ParserRuleContext(parent, invokingState) { } -TocParser::VarNameContext* TocParser::IdentifierContext::varName() { - return getRuleContext(0); +TocParser::NonOpExprContext* TocParser::TernaryOpContext::nonOpExpr() { + return getRuleContext(0); } +std::vector TocParser::TernaryOpContext::expr() { + return getRuleContexts(); +} -size_t TocParser::IdentifierContext::getRuleIndex() const { - return TocParser::RuleIdentifier; +TocParser::ExprContext* TocParser::TernaryOpContext::expr(size_t i) { + return getRuleContext(i); } -void TocParser::IdentifierContext::enterRule(tree::ParseTreeListener *listener) { + +size_t TocParser::TernaryOpContext::getRuleIndex() const { + return TocParser::RuleTernaryOp; +} + +void TocParser::TernaryOpContext::enterRule(tree::ParseTreeListener *listener) { auto parserListener = dynamic_cast(listener); if (parserListener != nullptr) - parserListener->enterIdentifier(this); + parserListener->enterTernaryOp(this); } -void TocParser::IdentifierContext::exitRule(tree::ParseTreeListener *listener) { +void TocParser::TernaryOpContext::exitRule(tree::ParseTreeListener *listener) { auto parserListener = dynamic_cast(listener); if (parserListener != nullptr) - parserListener->exitIdentifier(this); + parserListener->exitTernaryOp(this); } -TocParser::IdentifierContext* TocParser::identifier() { - IdentifierContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 54, TocParser::RuleIdentifier); +TocParser::TernaryOpContext* TocParser::ternaryOp() { + TernaryOpContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 62, TocParser::RuleTernaryOp); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -2113,8 +2502,16 @@ TocParser::IdentifierContext* TocParser::identifier() { }); try { enterOuterAlt(_localctx, 1); - setState(232); - varName(); + setState(296); + nonOpExpr(); + setState(297); + match(TocParser::T__20); + setState(298); + expr(); + setState(299); + match(TocParser::T__1); + setState(300); + expr(); } catch (RecognitionException &e) { @@ -2126,36 +2523,36 @@ TocParser::IdentifierContext* TocParser::identifier() { return _localctx; } -//----------------- LiteralContext ------------------------------------------------------------------ +//----------------- IdentifierExprContext ------------------------------------------------------------------ -TocParser::LiteralContext::LiteralContext(ParserRuleContext *parent, size_t invokingState) +TocParser::IdentifierExprContext::IdentifierExprContext(ParserRuleContext *parent, size_t invokingState) : ParserRuleContext(parent, invokingState) { } -tree::TerminalNode* TocParser::LiteralContext::INTLIT() { - return getToken(TocParser::INTLIT, 0); +TocParser::VarNameContext* TocParser::IdentifierExprContext::varName() { + return getRuleContext(0); } -size_t TocParser::LiteralContext::getRuleIndex() const { - return TocParser::RuleLiteral; +size_t TocParser::IdentifierExprContext::getRuleIndex() const { + return TocParser::RuleIdentifierExpr; } -void TocParser::LiteralContext::enterRule(tree::ParseTreeListener *listener) { +void TocParser::IdentifierExprContext::enterRule(tree::ParseTreeListener *listener) { auto parserListener = dynamic_cast(listener); if (parserListener != nullptr) - parserListener->enterLiteral(this); + parserListener->enterIdentifierExpr(this); } -void TocParser::LiteralContext::exitRule(tree::ParseTreeListener *listener) { +void TocParser::IdentifierExprContext::exitRule(tree::ParseTreeListener *listener) { auto parserListener = dynamic_cast(listener); if (parserListener != nullptr) - parserListener->exitLiteral(this); + parserListener->exitIdentifierExpr(this); } -TocParser::LiteralContext* TocParser::literal() { - LiteralContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 56, TocParser::RuleLiteral); +TocParser::IdentifierExprContext* TocParser::identifierExpr() { + IdentifierExprContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 64, TocParser::RuleIdentifierExpr); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -2166,8 +2563,8 @@ TocParser::LiteralContext* TocParser::literal() { }); try { enterOuterAlt(_localctx, 1); - setState(234); - match(TocParser::INTLIT); + setState(302); + varName(); } catch (RecognitionException &e) { @@ -2179,40 +2576,49 @@ TocParser::LiteralContext* TocParser::literal() { return _localctx; } -//----------------- SubscriptContext ------------------------------------------------------------------ +//----------------- LitExprContext ------------------------------------------------------------------ -TocParser::SubscriptContext::SubscriptContext(ParserRuleContext *parent, size_t invokingState) +TocParser::LitExprContext::LitExprContext(ParserRuleContext *parent, size_t invokingState) : ParserRuleContext(parent, invokingState) { } -TocParser::NonSubscriptExprContext* TocParser::SubscriptContext::nonSubscriptExpr() { - return getRuleContext(0); +tree::TerminalNode* TocParser::LitExprContext::INT_LIT() { + return getToken(TocParser::INT_LIT, 0); } -TocParser::ExprContext* TocParser::SubscriptContext::expr() { - return getRuleContext(0); +tree::TerminalNode* TocParser::LitExprContext::DECIMAL_LIT() { + return getToken(TocParser::DECIMAL_LIT, 0); +} + +tree::TerminalNode* TocParser::LitExprContext::STRING_LIT() { + return getToken(TocParser::STRING_LIT, 0); +} + +tree::TerminalNode* TocParser::LitExprContext::BOOL_LIT() { + return getToken(TocParser::BOOL_LIT, 0); } -size_t TocParser::SubscriptContext::getRuleIndex() const { - return TocParser::RuleSubscript; +size_t TocParser::LitExprContext::getRuleIndex() const { + return TocParser::RuleLitExpr; } -void TocParser::SubscriptContext::enterRule(tree::ParseTreeListener *listener) { +void TocParser::LitExprContext::enterRule(tree::ParseTreeListener *listener) { auto parserListener = dynamic_cast(listener); if (parserListener != nullptr) - parserListener->enterSubscript(this); + parserListener->enterLitExpr(this); } -void TocParser::SubscriptContext::exitRule(tree::ParseTreeListener *listener) { +void TocParser::LitExprContext::exitRule(tree::ParseTreeListener *listener) { auto parserListener = dynamic_cast(listener); if (parserListener != nullptr) - parserListener->exitSubscript(this); + parserListener->exitLitExpr(this); } -TocParser::SubscriptContext* TocParser::subscript() { - SubscriptContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 58, TocParser::RuleSubscript); +TocParser::LitExprContext* TocParser::litExpr() { + LitExprContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 66, TocParser::RuleLitExpr); + size_t _la = 0; #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -2223,14 +2629,19 @@ TocParser::SubscriptContext* TocParser::subscript() { }); try { enterOuterAlt(_localctx, 1); - setState(236); - nonSubscriptExpr(); - setState(237); - match(TocParser::T__13); - setState(238); - expr(); - setState(239); - match(TocParser::T__14); + setState(304); + _la = _input->LA(1); + if (!((((_la & ~ 0x3fULL) == 0) && + ((1ULL << _la) & ((1ULL << TocParser::INT_LIT) + | (1ULL << TocParser::DECIMAL_LIT) + | (1ULL << TocParser::STRING_LIT) + | (1ULL << TocParser::BOOL_LIT))) != 0))) { + _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } } catch (RecognitionException &e) { @@ -2242,40 +2653,53 @@ TocParser::SubscriptContext* TocParser::subscript() { return _localctx; } -//----------------- MemberAccessContext ------------------------------------------------------------------ +//----------------- AccessExprContext ------------------------------------------------------------------ -TocParser::MemberAccessContext::MemberAccessContext(ParserRuleContext *parent, size_t invokingState) +TocParser::AccessExprContext::AccessExprContext(ParserRuleContext *parent, size_t invokingState) : ParserRuleContext(parent, invokingState) { } -std::vector TocParser::MemberAccessContext::identifier() { - return getRuleContexts(); +TocParser::NonAccessExprContext* TocParser::AccessExprContext::nonAccessExpr() { + return getRuleContext(0); } -TocParser::IdentifierContext* TocParser::MemberAccessContext::identifier(size_t i) { - return getRuleContext(i); +std::vector TocParser::AccessExprContext::identifierExpr() { + return getRuleContexts(); } +TocParser::IdentifierExprContext* TocParser::AccessExprContext::identifierExpr(size_t i) { + return getRuleContext(i); +} -size_t TocParser::MemberAccessContext::getRuleIndex() const { - return TocParser::RuleMemberAccess; +std::vector TocParser::AccessExprContext::expr() { + return getRuleContexts(); } -void TocParser::MemberAccessContext::enterRule(tree::ParseTreeListener *listener) { +TocParser::ExprContext* TocParser::AccessExprContext::expr(size_t i) { + return getRuleContext(i); +} + + +size_t TocParser::AccessExprContext::getRuleIndex() const { + return TocParser::RuleAccessExpr; +} + +void TocParser::AccessExprContext::enterRule(tree::ParseTreeListener *listener) { auto parserListener = dynamic_cast(listener); if (parserListener != nullptr) - parserListener->enterMemberAccess(this); + parserListener->enterAccessExpr(this); } -void TocParser::MemberAccessContext::exitRule(tree::ParseTreeListener *listener) { +void TocParser::AccessExprContext::exitRule(tree::ParseTreeListener *listener) { auto parserListener = dynamic_cast(listener); if (parserListener != nullptr) - parserListener->exitMemberAccess(this); + parserListener->exitAccessExpr(this); } -TocParser::MemberAccessContext* TocParser::memberAccess() { - MemberAccessContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 60, TocParser::RuleMemberAccess); +TocParser::AccessExprContext* TocParser::accessExpr() { + AccessExprContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 68, TocParser::RuleAccessExpr); + size_t _la = 0; #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -2286,12 +2710,53 @@ TocParser::MemberAccessContext* TocParser::memberAccess() { }); try { enterOuterAlt(_localctx, 1); - setState(241); - identifier(); - setState(242); - match(TocParser::T__15); - setState(243); - identifier(); + setState(306); + nonAccessExpr(); + setState(313); + _errHandler->sync(this); + _la = _input->LA(1); + do { + setState(313); + _errHandler->sync(this); + switch (_input->LA(1)) { + case TocParser::T__21: + case TocParser::T__22: { + setState(307); + _la = _input->LA(1); + if (!(_la == TocParser::T__21 + + || _la == TocParser::T__22)) { + _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(308); + identifierExpr(); + break; + } + + case TocParser::T__4: { + setState(309); + match(TocParser::T__4); + setState(310); + expr(); + setState(311); + match(TocParser::T__5); + break; + } + + default: + throw NoViableAltException(this); + } + setState(315); + _errHandler->sync(this); + _la = _input->LA(1); + } while ((((_la & ~ 0x3fULL) == 0) && + ((1ULL << _la) & ((1ULL << TocParser::T__4) + | (1ULL << TocParser::T__21) + | (1ULL << TocParser::T__22))) != 0)); } catch (RecognitionException &e) { @@ -2332,7 +2797,7 @@ void TocParser::ParenExprContext::exitRule(tree::ParseTreeListener *listener) { TocParser::ParenExprContext* TocParser::parenExpr() { ParenExprContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 62, TocParser::RuleParenExpr); + enterRule(_localctx, 70, TocParser::RuleParenExpr); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -2343,12 +2808,12 @@ TocParser::ParenExprContext* TocParser::parenExpr() { }); try { enterOuterAlt(_localctx, 1); - setState(245); - match(TocParser::T__4); - setState(246); + setState(317); + match(TocParser::T__7); + setState(318); expr(); - setState(247); - match(TocParser::T__5); + setState(319); + match(TocParser::T__8); } catch (RecognitionException &e) { @@ -2389,7 +2854,7 @@ void TocParser::FuncNameContext::exitRule(tree::ParseTreeListener *listener) { TocParser::FuncNameContext* TocParser::funcName() { FuncNameContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 64, TocParser::RuleFuncName); + enterRule(_localctx, 72, TocParser::RuleFuncName); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -2400,7 +2865,7 @@ TocParser::FuncNameContext* TocParser::funcName() { }); try { enterOuterAlt(_localctx, 1); - setState(249); + setState(321); match(TocParser::NAME); } @@ -2442,7 +2907,7 @@ void TocParser::VarNameContext::exitRule(tree::ParseTreeListener *listener) { TocParser::VarNameContext* TocParser::varName() { VarNameContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 66, TocParser::RuleVarName); + enterRule(_localctx, 74, TocParser::RuleVarName); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -2453,7 +2918,7 @@ TocParser::VarNameContext* TocParser::varName() { }); try { enterOuterAlt(_localctx, 1); - setState(251); + setState(323); match(TocParser::NAME); } @@ -2495,7 +2960,7 @@ void TocParser::TypeNameContext::exitRule(tree::ParseTreeListener *listener) { TocParser::TypeNameContext* TocParser::typeName() { TypeNameContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 68, TocParser::RuleTypeName); + enterRule(_localctx, 76, TocParser::RuleTypeName); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -2506,7 +2971,7 @@ TocParser::TypeNameContext* TocParser::typeName() { }); try { enterOuterAlt(_localctx, 1); - setState(253); + setState(325); match(TocParser::NAME); } @@ -2548,7 +3013,7 @@ void TocParser::StructNameContext::exitRule(tree::ParseTreeListener *listener) { TocParser::StructNameContext* TocParser::structName() { StructNameContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 70, TocParser::RuleStructName); + enterRule(_localctx, 78, TocParser::RuleStructName); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -2559,7 +3024,7 @@ TocParser::StructNameContext* TocParser::structName() { }); try { enterOuterAlt(_localctx, 1); - setState(255); + setState(327); match(TocParser::NAME); } @@ -2581,22 +3046,25 @@ atn::ATN TocParser::_atn; std::vector TocParser::_serializedATN; std::vector TocParser::_ruleNames = { - "prog", "decl", "varDecl", "var", "type", "funcDecl", "func", "parameter", - "body", "structDecl", "structMember", "structVar", "structMethod", "stmt", - "conditional", "ifCond", "loop", "whileLoop", "assignment", "returnStmt", - "expr", "nonOpExpr", "nonSubscriptExpr", "nonAccessExpr", "funcCall", - "operatorExpr", "binaryOperator", "identifier", "literal", "subscript", - "memberAccess", "parenExpr", "funcName", "varName", "typeName", "structName" + "prog", "decl", "varDecl", "var", "varInit", "type", "typeModifier", "funcDecl", + "func", "parameter", "body", "structDecl", "structMember", "structVar", + "structMethod", "stmt", "ifStmt", "switchStmt", "switchBody", "forStmt", + "whileStmt", "assignStmt", "returnStmt", "expr", "nonOpExpr", "nonAccessExpr", + "funcExpr", "opExpr", "binaryOp", "prefixOp", "postfixOp", "ternaryOp", + "identifierExpr", "litExpr", "accessExpr", "parenExpr", "funcName", "varName", + "typeName", "structName" }; std::vector TocParser::_literalNames = { - "", "'var'", "':'", "'='", "'func'", "'('", "')'", "','", "'{'", "'}'", - "'struct'", "'if'", "'while'", "'return'", "'['", "']'", "'.'" + "", "'var'", "':'", "'='", "'*'", "'['", "']'", "'func'", "'('", "')'", + "','", "'{'", "'}'", "'struct'", "'if'", "'else'", "'switch'", "'case'", + "'for'", "'while'", "'return'", "'\u003F'", "'.'", "'->'" }; std::vector TocParser::_symbolicNames = { - "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "BINARY_OPERATOR", - "INTLIT", "NAME", "WS", "NEWLINE" + "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", + "", "", "", "", "", "", "POSTFIX_OP", "PREFIX_OP", "BINARY_OP", "INT_LIT", + "DECIMAL_LIT", "STRING_LIT", "BOOL_LIT", "NAME", "WS", "NEWLINE", "NUMBER" }; dfa::Vocabulary TocParser::_vocabulary(_literalNames, _symbolicNames); @@ -2619,7 +3087,7 @@ TocParser::Initializer::Initializer() { static const uint16_t serializedATNSegment0[] = { 0x3, 0x608b, 0xa72a, 0x8133, 0xb9ed, 0x417c, 0x3be7, 0x7786, 0x5964, - 0x3, 0x17, 0x104, 0x4, 0x2, 0x9, 0x2, 0x4, 0x3, 0x9, 0x3, 0x4, 0x4, + 0x3, 0x24, 0x14c, 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, @@ -2630,167 +3098,220 @@ TocParser::Initializer::Initializer() { 0x9, 0x1a, 0x4, 0x1b, 0x9, 0x1b, 0x4, 0x1c, 0x9, 0x1c, 0x4, 0x1d, 0x9, 0x1d, 0x4, 0x1e, 0x9, 0x1e, 0x4, 0x1f, 0x9, 0x1f, 0x4, 0x20, 0x9, 0x20, 0x4, 0x21, 0x9, 0x21, 0x4, 0x22, 0x9, 0x22, 0x4, 0x23, - 0x9, 0x23, 0x4, 0x24, 0x9, 0x24, 0x4, 0x25, 0x9, 0x25, 0x3, 0x2, - 0x6, 0x2, 0x4c, 0xa, 0x2, 0xd, 0x2, 0xe, 0x2, 0x4d, 0x3, 0x2, 0x3, - 0x2, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x5, 0x3, 0x55, 0xa, 0x3, 0x3, - 0x4, 0x3, 0x4, 0x3, 0x4, 0x3, 0x5, 0x3, 0x5, 0x3, 0x5, 0x3, 0x5, - 0x3, 0x5, 0x3, 0x5, 0x5, 0x5, 0x60, 0xa, 0x5, 0x3, 0x6, 0x3, 0x6, - 0x3, 0x7, 0x3, 0x7, 0x3, 0x7, 0x3, 0x8, 0x3, 0x8, 0x3, 0x8, 0x3, - 0x8, 0x3, 0x8, 0x3, 0x8, 0x3, 0x8, 0x3, 0x8, 0x3, 0x8, 0x3, 0x9, - 0x3, 0x9, 0x3, 0x9, 0x7, 0x9, 0x73, 0xa, 0x9, 0xc, 0x9, 0xe, 0x9, - 0x76, 0xb, 0x9, 0x5, 0x9, 0x78, 0xa, 0x9, 0x3, 0xa, 0x3, 0xa, 0x7, - 0xa, 0x7c, 0xa, 0xa, 0xc, 0xa, 0xe, 0xa, 0x7f, 0xb, 0xa, 0x3, 0xa, - 0x3, 0xa, 0x3, 0xb, 0x3, 0xb, 0x3, 0xb, 0x3, 0xb, 0x7, 0xb, 0x87, - 0xa, 0xb, 0xc, 0xb, 0xe, 0xb, 0x8a, 0xb, 0xb, 0x3, 0xb, 0x3, 0xb, - 0x3, 0xc, 0x3, 0xc, 0x5, 0xc, 0x90, 0xa, 0xc, 0x3, 0xd, 0x3, 0xd, - 0x3, 0xe, 0x3, 0xe, 0x3, 0xf, 0x3, 0xf, 0x3, 0xf, 0x3, 0xf, 0x3, - 0xf, 0x3, 0xf, 0x5, 0xf, 0x9c, 0xa, 0xf, 0x3, 0x10, 0x3, 0x10, 0x3, - 0x11, 0x3, 0x11, 0x3, 0x11, 0x3, 0x11, 0x3, 0x12, 0x3, 0x12, 0x3, - 0x13, 0x3, 0x13, 0x3, 0x13, 0x3, 0x13, 0x3, 0x14, 0x3, 0x14, 0x3, - 0x14, 0x3, 0x14, 0x3, 0x15, 0x3, 0x15, 0x3, 0x15, 0x3, 0x16, 0x3, - 0x16, 0x3, 0x16, 0x3, 0x16, 0x3, 0x16, 0x3, 0x16, 0x3, 0x16, 0x5, - 0x16, 0xb8, 0xa, 0x16, 0x3, 0x17, 0x3, 0x17, 0x3, 0x17, 0x3, 0x17, - 0x3, 0x17, 0x3, 0x17, 0x5, 0x17, 0xc0, 0xa, 0x17, 0x3, 0x18, 0x3, - 0x18, 0x3, 0x18, 0x3, 0x18, 0x3, 0x18, 0x5, 0x18, 0xc7, 0xa, 0x18, - 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, - 0x5, 0x19, 0xcf, 0xa, 0x19, 0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x3, - 0x1a, 0x3, 0x1a, 0x7, 0x1a, 0xd6, 0xa, 0x1a, 0xc, 0x1a, 0xe, 0x1a, - 0xd9, 0xb, 0x1a, 0x5, 0x1a, 0xdb, 0xa, 0x1a, 0x3, 0x1a, 0x3, 0x1a, - 0x3, 0x1b, 0x3, 0x1b, 0x3, 0x1c, 0x3, 0x1c, 0x3, 0x1c, 0x3, 0x1c, - 0x3, 0x1c, 0x7, 0x1c, 0xe6, 0xa, 0x1c, 0xc, 0x1c, 0xe, 0x1c, 0xe9, - 0xb, 0x1c, 0x3, 0x1d, 0x3, 0x1d, 0x3, 0x1e, 0x3, 0x1e, 0x3, 0x1f, - 0x3, 0x1f, 0x3, 0x1f, 0x3, 0x1f, 0x3, 0x1f, 0x3, 0x20, 0x3, 0x20, - 0x3, 0x20, 0x3, 0x20, 0x3, 0x21, 0x3, 0x21, 0x3, 0x21, 0x3, 0x21, - 0x3, 0x22, 0x3, 0x22, 0x3, 0x23, 0x3, 0x23, 0x3, 0x24, 0x3, 0x24, - 0x3, 0x25, 0x3, 0x25, 0x3, 0x25, 0x2, 0x2, 0x26, 0x2, 0x4, 0x6, 0x8, - 0xa, 0xc, 0xe, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e, 0x20, - 0x22, 0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e, 0x30, 0x32, 0x34, 0x36, - 0x38, 0x3a, 0x3c, 0x3e, 0x40, 0x42, 0x44, 0x46, 0x48, 0x2, 0x2, 0x2, - 0x104, 0x2, 0x4b, 0x3, 0x2, 0x2, 0x2, 0x4, 0x54, 0x3, 0x2, 0x2, 0x2, - 0x6, 0x56, 0x3, 0x2, 0x2, 0x2, 0x8, 0x59, 0x3, 0x2, 0x2, 0x2, 0xa, - 0x61, 0x3, 0x2, 0x2, 0x2, 0xc, 0x63, 0x3, 0x2, 0x2, 0x2, 0xe, 0x66, - 0x3, 0x2, 0x2, 0x2, 0x10, 0x77, 0x3, 0x2, 0x2, 0x2, 0x12, 0x79, 0x3, - 0x2, 0x2, 0x2, 0x14, 0x82, 0x3, 0x2, 0x2, 0x2, 0x16, 0x8f, 0x3, 0x2, - 0x2, 0x2, 0x18, 0x91, 0x3, 0x2, 0x2, 0x2, 0x1a, 0x93, 0x3, 0x2, 0x2, - 0x2, 0x1c, 0x9b, 0x3, 0x2, 0x2, 0x2, 0x1e, 0x9d, 0x3, 0x2, 0x2, 0x2, - 0x20, 0x9f, 0x3, 0x2, 0x2, 0x2, 0x22, 0xa3, 0x3, 0x2, 0x2, 0x2, 0x24, - 0xa5, 0x3, 0x2, 0x2, 0x2, 0x26, 0xa9, 0x3, 0x2, 0x2, 0x2, 0x28, 0xad, - 0x3, 0x2, 0x2, 0x2, 0x2a, 0xb7, 0x3, 0x2, 0x2, 0x2, 0x2c, 0xbf, 0x3, - 0x2, 0x2, 0x2, 0x2e, 0xc6, 0x3, 0x2, 0x2, 0x2, 0x30, 0xce, 0x3, 0x2, - 0x2, 0x2, 0x32, 0xd0, 0x3, 0x2, 0x2, 0x2, 0x34, 0xde, 0x3, 0x2, 0x2, - 0x2, 0x36, 0xe0, 0x3, 0x2, 0x2, 0x2, 0x38, 0xea, 0x3, 0x2, 0x2, 0x2, - 0x3a, 0xec, 0x3, 0x2, 0x2, 0x2, 0x3c, 0xee, 0x3, 0x2, 0x2, 0x2, 0x3e, - 0xf3, 0x3, 0x2, 0x2, 0x2, 0x40, 0xf7, 0x3, 0x2, 0x2, 0x2, 0x42, 0xfb, - 0x3, 0x2, 0x2, 0x2, 0x44, 0xfd, 0x3, 0x2, 0x2, 0x2, 0x46, 0xff, 0x3, - 0x2, 0x2, 0x2, 0x48, 0x101, 0x3, 0x2, 0x2, 0x2, 0x4a, 0x4c, 0x5, - 0x4, 0x3, 0x2, 0x4b, 0x4a, 0x3, 0x2, 0x2, 0x2, 0x4c, 0x4d, 0x3, 0x2, - 0x2, 0x2, 0x4d, 0x4b, 0x3, 0x2, 0x2, 0x2, 0x4d, 0x4e, 0x3, 0x2, 0x2, - 0x2, 0x4e, 0x4f, 0x3, 0x2, 0x2, 0x2, 0x4f, 0x50, 0x7, 0x2, 0x2, 0x3, - 0x50, 0x3, 0x3, 0x2, 0x2, 0x2, 0x51, 0x55, 0x5, 0x6, 0x4, 0x2, 0x52, - 0x55, 0x5, 0xc, 0x7, 0x2, 0x53, 0x55, 0x5, 0x14, 0xb, 0x2, 0x54, - 0x51, 0x3, 0x2, 0x2, 0x2, 0x54, 0x52, 0x3, 0x2, 0x2, 0x2, 0x54, 0x53, - 0x3, 0x2, 0x2, 0x2, 0x55, 0x5, 0x3, 0x2, 0x2, 0x2, 0x56, 0x57, 0x7, - 0x3, 0x2, 0x2, 0x57, 0x58, 0x5, 0x8, 0x5, 0x2, 0x58, 0x7, 0x3, 0x2, - 0x2, 0x2, 0x59, 0x5a, 0x5, 0x44, 0x23, 0x2, 0x5a, 0x5b, 0x7, 0x4, - 0x2, 0x2, 0x5b, 0x5c, 0x5, 0xa, 0x6, 0x2, 0x5c, 0x5f, 0x3, 0x2, 0x2, - 0x2, 0x5d, 0x5e, 0x7, 0x5, 0x2, 0x2, 0x5e, 0x60, 0x5, 0x2a, 0x16, - 0x2, 0x5f, 0x5d, 0x3, 0x2, 0x2, 0x2, 0x5f, 0x60, 0x3, 0x2, 0x2, 0x2, - 0x60, 0x9, 0x3, 0x2, 0x2, 0x2, 0x61, 0x62, 0x5, 0x46, 0x24, 0x2, - 0x62, 0xb, 0x3, 0x2, 0x2, 0x2, 0x63, 0x64, 0x7, 0x6, 0x2, 0x2, 0x64, - 0x65, 0x5, 0xe, 0x8, 0x2, 0x65, 0xd, 0x3, 0x2, 0x2, 0x2, 0x66, 0x67, - 0x5, 0x42, 0x22, 0x2, 0x67, 0x68, 0x7, 0x7, 0x2, 0x2, 0x68, 0x69, - 0x5, 0x10, 0x9, 0x2, 0x69, 0x6a, 0x7, 0x8, 0x2, 0x2, 0x6a, 0x6b, - 0x7, 0x4, 0x2, 0x2, 0x6b, 0x6c, 0x5, 0xa, 0x6, 0x2, 0x6c, 0x6d, 0x3, - 0x2, 0x2, 0x2, 0x6d, 0x6e, 0x5, 0x12, 0xa, 0x2, 0x6e, 0xf, 0x3, 0x2, - 0x2, 0x2, 0x6f, 0x74, 0x5, 0x8, 0x5, 0x2, 0x70, 0x71, 0x7, 0x9, 0x2, - 0x2, 0x71, 0x73, 0x5, 0x8, 0x5, 0x2, 0x72, 0x70, 0x3, 0x2, 0x2, 0x2, - 0x73, 0x76, 0x3, 0x2, 0x2, 0x2, 0x74, 0x72, 0x3, 0x2, 0x2, 0x2, 0x74, - 0x75, 0x3, 0x2, 0x2, 0x2, 0x75, 0x78, 0x3, 0x2, 0x2, 0x2, 0x76, 0x74, - 0x3, 0x2, 0x2, 0x2, 0x77, 0x6f, 0x3, 0x2, 0x2, 0x2, 0x77, 0x78, 0x3, - 0x2, 0x2, 0x2, 0x78, 0x11, 0x3, 0x2, 0x2, 0x2, 0x79, 0x7d, 0x7, 0xa, - 0x2, 0x2, 0x7a, 0x7c, 0x5, 0x1c, 0xf, 0x2, 0x7b, 0x7a, 0x3, 0x2, - 0x2, 0x2, 0x7c, 0x7f, 0x3, 0x2, 0x2, 0x2, 0x7d, 0x7b, 0x3, 0x2, 0x2, - 0x2, 0x7d, 0x7e, 0x3, 0x2, 0x2, 0x2, 0x7e, 0x80, 0x3, 0x2, 0x2, 0x2, - 0x7f, 0x7d, 0x3, 0x2, 0x2, 0x2, 0x80, 0x81, 0x7, 0xb, 0x2, 0x2, 0x81, - 0x13, 0x3, 0x2, 0x2, 0x2, 0x82, 0x83, 0x7, 0xc, 0x2, 0x2, 0x83, 0x84, - 0x5, 0x48, 0x25, 0x2, 0x84, 0x88, 0x7, 0xa, 0x2, 0x2, 0x85, 0x87, - 0x5, 0x16, 0xc, 0x2, 0x86, 0x85, 0x3, 0x2, 0x2, 0x2, 0x87, 0x8a, - 0x3, 0x2, 0x2, 0x2, 0x88, 0x86, 0x3, 0x2, 0x2, 0x2, 0x88, 0x89, 0x3, - 0x2, 0x2, 0x2, 0x89, 0x8b, 0x3, 0x2, 0x2, 0x2, 0x8a, 0x88, 0x3, 0x2, - 0x2, 0x2, 0x8b, 0x8c, 0x7, 0xb, 0x2, 0x2, 0x8c, 0x15, 0x3, 0x2, 0x2, - 0x2, 0x8d, 0x90, 0x5, 0x18, 0xd, 0x2, 0x8e, 0x90, 0x5, 0x1a, 0xe, - 0x2, 0x8f, 0x8d, 0x3, 0x2, 0x2, 0x2, 0x8f, 0x8e, 0x3, 0x2, 0x2, 0x2, - 0x90, 0x17, 0x3, 0x2, 0x2, 0x2, 0x91, 0x92, 0x5, 0x8, 0x5, 0x2, 0x92, - 0x19, 0x3, 0x2, 0x2, 0x2, 0x93, 0x94, 0x5, 0xe, 0x8, 0x2, 0x94, 0x1b, - 0x3, 0x2, 0x2, 0x2, 0x95, 0x9c, 0x5, 0x6, 0x4, 0x2, 0x96, 0x9c, 0x5, - 0x1e, 0x10, 0x2, 0x97, 0x9c, 0x5, 0x22, 0x12, 0x2, 0x98, 0x9c, 0x5, - 0x26, 0x14, 0x2, 0x99, 0x9c, 0x5, 0x28, 0x15, 0x2, 0x9a, 0x9c, 0x5, - 0x2a, 0x16, 0x2, 0x9b, 0x95, 0x3, 0x2, 0x2, 0x2, 0x9b, 0x96, 0x3, - 0x2, 0x2, 0x2, 0x9b, 0x97, 0x3, 0x2, 0x2, 0x2, 0x9b, 0x98, 0x3, 0x2, - 0x2, 0x2, 0x9b, 0x99, 0x3, 0x2, 0x2, 0x2, 0x9b, 0x9a, 0x3, 0x2, 0x2, - 0x2, 0x9c, 0x1d, 0x3, 0x2, 0x2, 0x2, 0x9d, 0x9e, 0x5, 0x20, 0x11, - 0x2, 0x9e, 0x1f, 0x3, 0x2, 0x2, 0x2, 0x9f, 0xa0, 0x7, 0xd, 0x2, 0x2, - 0xa0, 0xa1, 0x5, 0x2a, 0x16, 0x2, 0xa1, 0xa2, 0x5, 0x12, 0xa, 0x2, - 0xa2, 0x21, 0x3, 0x2, 0x2, 0x2, 0xa3, 0xa4, 0x5, 0x24, 0x13, 0x2, - 0xa4, 0x23, 0x3, 0x2, 0x2, 0x2, 0xa5, 0xa6, 0x7, 0xe, 0x2, 0x2, 0xa6, - 0xa7, 0x5, 0x2a, 0x16, 0x2, 0xa7, 0xa8, 0x5, 0x12, 0xa, 0x2, 0xa8, - 0x25, 0x3, 0x2, 0x2, 0x2, 0xa9, 0xaa, 0x5, 0x38, 0x1d, 0x2, 0xaa, - 0xab, 0x7, 0x5, 0x2, 0x2, 0xab, 0xac, 0x5, 0x2a, 0x16, 0x2, 0xac, - 0x27, 0x3, 0x2, 0x2, 0x2, 0xad, 0xae, 0x7, 0xf, 0x2, 0x2, 0xae, 0xaf, - 0x5, 0x2a, 0x16, 0x2, 0xaf, 0x29, 0x3, 0x2, 0x2, 0x2, 0xb0, 0xb8, - 0x5, 0x32, 0x1a, 0x2, 0xb1, 0xb8, 0x5, 0x3a, 0x1e, 0x2, 0xb2, 0xb8, - 0x5, 0x38, 0x1d, 0x2, 0xb3, 0xb8, 0x5, 0x3c, 0x1f, 0x2, 0xb4, 0xb8, - 0x5, 0x3e, 0x20, 0x2, 0xb5, 0xb8, 0x5, 0x40, 0x21, 0x2, 0xb6, 0xb8, - 0x5, 0x34, 0x1b, 0x2, 0xb7, 0xb0, 0x3, 0x2, 0x2, 0x2, 0xb7, 0xb1, - 0x3, 0x2, 0x2, 0x2, 0xb7, 0xb2, 0x3, 0x2, 0x2, 0x2, 0xb7, 0xb3, 0x3, - 0x2, 0x2, 0x2, 0xb7, 0xb4, 0x3, 0x2, 0x2, 0x2, 0xb7, 0xb5, 0x3, 0x2, - 0x2, 0x2, 0xb7, 0xb6, 0x3, 0x2, 0x2, 0x2, 0xb8, 0x2b, 0x3, 0x2, 0x2, - 0x2, 0xb9, 0xc0, 0x5, 0x32, 0x1a, 0x2, 0xba, 0xc0, 0x5, 0x3a, 0x1e, - 0x2, 0xbb, 0xc0, 0x5, 0x38, 0x1d, 0x2, 0xbc, 0xc0, 0x5, 0x3c, 0x1f, - 0x2, 0xbd, 0xc0, 0x5, 0x3e, 0x20, 0x2, 0xbe, 0xc0, 0x5, 0x40, 0x21, - 0x2, 0xbf, 0xb9, 0x3, 0x2, 0x2, 0x2, 0xbf, 0xba, 0x3, 0x2, 0x2, 0x2, - 0xbf, 0xbb, 0x3, 0x2, 0x2, 0x2, 0xbf, 0xbc, 0x3, 0x2, 0x2, 0x2, 0xbf, - 0xbd, 0x3, 0x2, 0x2, 0x2, 0xbf, 0xbe, 0x3, 0x2, 0x2, 0x2, 0xc0, 0x2d, - 0x3, 0x2, 0x2, 0x2, 0xc1, 0xc7, 0x5, 0x32, 0x1a, 0x2, 0xc2, 0xc7, - 0x5, 0x3a, 0x1e, 0x2, 0xc3, 0xc7, 0x5, 0x38, 0x1d, 0x2, 0xc4, 0xc7, - 0x5, 0x3e, 0x20, 0x2, 0xc5, 0xc7, 0x5, 0x40, 0x21, 0x2, 0xc6, 0xc1, - 0x3, 0x2, 0x2, 0x2, 0xc6, 0xc2, 0x3, 0x2, 0x2, 0x2, 0xc6, 0xc3, 0x3, - 0x2, 0x2, 0x2, 0xc6, 0xc4, 0x3, 0x2, 0x2, 0x2, 0xc6, 0xc5, 0x3, 0x2, - 0x2, 0x2, 0xc7, 0x2f, 0x3, 0x2, 0x2, 0x2, 0xc8, 0xcf, 0x5, 0x32, - 0x1a, 0x2, 0xc9, 0xcf, 0x5, 0x3a, 0x1e, 0x2, 0xca, 0xcf, 0x5, 0x38, - 0x1d, 0x2, 0xcb, 0xcf, 0x5, 0x3c, 0x1f, 0x2, 0xcc, 0xcf, 0x5, 0x40, - 0x21, 0x2, 0xcd, 0xcf, 0x5, 0x34, 0x1b, 0x2, 0xce, 0xc8, 0x3, 0x2, - 0x2, 0x2, 0xce, 0xc9, 0x3, 0x2, 0x2, 0x2, 0xce, 0xca, 0x3, 0x2, 0x2, - 0x2, 0xce, 0xcb, 0x3, 0x2, 0x2, 0x2, 0xce, 0xcc, 0x3, 0x2, 0x2, 0x2, - 0xce, 0xcd, 0x3, 0x2, 0x2, 0x2, 0xcf, 0x31, 0x3, 0x2, 0x2, 0x2, 0xd0, - 0xd1, 0x5, 0x42, 0x22, 0x2, 0xd1, 0xda, 0x7, 0x7, 0x2, 0x2, 0xd2, - 0xd7, 0x5, 0x2a, 0x16, 0x2, 0xd3, 0xd4, 0x7, 0x9, 0x2, 0x2, 0xd4, - 0xd6, 0x5, 0x2a, 0x16, 0x2, 0xd5, 0xd3, 0x3, 0x2, 0x2, 0x2, 0xd6, - 0xd9, 0x3, 0x2, 0x2, 0x2, 0xd7, 0xd5, 0x3, 0x2, 0x2, 0x2, 0xd7, 0xd8, - 0x3, 0x2, 0x2, 0x2, 0xd8, 0xdb, 0x3, 0x2, 0x2, 0x2, 0xd9, 0xd7, 0x3, - 0x2, 0x2, 0x2, 0xda, 0xd2, 0x3, 0x2, 0x2, 0x2, 0xda, 0xdb, 0x3, 0x2, - 0x2, 0x2, 0xdb, 0xdc, 0x3, 0x2, 0x2, 0x2, 0xdc, 0xdd, 0x7, 0x8, 0x2, - 0x2, 0xdd, 0x33, 0x3, 0x2, 0x2, 0x2, 0xde, 0xdf, 0x5, 0x36, 0x1c, - 0x2, 0xdf, 0x35, 0x3, 0x2, 0x2, 0x2, 0xe0, 0xe1, 0x5, 0x2c, 0x17, - 0x2, 0xe1, 0xe2, 0x7, 0x13, 0x2, 0x2, 0xe2, 0xe7, 0x5, 0x2c, 0x17, - 0x2, 0xe3, 0xe4, 0x7, 0x13, 0x2, 0x2, 0xe4, 0xe6, 0x5, 0x2c, 0x17, - 0x2, 0xe5, 0xe3, 0x3, 0x2, 0x2, 0x2, 0xe6, 0xe9, 0x3, 0x2, 0x2, 0x2, - 0xe7, 0xe5, 0x3, 0x2, 0x2, 0x2, 0xe7, 0xe8, 0x3, 0x2, 0x2, 0x2, 0xe8, - 0x37, 0x3, 0x2, 0x2, 0x2, 0xe9, 0xe7, 0x3, 0x2, 0x2, 0x2, 0xea, 0xeb, - 0x5, 0x44, 0x23, 0x2, 0xeb, 0x39, 0x3, 0x2, 0x2, 0x2, 0xec, 0xed, - 0x7, 0x14, 0x2, 0x2, 0xed, 0x3b, 0x3, 0x2, 0x2, 0x2, 0xee, 0xef, - 0x5, 0x2e, 0x18, 0x2, 0xef, 0xf0, 0x7, 0x10, 0x2, 0x2, 0xf0, 0xf1, - 0x5, 0x2a, 0x16, 0x2, 0xf1, 0xf2, 0x7, 0x11, 0x2, 0x2, 0xf2, 0x3d, - 0x3, 0x2, 0x2, 0x2, 0xf3, 0xf4, 0x5, 0x38, 0x1d, 0x2, 0xf4, 0xf5, - 0x7, 0x12, 0x2, 0x2, 0xf5, 0xf6, 0x5, 0x38, 0x1d, 0x2, 0xf6, 0x3f, - 0x3, 0x2, 0x2, 0x2, 0xf7, 0xf8, 0x7, 0x7, 0x2, 0x2, 0xf8, 0xf9, 0x5, - 0x2a, 0x16, 0x2, 0xf9, 0xfa, 0x7, 0x8, 0x2, 0x2, 0xfa, 0x41, 0x3, - 0x2, 0x2, 0x2, 0xfb, 0xfc, 0x7, 0x15, 0x2, 0x2, 0xfc, 0x43, 0x3, - 0x2, 0x2, 0x2, 0xfd, 0xfe, 0x7, 0x15, 0x2, 0x2, 0xfe, 0x45, 0x3, - 0x2, 0x2, 0x2, 0xff, 0x100, 0x7, 0x15, 0x2, 0x2, 0x100, 0x47, 0x3, - 0x2, 0x2, 0x2, 0x101, 0x102, 0x7, 0x15, 0x2, 0x2, 0x102, 0x49, 0x3, - 0x2, 0x2, 0x2, 0x12, 0x4d, 0x54, 0x5f, 0x74, 0x77, 0x7d, 0x88, 0x8f, - 0x9b, 0xb7, 0xbf, 0xc6, 0xce, 0xd7, 0xda, 0xe7, + 0x9, 0x23, 0x4, 0x24, 0x9, 0x24, 0x4, 0x25, 0x9, 0x25, 0x4, 0x26, + 0x9, 0x26, 0x4, 0x27, 0x9, 0x27, 0x4, 0x28, 0x9, 0x28, 0x4, 0x29, + 0x9, 0x29, 0x3, 0x2, 0x6, 0x2, 0x54, 0xa, 0x2, 0xd, 0x2, 0xe, 0x2, + 0x55, 0x3, 0x2, 0x3, 0x2, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x5, 0x3, + 0x5d, 0xa, 0x3, 0x3, 0x4, 0x3, 0x4, 0x3, 0x4, 0x3, 0x5, 0x3, 0x5, + 0x3, 0x5, 0x3, 0x5, 0x3, 0x5, 0x3, 0x5, 0x5, 0x5, 0x68, 0xa, 0x5, + 0x3, 0x6, 0x3, 0x6, 0x3, 0x6, 0x3, 0x6, 0x3, 0x6, 0x3, 0x6, 0x3, + 0x6, 0x3, 0x7, 0x3, 0x7, 0x7, 0x7, 0x73, 0xa, 0x7, 0xc, 0x7, 0xe, + 0x7, 0x76, 0xb, 0x7, 0x3, 0x8, 0x3, 0x8, 0x3, 0x8, 0x5, 0x8, 0x7b, + 0xa, 0x8, 0x3, 0x8, 0x5, 0x8, 0x7e, 0xa, 0x8, 0x3, 0x9, 0x3, 0x9, + 0x3, 0x9, 0x3, 0xa, 0x3, 0xa, 0x3, 0xa, 0x3, 0xa, 0x3, 0xa, 0x3, + 0xa, 0x3, 0xa, 0x3, 0xa, 0x3, 0xa, 0x3, 0xb, 0x3, 0xb, 0x3, 0xb, + 0x7, 0xb, 0x8f, 0xa, 0xb, 0xc, 0xb, 0xe, 0xb, 0x92, 0xb, 0xb, 0x5, + 0xb, 0x94, 0xa, 0xb, 0x3, 0xc, 0x3, 0xc, 0x7, 0xc, 0x98, 0xa, 0xc, + 0xc, 0xc, 0xe, 0xc, 0x9b, 0xb, 0xc, 0x3, 0xc, 0x3, 0xc, 0x3, 0xd, + 0x3, 0xd, 0x3, 0xd, 0x3, 0xd, 0x7, 0xd, 0xa3, 0xa, 0xd, 0xc, 0xd, + 0xe, 0xd, 0xa6, 0xb, 0xd, 0x3, 0xd, 0x3, 0xd, 0x3, 0xe, 0x3, 0xe, + 0x5, 0xe, 0xac, 0xa, 0xe, 0x3, 0xf, 0x3, 0xf, 0x3, 0x10, 0x3, 0x10, + 0x3, 0x11, 0x3, 0x11, 0x3, 0x11, 0x3, 0x11, 0x3, 0x11, 0x3, 0x11, + 0x3, 0x11, 0x3, 0x11, 0x5, 0x11, 0xba, 0xa, 0x11, 0x3, 0x12, 0x3, + 0x12, 0x3, 0x12, 0x3, 0x12, 0x3, 0x12, 0x3, 0x12, 0x3, 0x12, 0x3, + 0x12, 0x7, 0x12, 0xc4, 0xa, 0x12, 0xc, 0x12, 0xe, 0x12, 0xc7, 0xb, + 0x12, 0x3, 0x12, 0x3, 0x12, 0x5, 0x12, 0xcb, 0xa, 0x12, 0x3, 0x13, + 0x3, 0x13, 0x3, 0x13, 0x3, 0x13, 0x3, 0x14, 0x3, 0x14, 0x3, 0x14, + 0x3, 0x14, 0x3, 0x14, 0x7, 0x14, 0xd6, 0xa, 0x14, 0xc, 0x14, 0xe, + 0x14, 0xd9, 0xb, 0x14, 0x3, 0x14, 0x3, 0x14, 0x3, 0x15, 0x3, 0x15, + 0x3, 0x15, 0x5, 0x15, 0xe0, 0xa, 0x15, 0x3, 0x15, 0x3, 0x15, 0x3, + 0x15, 0x3, 0x15, 0x3, 0x15, 0x3, 0x15, 0x3, 0x16, 0x3, 0x16, 0x3, + 0x16, 0x3, 0x16, 0x3, 0x17, 0x3, 0x17, 0x3, 0x17, 0x3, 0x17, 0x3, + 0x18, 0x3, 0x18, 0x3, 0x18, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, + 0x19, 0x3, 0x19, 0x3, 0x19, 0x5, 0x19, 0xf9, 0xa, 0x19, 0x3, 0x1a, + 0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x5, 0x1a, 0x100, 0xa, + 0x1a, 0x3, 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x5, 0x1b, 0x105, 0xa, 0x1b, + 0x3, 0x1c, 0x3, 0x1c, 0x3, 0x1c, 0x3, 0x1c, 0x3, 0x1c, 0x7, 0x1c, + 0x10c, 0xa, 0x1c, 0xc, 0x1c, 0xe, 0x1c, 0x10f, 0xb, 0x1c, 0x5, 0x1c, + 0x111, 0xa, 0x1c, 0x3, 0x1c, 0x3, 0x1c, 0x3, 0x1d, 0x3, 0x1d, 0x3, + 0x1d, 0x3, 0x1d, 0x5, 0x1d, 0x119, 0xa, 0x1d, 0x3, 0x1e, 0x3, 0x1e, + 0x3, 0x1e, 0x3, 0x1e, 0x3, 0x1e, 0x7, 0x1e, 0x120, 0xa, 0x1e, 0xc, + 0x1e, 0xe, 0x1e, 0x123, 0xb, 0x1e, 0x3, 0x1f, 0x3, 0x1f, 0x3, 0x1f, + 0x3, 0x20, 0x3, 0x20, 0x3, 0x20, 0x3, 0x21, 0x3, 0x21, 0x3, 0x21, + 0x3, 0x21, 0x3, 0x21, 0x3, 0x21, 0x3, 0x22, 0x3, 0x22, 0x3, 0x23, + 0x3, 0x23, 0x3, 0x24, 0x3, 0x24, 0x3, 0x24, 0x3, 0x24, 0x3, 0x24, + 0x3, 0x24, 0x3, 0x24, 0x6, 0x24, 0x13c, 0xa, 0x24, 0xd, 0x24, 0xe, + 0x24, 0x13d, 0x3, 0x25, 0x3, 0x25, 0x3, 0x25, 0x3, 0x25, 0x3, 0x26, + 0x3, 0x26, 0x3, 0x27, 0x3, 0x27, 0x3, 0x28, 0x3, 0x28, 0x3, 0x29, + 0x3, 0x29, 0x3, 0x29, 0x2, 0x2, 0x2a, 0x2, 0x4, 0x6, 0x8, 0xa, 0xc, + 0xe, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e, 0x20, 0x22, + 0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e, 0x30, 0x32, 0x34, 0x36, 0x38, + 0x3a, 0x3c, 0x3e, 0x40, 0x42, 0x44, 0x46, 0x48, 0x4a, 0x4c, 0x4e, + 0x50, 0x2, 0x4, 0x3, 0x2, 0x1d, 0x20, 0x3, 0x2, 0x18, 0x19, 0x2, + 0x14d, 0x2, 0x53, 0x3, 0x2, 0x2, 0x2, 0x4, 0x5c, 0x3, 0x2, 0x2, 0x2, + 0x6, 0x5e, 0x3, 0x2, 0x2, 0x2, 0x8, 0x61, 0x3, 0x2, 0x2, 0x2, 0xa, + 0x69, 0x3, 0x2, 0x2, 0x2, 0xc, 0x70, 0x3, 0x2, 0x2, 0x2, 0xe, 0x7d, + 0x3, 0x2, 0x2, 0x2, 0x10, 0x7f, 0x3, 0x2, 0x2, 0x2, 0x12, 0x82, 0x3, + 0x2, 0x2, 0x2, 0x14, 0x93, 0x3, 0x2, 0x2, 0x2, 0x16, 0x95, 0x3, 0x2, + 0x2, 0x2, 0x18, 0x9e, 0x3, 0x2, 0x2, 0x2, 0x1a, 0xab, 0x3, 0x2, 0x2, + 0x2, 0x1c, 0xad, 0x3, 0x2, 0x2, 0x2, 0x1e, 0xaf, 0x3, 0x2, 0x2, 0x2, + 0x20, 0xb9, 0x3, 0x2, 0x2, 0x2, 0x22, 0xbb, 0x3, 0x2, 0x2, 0x2, 0x24, + 0xcc, 0x3, 0x2, 0x2, 0x2, 0x26, 0xd0, 0x3, 0x2, 0x2, 0x2, 0x28, 0xdc, + 0x3, 0x2, 0x2, 0x2, 0x2a, 0xe7, 0x3, 0x2, 0x2, 0x2, 0x2c, 0xeb, 0x3, + 0x2, 0x2, 0x2, 0x2e, 0xef, 0x3, 0x2, 0x2, 0x2, 0x30, 0xf8, 0x3, 0x2, + 0x2, 0x2, 0x32, 0xff, 0x3, 0x2, 0x2, 0x2, 0x34, 0x104, 0x3, 0x2, + 0x2, 0x2, 0x36, 0x106, 0x3, 0x2, 0x2, 0x2, 0x38, 0x118, 0x3, 0x2, + 0x2, 0x2, 0x3a, 0x11a, 0x3, 0x2, 0x2, 0x2, 0x3c, 0x124, 0x3, 0x2, + 0x2, 0x2, 0x3e, 0x127, 0x3, 0x2, 0x2, 0x2, 0x40, 0x12a, 0x3, 0x2, + 0x2, 0x2, 0x42, 0x130, 0x3, 0x2, 0x2, 0x2, 0x44, 0x132, 0x3, 0x2, + 0x2, 0x2, 0x46, 0x134, 0x3, 0x2, 0x2, 0x2, 0x48, 0x13f, 0x3, 0x2, + 0x2, 0x2, 0x4a, 0x143, 0x3, 0x2, 0x2, 0x2, 0x4c, 0x145, 0x3, 0x2, + 0x2, 0x2, 0x4e, 0x147, 0x3, 0x2, 0x2, 0x2, 0x50, 0x149, 0x3, 0x2, + 0x2, 0x2, 0x52, 0x54, 0x5, 0x4, 0x3, 0x2, 0x53, 0x52, 0x3, 0x2, 0x2, + 0x2, 0x54, 0x55, 0x3, 0x2, 0x2, 0x2, 0x55, 0x53, 0x3, 0x2, 0x2, 0x2, + 0x55, 0x56, 0x3, 0x2, 0x2, 0x2, 0x56, 0x57, 0x3, 0x2, 0x2, 0x2, 0x57, + 0x58, 0x7, 0x2, 0x2, 0x3, 0x58, 0x3, 0x3, 0x2, 0x2, 0x2, 0x59, 0x5d, + 0x5, 0x6, 0x4, 0x2, 0x5a, 0x5d, 0x5, 0x10, 0x9, 0x2, 0x5b, 0x5d, + 0x5, 0x18, 0xd, 0x2, 0x5c, 0x59, 0x3, 0x2, 0x2, 0x2, 0x5c, 0x5a, + 0x3, 0x2, 0x2, 0x2, 0x5c, 0x5b, 0x3, 0x2, 0x2, 0x2, 0x5d, 0x5, 0x3, + 0x2, 0x2, 0x2, 0x5e, 0x5f, 0x7, 0x3, 0x2, 0x2, 0x5f, 0x60, 0x5, 0x8, + 0x5, 0x2, 0x60, 0x7, 0x3, 0x2, 0x2, 0x2, 0x61, 0x62, 0x5, 0x4c, 0x27, + 0x2, 0x62, 0x63, 0x7, 0x4, 0x2, 0x2, 0x63, 0x64, 0x5, 0xc, 0x7, 0x2, + 0x64, 0x67, 0x3, 0x2, 0x2, 0x2, 0x65, 0x66, 0x7, 0x5, 0x2, 0x2, 0x66, + 0x68, 0x5, 0x30, 0x19, 0x2, 0x67, 0x65, 0x3, 0x2, 0x2, 0x2, 0x67, + 0x68, 0x3, 0x2, 0x2, 0x2, 0x68, 0x9, 0x3, 0x2, 0x2, 0x2, 0x69, 0x6a, + 0x5, 0x4c, 0x27, 0x2, 0x6a, 0x6b, 0x7, 0x4, 0x2, 0x2, 0x6b, 0x6c, + 0x5, 0xc, 0x7, 0x2, 0x6c, 0x6d, 0x3, 0x2, 0x2, 0x2, 0x6d, 0x6e, 0x7, + 0x5, 0x2, 0x2, 0x6e, 0x6f, 0x5, 0x30, 0x19, 0x2, 0x6f, 0xb, 0x3, + 0x2, 0x2, 0x2, 0x70, 0x74, 0x5, 0x4e, 0x28, 0x2, 0x71, 0x73, 0x5, + 0xe, 0x8, 0x2, 0x72, 0x71, 0x3, 0x2, 0x2, 0x2, 0x73, 0x76, 0x3, 0x2, + 0x2, 0x2, 0x74, 0x72, 0x3, 0x2, 0x2, 0x2, 0x74, 0x75, 0x3, 0x2, 0x2, + 0x2, 0x75, 0xd, 0x3, 0x2, 0x2, 0x2, 0x76, 0x74, 0x3, 0x2, 0x2, 0x2, + 0x77, 0x7e, 0x7, 0x6, 0x2, 0x2, 0x78, 0x7a, 0x7, 0x7, 0x2, 0x2, 0x79, + 0x7b, 0x7, 0x24, 0x2, 0x2, 0x7a, 0x79, 0x3, 0x2, 0x2, 0x2, 0x7a, + 0x7b, 0x3, 0x2, 0x2, 0x2, 0x7b, 0x7c, 0x3, 0x2, 0x2, 0x2, 0x7c, 0x7e, + 0x7, 0x8, 0x2, 0x2, 0x7d, 0x77, 0x3, 0x2, 0x2, 0x2, 0x7d, 0x78, 0x3, + 0x2, 0x2, 0x2, 0x7e, 0xf, 0x3, 0x2, 0x2, 0x2, 0x7f, 0x80, 0x7, 0x9, + 0x2, 0x2, 0x80, 0x81, 0x5, 0x12, 0xa, 0x2, 0x81, 0x11, 0x3, 0x2, + 0x2, 0x2, 0x82, 0x83, 0x5, 0x4a, 0x26, 0x2, 0x83, 0x84, 0x7, 0xa, + 0x2, 0x2, 0x84, 0x85, 0x5, 0x14, 0xb, 0x2, 0x85, 0x86, 0x7, 0xb, + 0x2, 0x2, 0x86, 0x87, 0x7, 0x4, 0x2, 0x2, 0x87, 0x88, 0x5, 0xc, 0x7, + 0x2, 0x88, 0x89, 0x3, 0x2, 0x2, 0x2, 0x89, 0x8a, 0x5, 0x16, 0xc, + 0x2, 0x8a, 0x13, 0x3, 0x2, 0x2, 0x2, 0x8b, 0x90, 0x5, 0x8, 0x5, 0x2, + 0x8c, 0x8d, 0x7, 0xc, 0x2, 0x2, 0x8d, 0x8f, 0x5, 0x8, 0x5, 0x2, 0x8e, + 0x8c, 0x3, 0x2, 0x2, 0x2, 0x8f, 0x92, 0x3, 0x2, 0x2, 0x2, 0x90, 0x8e, + 0x3, 0x2, 0x2, 0x2, 0x90, 0x91, 0x3, 0x2, 0x2, 0x2, 0x91, 0x94, 0x3, + 0x2, 0x2, 0x2, 0x92, 0x90, 0x3, 0x2, 0x2, 0x2, 0x93, 0x8b, 0x3, 0x2, + 0x2, 0x2, 0x93, 0x94, 0x3, 0x2, 0x2, 0x2, 0x94, 0x15, 0x3, 0x2, 0x2, + 0x2, 0x95, 0x99, 0x7, 0xd, 0x2, 0x2, 0x96, 0x98, 0x5, 0x20, 0x11, + 0x2, 0x97, 0x96, 0x3, 0x2, 0x2, 0x2, 0x98, 0x9b, 0x3, 0x2, 0x2, 0x2, + 0x99, 0x97, 0x3, 0x2, 0x2, 0x2, 0x99, 0x9a, 0x3, 0x2, 0x2, 0x2, 0x9a, + 0x9c, 0x3, 0x2, 0x2, 0x2, 0x9b, 0x99, 0x3, 0x2, 0x2, 0x2, 0x9c, 0x9d, + 0x7, 0xe, 0x2, 0x2, 0x9d, 0x17, 0x3, 0x2, 0x2, 0x2, 0x9e, 0x9f, 0x7, + 0xf, 0x2, 0x2, 0x9f, 0xa0, 0x5, 0x50, 0x29, 0x2, 0xa0, 0xa4, 0x7, + 0xd, 0x2, 0x2, 0xa1, 0xa3, 0x5, 0x1a, 0xe, 0x2, 0xa2, 0xa1, 0x3, + 0x2, 0x2, 0x2, 0xa3, 0xa6, 0x3, 0x2, 0x2, 0x2, 0xa4, 0xa2, 0x3, 0x2, + 0x2, 0x2, 0xa4, 0xa5, 0x3, 0x2, 0x2, 0x2, 0xa5, 0xa7, 0x3, 0x2, 0x2, + 0x2, 0xa6, 0xa4, 0x3, 0x2, 0x2, 0x2, 0xa7, 0xa8, 0x7, 0xe, 0x2, 0x2, + 0xa8, 0x19, 0x3, 0x2, 0x2, 0x2, 0xa9, 0xac, 0x5, 0x1c, 0xf, 0x2, + 0xaa, 0xac, 0x5, 0x1e, 0x10, 0x2, 0xab, 0xa9, 0x3, 0x2, 0x2, 0x2, + 0xab, 0xaa, 0x3, 0x2, 0x2, 0x2, 0xac, 0x1b, 0x3, 0x2, 0x2, 0x2, 0xad, + 0xae, 0x5, 0x8, 0x5, 0x2, 0xae, 0x1d, 0x3, 0x2, 0x2, 0x2, 0xaf, 0xb0, + 0x5, 0x12, 0xa, 0x2, 0xb0, 0x1f, 0x3, 0x2, 0x2, 0x2, 0xb1, 0xba, + 0x5, 0x6, 0x4, 0x2, 0xb2, 0xba, 0x5, 0x22, 0x12, 0x2, 0xb3, 0xba, + 0x5, 0x24, 0x13, 0x2, 0xb4, 0xba, 0x5, 0x28, 0x15, 0x2, 0xb5, 0xba, + 0x5, 0x2a, 0x16, 0x2, 0xb6, 0xba, 0x5, 0x2c, 0x17, 0x2, 0xb7, 0xba, + 0x5, 0x2e, 0x18, 0x2, 0xb8, 0xba, 0x5, 0x30, 0x19, 0x2, 0xb9, 0xb1, + 0x3, 0x2, 0x2, 0x2, 0xb9, 0xb2, 0x3, 0x2, 0x2, 0x2, 0xb9, 0xb3, 0x3, + 0x2, 0x2, 0x2, 0xb9, 0xb4, 0x3, 0x2, 0x2, 0x2, 0xb9, 0xb5, 0x3, 0x2, + 0x2, 0x2, 0xb9, 0xb6, 0x3, 0x2, 0x2, 0x2, 0xb9, 0xb7, 0x3, 0x2, 0x2, + 0x2, 0xb9, 0xb8, 0x3, 0x2, 0x2, 0x2, 0xba, 0x21, 0x3, 0x2, 0x2, 0x2, + 0xbb, 0xbc, 0x7, 0x10, 0x2, 0x2, 0xbc, 0xbd, 0x5, 0x30, 0x19, 0x2, + 0xbd, 0xc5, 0x5, 0x16, 0xc, 0x2, 0xbe, 0xbf, 0x7, 0x11, 0x2, 0x2, + 0xbf, 0xc0, 0x7, 0x10, 0x2, 0x2, 0xc0, 0xc1, 0x5, 0x30, 0x19, 0x2, + 0xc1, 0xc2, 0x5, 0x16, 0xc, 0x2, 0xc2, 0xc4, 0x3, 0x2, 0x2, 0x2, + 0xc3, 0xbe, 0x3, 0x2, 0x2, 0x2, 0xc4, 0xc7, 0x3, 0x2, 0x2, 0x2, 0xc5, + 0xc3, 0x3, 0x2, 0x2, 0x2, 0xc5, 0xc6, 0x3, 0x2, 0x2, 0x2, 0xc6, 0xca, + 0x3, 0x2, 0x2, 0x2, 0xc7, 0xc5, 0x3, 0x2, 0x2, 0x2, 0xc8, 0xc9, 0x7, + 0x11, 0x2, 0x2, 0xc9, 0xcb, 0x5, 0x16, 0xc, 0x2, 0xca, 0xc8, 0x3, + 0x2, 0x2, 0x2, 0xca, 0xcb, 0x3, 0x2, 0x2, 0x2, 0xcb, 0x23, 0x3, 0x2, + 0x2, 0x2, 0xcc, 0xcd, 0x7, 0x12, 0x2, 0x2, 0xcd, 0xce, 0x5, 0x42, + 0x22, 0x2, 0xce, 0xcf, 0x5, 0x26, 0x14, 0x2, 0xcf, 0x25, 0x3, 0x2, + 0x2, 0x2, 0xd0, 0xd7, 0x7, 0xd, 0x2, 0x2, 0xd1, 0xd2, 0x7, 0x13, + 0x2, 0x2, 0xd2, 0xd3, 0x5, 0x30, 0x19, 0x2, 0xd3, 0xd4, 0x5, 0x16, + 0xc, 0x2, 0xd4, 0xd6, 0x3, 0x2, 0x2, 0x2, 0xd5, 0xd1, 0x3, 0x2, 0x2, + 0x2, 0xd6, 0xd9, 0x3, 0x2, 0x2, 0x2, 0xd7, 0xd5, 0x3, 0x2, 0x2, 0x2, + 0xd7, 0xd8, 0x3, 0x2, 0x2, 0x2, 0xd8, 0xda, 0x3, 0x2, 0x2, 0x2, 0xd9, + 0xd7, 0x3, 0x2, 0x2, 0x2, 0xda, 0xdb, 0x7, 0xe, 0x2, 0x2, 0xdb, 0x27, + 0x3, 0x2, 0x2, 0x2, 0xdc, 0xdf, 0x7, 0x14, 0x2, 0x2, 0xdd, 0xe0, + 0x5, 0xa, 0x6, 0x2, 0xde, 0xe0, 0x5, 0x2c, 0x17, 0x2, 0xdf, 0xdd, + 0x3, 0x2, 0x2, 0x2, 0xdf, 0xde, 0x3, 0x2, 0x2, 0x2, 0xe0, 0xe1, 0x3, + 0x2, 0x2, 0x2, 0xe1, 0xe2, 0x7, 0xc, 0x2, 0x2, 0xe2, 0xe3, 0x5, 0x30, + 0x19, 0x2, 0xe3, 0xe4, 0x7, 0xc, 0x2, 0x2, 0xe4, 0xe5, 0x5, 0x30, + 0x19, 0x2, 0xe5, 0xe6, 0x5, 0x16, 0xc, 0x2, 0xe6, 0x29, 0x3, 0x2, + 0x2, 0x2, 0xe7, 0xe8, 0x7, 0x15, 0x2, 0x2, 0xe8, 0xe9, 0x5, 0x30, + 0x19, 0x2, 0xe9, 0xea, 0x5, 0x16, 0xc, 0x2, 0xea, 0x2b, 0x3, 0x2, + 0x2, 0x2, 0xeb, 0xec, 0x5, 0x42, 0x22, 0x2, 0xec, 0xed, 0x7, 0x5, + 0x2, 0x2, 0xed, 0xee, 0x5, 0x30, 0x19, 0x2, 0xee, 0x2d, 0x3, 0x2, + 0x2, 0x2, 0xef, 0xf0, 0x7, 0x16, 0x2, 0x2, 0xf0, 0xf1, 0x5, 0x30, + 0x19, 0x2, 0xf1, 0x2f, 0x3, 0x2, 0x2, 0x2, 0xf2, 0xf9, 0x5, 0x36, + 0x1c, 0x2, 0xf3, 0xf9, 0x5, 0x44, 0x23, 0x2, 0xf4, 0xf9, 0x5, 0x42, + 0x22, 0x2, 0xf5, 0xf9, 0x5, 0x48, 0x25, 0x2, 0xf6, 0xf9, 0x5, 0x46, + 0x24, 0x2, 0xf7, 0xf9, 0x5, 0x38, 0x1d, 0x2, 0xf8, 0xf2, 0x3, 0x2, + 0x2, 0x2, 0xf8, 0xf3, 0x3, 0x2, 0x2, 0x2, 0xf8, 0xf4, 0x3, 0x2, 0x2, + 0x2, 0xf8, 0xf5, 0x3, 0x2, 0x2, 0x2, 0xf8, 0xf6, 0x3, 0x2, 0x2, 0x2, + 0xf8, 0xf7, 0x3, 0x2, 0x2, 0x2, 0xf9, 0x31, 0x3, 0x2, 0x2, 0x2, 0xfa, + 0x100, 0x5, 0x36, 0x1c, 0x2, 0xfb, 0x100, 0x5, 0x44, 0x23, 0x2, 0xfc, + 0x100, 0x5, 0x42, 0x22, 0x2, 0xfd, 0x100, 0x5, 0x48, 0x25, 0x2, 0xfe, + 0x100, 0x5, 0x46, 0x24, 0x2, 0xff, 0xfa, 0x3, 0x2, 0x2, 0x2, 0xff, + 0xfb, 0x3, 0x2, 0x2, 0x2, 0xff, 0xfc, 0x3, 0x2, 0x2, 0x2, 0xff, 0xfd, + 0x3, 0x2, 0x2, 0x2, 0xff, 0xfe, 0x3, 0x2, 0x2, 0x2, 0x100, 0x33, + 0x3, 0x2, 0x2, 0x2, 0x101, 0x105, 0x5, 0x36, 0x1c, 0x2, 0x102, 0x105, + 0x5, 0x42, 0x22, 0x2, 0x103, 0x105, 0x5, 0x48, 0x25, 0x2, 0x104, + 0x101, 0x3, 0x2, 0x2, 0x2, 0x104, 0x102, 0x3, 0x2, 0x2, 0x2, 0x104, + 0x103, 0x3, 0x2, 0x2, 0x2, 0x105, 0x35, 0x3, 0x2, 0x2, 0x2, 0x106, + 0x107, 0x5, 0x4a, 0x26, 0x2, 0x107, 0x110, 0x7, 0xa, 0x2, 0x2, 0x108, + 0x10d, 0x5, 0x30, 0x19, 0x2, 0x109, 0x10a, 0x7, 0xc, 0x2, 0x2, 0x10a, + 0x10c, 0x5, 0x30, 0x19, 0x2, 0x10b, 0x109, 0x3, 0x2, 0x2, 0x2, 0x10c, + 0x10f, 0x3, 0x2, 0x2, 0x2, 0x10d, 0x10b, 0x3, 0x2, 0x2, 0x2, 0x10d, + 0x10e, 0x3, 0x2, 0x2, 0x2, 0x10e, 0x111, 0x3, 0x2, 0x2, 0x2, 0x10f, + 0x10d, 0x3, 0x2, 0x2, 0x2, 0x110, 0x108, 0x3, 0x2, 0x2, 0x2, 0x110, + 0x111, 0x3, 0x2, 0x2, 0x2, 0x111, 0x112, 0x3, 0x2, 0x2, 0x2, 0x112, + 0x113, 0x7, 0xb, 0x2, 0x2, 0x113, 0x37, 0x3, 0x2, 0x2, 0x2, 0x114, + 0x119, 0x5, 0x3a, 0x1e, 0x2, 0x115, 0x119, 0x5, 0x3c, 0x1f, 0x2, + 0x116, 0x119, 0x5, 0x3e, 0x20, 0x2, 0x117, 0x119, 0x5, 0x40, 0x21, + 0x2, 0x118, 0x114, 0x3, 0x2, 0x2, 0x2, 0x118, 0x115, 0x3, 0x2, 0x2, + 0x2, 0x118, 0x116, 0x3, 0x2, 0x2, 0x2, 0x118, 0x117, 0x3, 0x2, 0x2, + 0x2, 0x119, 0x39, 0x3, 0x2, 0x2, 0x2, 0x11a, 0x11b, 0x5, 0x32, 0x1a, + 0x2, 0x11b, 0x11c, 0x7, 0x1c, 0x2, 0x2, 0x11c, 0x121, 0x5, 0x32, + 0x1a, 0x2, 0x11d, 0x11e, 0x7, 0x1c, 0x2, 0x2, 0x11e, 0x120, 0x5, + 0x32, 0x1a, 0x2, 0x11f, 0x11d, 0x3, 0x2, 0x2, 0x2, 0x120, 0x123, + 0x3, 0x2, 0x2, 0x2, 0x121, 0x11f, 0x3, 0x2, 0x2, 0x2, 0x121, 0x122, + 0x3, 0x2, 0x2, 0x2, 0x122, 0x3b, 0x3, 0x2, 0x2, 0x2, 0x123, 0x121, + 0x3, 0x2, 0x2, 0x2, 0x124, 0x125, 0x7, 0x1b, 0x2, 0x2, 0x125, 0x126, + 0x5, 0x32, 0x1a, 0x2, 0x126, 0x3d, 0x3, 0x2, 0x2, 0x2, 0x127, 0x128, + 0x5, 0x32, 0x1a, 0x2, 0x128, 0x129, 0x7, 0x1a, 0x2, 0x2, 0x129, 0x3f, + 0x3, 0x2, 0x2, 0x2, 0x12a, 0x12b, 0x5, 0x32, 0x1a, 0x2, 0x12b, 0x12c, + 0x7, 0x17, 0x2, 0x2, 0x12c, 0x12d, 0x5, 0x30, 0x19, 0x2, 0x12d, 0x12e, + 0x7, 0x4, 0x2, 0x2, 0x12e, 0x12f, 0x5, 0x30, 0x19, 0x2, 0x12f, 0x41, + 0x3, 0x2, 0x2, 0x2, 0x130, 0x131, 0x5, 0x4c, 0x27, 0x2, 0x131, 0x43, + 0x3, 0x2, 0x2, 0x2, 0x132, 0x133, 0x9, 0x2, 0x2, 0x2, 0x133, 0x45, + 0x3, 0x2, 0x2, 0x2, 0x134, 0x13b, 0x5, 0x34, 0x1b, 0x2, 0x135, 0x136, + 0x9, 0x3, 0x2, 0x2, 0x136, 0x13c, 0x5, 0x42, 0x22, 0x2, 0x137, 0x138, + 0x7, 0x7, 0x2, 0x2, 0x138, 0x139, 0x5, 0x30, 0x19, 0x2, 0x139, 0x13a, + 0x7, 0x8, 0x2, 0x2, 0x13a, 0x13c, 0x3, 0x2, 0x2, 0x2, 0x13b, 0x135, + 0x3, 0x2, 0x2, 0x2, 0x13b, 0x137, 0x3, 0x2, 0x2, 0x2, 0x13c, 0x13d, + 0x3, 0x2, 0x2, 0x2, 0x13d, 0x13b, 0x3, 0x2, 0x2, 0x2, 0x13d, 0x13e, + 0x3, 0x2, 0x2, 0x2, 0x13e, 0x47, 0x3, 0x2, 0x2, 0x2, 0x13f, 0x140, + 0x7, 0xa, 0x2, 0x2, 0x140, 0x141, 0x5, 0x30, 0x19, 0x2, 0x141, 0x142, + 0x7, 0xb, 0x2, 0x2, 0x142, 0x49, 0x3, 0x2, 0x2, 0x2, 0x143, 0x144, + 0x7, 0x21, 0x2, 0x2, 0x144, 0x4b, 0x3, 0x2, 0x2, 0x2, 0x145, 0x146, + 0x7, 0x21, 0x2, 0x2, 0x146, 0x4d, 0x3, 0x2, 0x2, 0x2, 0x147, 0x148, + 0x7, 0x21, 0x2, 0x2, 0x148, 0x4f, 0x3, 0x2, 0x2, 0x2, 0x149, 0x14a, + 0x7, 0x21, 0x2, 0x2, 0x14a, 0x51, 0x3, 0x2, 0x2, 0x2, 0x1b, 0x55, + 0x5c, 0x67, 0x74, 0x7a, 0x7d, 0x90, 0x93, 0x99, 0xa4, 0xab, 0xb9, + 0xc5, 0xca, 0xd7, 0xdf, 0xf8, 0xff, 0x104, 0x10d, 0x110, 0x118, 0x121, + 0x13b, 0x13d, }; _serializedATN.insert(_serializedATN.end(), serializedATNSegment0, diff --git a/gen/TocParser.h b/gen/TocParser.h index a1438fb..8cdece5 100644 --- a/gen/TocParser.h +++ b/gen/TocParser.h @@ -14,20 +14,23 @@ 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, T__9 = 10, T__10 = 11, T__11 = 12, T__12 = 13, T__13 = 14, - T__14 = 15, T__15 = 16, BINARY_OPERATOR = 17, INTLIT = 18, NAME = 19, - WS = 20, NEWLINE = 21 + T__14 = 15, T__15 = 16, T__16 = 17, T__17 = 18, T__18 = 19, T__19 = 20, + T__20 = 21, T__21 = 22, T__22 = 23, POSTFIX_OP = 24, PREFIX_OP = 25, + BINARY_OP = 26, INT_LIT = 27, DECIMAL_LIT = 28, STRING_LIT = 29, BOOL_LIT = 30, + NAME = 31, WS = 32, NEWLINE = 33, NUMBER = 34 }; enum { - RuleProg = 0, RuleDecl = 1, RuleVarDecl = 2, RuleVar = 3, RuleType = 4, - RuleFuncDecl = 5, RuleFunc = 6, RuleParameter = 7, RuleBody = 8, RuleStructDecl = 9, - RuleStructMember = 10, RuleStructVar = 11, RuleStructMethod = 12, RuleStmt = 13, - RuleConditional = 14, RuleIfCond = 15, RuleLoop = 16, RuleWhileLoop = 17, - RuleAssignment = 18, RuleReturnStmt = 19, RuleExpr = 20, RuleNonOpExpr = 21, - RuleNonSubscriptExpr = 22, RuleNonAccessExpr = 23, RuleFuncCall = 24, - RuleOperatorExpr = 25, RuleBinaryOperator = 26, RuleIdentifier = 27, - RuleLiteral = 28, RuleSubscript = 29, RuleMemberAccess = 30, RuleParenExpr = 31, - RuleFuncName = 32, RuleVarName = 33, RuleTypeName = 34, RuleStructName = 35 + RuleProg = 0, RuleDecl = 1, RuleVarDecl = 2, RuleVar = 3, RuleVarInit = 4, + RuleType = 5, RuleTypeModifier = 6, RuleFuncDecl = 7, RuleFunc = 8, + RuleParameter = 9, RuleBody = 10, RuleStructDecl = 11, RuleStructMember = 12, + RuleStructVar = 13, RuleStructMethod = 14, RuleStmt = 15, RuleIfStmt = 16, + RuleSwitchStmt = 17, RuleSwitchBody = 18, RuleForStmt = 19, RuleWhileStmt = 20, + RuleAssignStmt = 21, RuleReturnStmt = 22, RuleExpr = 23, RuleNonOpExpr = 24, + RuleNonAccessExpr = 25, RuleFuncExpr = 26, RuleOpExpr = 27, RuleBinaryOp = 28, + RulePrefixOp = 29, RulePostfixOp = 30, RuleTernaryOp = 31, RuleIdentifierExpr = 32, + RuleLitExpr = 33, RuleAccessExpr = 34, RuleParenExpr = 35, RuleFuncName = 36, + RuleVarName = 37, RuleTypeName = 38, RuleStructName = 39 }; explicit TocParser(antlr4::TokenStream *input); @@ -44,7 +47,9 @@ public: class DeclContext; class VarDeclContext; class VarContext; + class VarInitContext; class TypeContext; + class TypeModifierContext; class FuncDeclContext; class FuncContext; class ParameterContext; @@ -54,23 +59,25 @@ public: class StructVarContext; class StructMethodContext; class StmtContext; - class ConditionalContext; - class IfCondContext; - class LoopContext; - class WhileLoopContext; - class AssignmentContext; + class IfStmtContext; + class SwitchStmtContext; + class SwitchBodyContext; + class ForStmtContext; + class WhileStmtContext; + class AssignStmtContext; class ReturnStmtContext; class ExprContext; class NonOpExprContext; - class NonSubscriptExprContext; class NonAccessExprContext; - class FuncCallContext; - class OperatorExprContext; - class BinaryOperatorContext; - class IdentifierContext; - class LiteralContext; - class SubscriptContext; - class MemberAccessContext; + class FuncExprContext; + class OpExprContext; + class BinaryOpContext; + class PrefixOpContext; + class PostfixOpContext; + class TernaryOpContext; + class IdentifierExprContext; + class LitExprContext; + class AccessExprContext; class ParenExprContext; class FuncNameContext; class VarNameContext; @@ -135,11 +142,28 @@ public: VarContext* var(); + class VarInitContext : public antlr4::ParserRuleContext { + public: + VarInitContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + VarNameContext *varName(); + TypeContext *type(); + ExprContext *expr(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + }; + + VarInitContext* varInit(); + class TypeContext : public antlr4::ParserRuleContext { public: TypeContext(antlr4::ParserRuleContext *parent, size_t invokingState); virtual size_t getRuleIndex() const override; TypeNameContext *typeName(); + std::vector typeModifier(); + TypeModifierContext* typeModifier(size_t i); virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; @@ -148,6 +172,19 @@ public: TypeContext* type(); + class TypeModifierContext : public antlr4::ParserRuleContext { + public: + TypeModifierContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *NUMBER(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + }; + + TypeModifierContext* typeModifier(); + class FuncDeclContext : public antlr4::ParserRuleContext { public: FuncDeclContext(antlr4::ParserRuleContext *parent, size_t invokingState); @@ -265,9 +302,11 @@ public: StmtContext(antlr4::ParserRuleContext *parent, size_t invokingState); virtual size_t getRuleIndex() const override; VarDeclContext *varDecl(); - ConditionalContext *conditional(); - LoopContext *loop(); - AssignmentContext *assignment(); + IfStmtContext *ifStmt(); + SwitchStmtContext *switchStmt(); + ForStmtContext *forStmt(); + WhileStmtContext *whileStmt(); + AssignStmtContext *assignStmt(); ReturnStmtContext *returnStmt(); ExprContext *expr(); @@ -278,49 +317,72 @@ public: StmtContext* stmt(); - class ConditionalContext : public antlr4::ParserRuleContext { + class IfStmtContext : public antlr4::ParserRuleContext { public: - ConditionalContext(antlr4::ParserRuleContext *parent, size_t invokingState); + IfStmtContext(antlr4::ParserRuleContext *parent, size_t invokingState); virtual size_t getRuleIndex() const override; - IfCondContext *ifCond(); + std::vector expr(); + ExprContext* expr(size_t i); + std::vector body(); + BodyContext* body(size_t i); virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; }; - ConditionalContext* conditional(); + IfStmtContext* ifStmt(); - class IfCondContext : public antlr4::ParserRuleContext { + class SwitchStmtContext : public antlr4::ParserRuleContext { public: - IfCondContext(antlr4::ParserRuleContext *parent, size_t invokingState); + SwitchStmtContext(antlr4::ParserRuleContext *parent, size_t invokingState); virtual size_t getRuleIndex() const override; - ExprContext *expr(); - BodyContext *body(); + IdentifierExprContext *identifierExpr(); + SwitchBodyContext *switchBody(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + }; + + SwitchStmtContext* switchStmt(); + + class SwitchBodyContext : public antlr4::ParserRuleContext { + public: + SwitchBodyContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + std::vector expr(); + ExprContext* expr(size_t i); + std::vector body(); + BodyContext* body(size_t i); virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; }; - IfCondContext* ifCond(); + SwitchBodyContext* switchBody(); - class LoopContext : public antlr4::ParserRuleContext { + class ForStmtContext : public antlr4::ParserRuleContext { public: - LoopContext(antlr4::ParserRuleContext *parent, size_t invokingState); + ForStmtContext(antlr4::ParserRuleContext *parent, size_t invokingState); virtual size_t getRuleIndex() const override; - WhileLoopContext *whileLoop(); + std::vector expr(); + ExprContext* expr(size_t i); + BodyContext *body(); + VarInitContext *varInit(); + AssignStmtContext *assignStmt(); virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; }; - LoopContext* loop(); + ForStmtContext* forStmt(); - class WhileLoopContext : public antlr4::ParserRuleContext { + class WhileStmtContext : public antlr4::ParserRuleContext { public: - WhileLoopContext(antlr4::ParserRuleContext *parent, size_t invokingState); + WhileStmtContext(antlr4::ParserRuleContext *parent, size_t invokingState); virtual size_t getRuleIndex() const override; ExprContext *expr(); BodyContext *body(); @@ -330,13 +392,13 @@ public: }; - WhileLoopContext* whileLoop(); + WhileStmtContext* whileStmt(); - class AssignmentContext : public antlr4::ParserRuleContext { + class AssignStmtContext : public antlr4::ParserRuleContext { public: - AssignmentContext(antlr4::ParserRuleContext *parent, size_t invokingState); + AssignStmtContext(antlr4::ParserRuleContext *parent, size_t invokingState); virtual size_t getRuleIndex() const override; - IdentifierContext *identifier(); + IdentifierExprContext *identifierExpr(); ExprContext *expr(); virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; @@ -344,7 +406,7 @@ public: }; - AssignmentContext* assignment(); + AssignStmtContext* assignStmt(); class ReturnStmtContext : public antlr4::ParserRuleContext { public: @@ -363,13 +425,12 @@ public: public: ExprContext(antlr4::ParserRuleContext *parent, size_t invokingState); virtual size_t getRuleIndex() const override; - FuncCallContext *funcCall(); - LiteralContext *literal(); - IdentifierContext *identifier(); - SubscriptContext *subscript(); - MemberAccessContext *memberAccess(); + FuncExprContext *funcExpr(); + LitExprContext *litExpr(); + IdentifierExprContext *identifierExpr(); ParenExprContext *parenExpr(); - OperatorExprContext *operatorExpr(); + AccessExprContext *accessExpr(); + OpExprContext *opExpr(); virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; @@ -382,12 +443,11 @@ public: public: NonOpExprContext(antlr4::ParserRuleContext *parent, size_t invokingState); virtual size_t getRuleIndex() const override; - FuncCallContext *funcCall(); - LiteralContext *literal(); - IdentifierContext *identifier(); - SubscriptContext *subscript(); - MemberAccessContext *memberAccess(); + FuncExprContext *funcExpr(); + LitExprContext *litExpr(); + IdentifierExprContext *identifierExpr(); ParenExprContext *parenExpr(); + AccessExprContext *accessExpr(); virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; @@ -396,14 +456,12 @@ public: NonOpExprContext* nonOpExpr(); - class NonSubscriptExprContext : public antlr4::ParserRuleContext { + class NonAccessExprContext : public antlr4::ParserRuleContext { public: - NonSubscriptExprContext(antlr4::ParserRuleContext *parent, size_t invokingState); + NonAccessExprContext(antlr4::ParserRuleContext *parent, size_t invokingState); virtual size_t getRuleIndex() const override; - FuncCallContext *funcCall(); - LiteralContext *literal(); - IdentifierContext *identifier(); - MemberAccessContext *memberAccess(); + FuncExprContext *funcExpr(); + IdentifierExprContext *identifierExpr(); ParenExprContext *parenExpr(); virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; @@ -411,123 +469,143 @@ public: }; - NonSubscriptExprContext* nonSubscriptExpr(); + NonAccessExprContext* nonAccessExpr(); - class NonAccessExprContext : public antlr4::ParserRuleContext { + class FuncExprContext : public antlr4::ParserRuleContext { public: - NonAccessExprContext(antlr4::ParserRuleContext *parent, size_t invokingState); + FuncExprContext(antlr4::ParserRuleContext *parent, size_t invokingState); virtual size_t getRuleIndex() const override; - FuncCallContext *funcCall(); - LiteralContext *literal(); - IdentifierContext *identifier(); - SubscriptContext *subscript(); - ParenExprContext *parenExpr(); - OperatorExprContext *operatorExpr(); + FuncNameContext *funcName(); + std::vector expr(); + ExprContext* expr(size_t i); virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; }; - NonAccessExprContext* nonAccessExpr(); + FuncExprContext* funcExpr(); - class FuncCallContext : public antlr4::ParserRuleContext { + class OpExprContext : public antlr4::ParserRuleContext { public: - FuncCallContext(antlr4::ParserRuleContext *parent, size_t invokingState); + OpExprContext(antlr4::ParserRuleContext *parent, size_t invokingState); virtual size_t getRuleIndex() const override; - FuncNameContext *funcName(); - std::vector expr(); - ExprContext* expr(size_t i); + BinaryOpContext *binaryOp(); + PrefixOpContext *prefixOp(); + PostfixOpContext *postfixOp(); + TernaryOpContext *ternaryOp(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + }; + + OpExprContext* opExpr(); + + class BinaryOpContext : public antlr4::ParserRuleContext { + public: + BinaryOpContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + std::vector nonOpExpr(); + NonOpExprContext* nonOpExpr(size_t i); + std::vector BINARY_OP(); + antlr4::tree::TerminalNode* BINARY_OP(size_t i); virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; }; - FuncCallContext* funcCall(); + BinaryOpContext* binaryOp(); - class OperatorExprContext : public antlr4::ParserRuleContext { + class PrefixOpContext : public antlr4::ParserRuleContext { public: - OperatorExprContext(antlr4::ParserRuleContext *parent, size_t invokingState); + PrefixOpContext(antlr4::ParserRuleContext *parent, size_t invokingState); virtual size_t getRuleIndex() const override; - BinaryOperatorContext *binaryOperator(); + antlr4::tree::TerminalNode *PREFIX_OP(); + NonOpExprContext *nonOpExpr(); virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; }; - OperatorExprContext* operatorExpr(); + PrefixOpContext* prefixOp(); - class BinaryOperatorContext : public antlr4::ParserRuleContext { + class PostfixOpContext : public antlr4::ParserRuleContext { public: - BinaryOperatorContext(antlr4::ParserRuleContext *parent, size_t invokingState); + PostfixOpContext(antlr4::ParserRuleContext *parent, size_t invokingState); virtual size_t getRuleIndex() const override; - std::vector nonOpExpr(); - NonOpExprContext* nonOpExpr(size_t i); - std::vector BINARY_OPERATOR(); - antlr4::tree::TerminalNode* BINARY_OPERATOR(size_t i); + NonOpExprContext *nonOpExpr(); + antlr4::tree::TerminalNode *POSTFIX_OP(); virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; }; - BinaryOperatorContext* binaryOperator(); + PostfixOpContext* postfixOp(); - class IdentifierContext : public antlr4::ParserRuleContext { + class TernaryOpContext : public antlr4::ParserRuleContext { public: - IdentifierContext(antlr4::ParserRuleContext *parent, size_t invokingState); + TernaryOpContext(antlr4::ParserRuleContext *parent, size_t invokingState); virtual size_t getRuleIndex() const override; - VarNameContext *varName(); + NonOpExprContext *nonOpExpr(); + std::vector expr(); + ExprContext* expr(size_t i); virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; }; - IdentifierContext* identifier(); + TernaryOpContext* ternaryOp(); - class LiteralContext : public antlr4::ParserRuleContext { + class IdentifierExprContext : public antlr4::ParserRuleContext { public: - LiteralContext(antlr4::ParserRuleContext *parent, size_t invokingState); + IdentifierExprContext(antlr4::ParserRuleContext *parent, size_t invokingState); virtual size_t getRuleIndex() const override; - antlr4::tree::TerminalNode *INTLIT(); + VarNameContext *varName(); virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; }; - LiteralContext* literal(); + IdentifierExprContext* identifierExpr(); - class SubscriptContext : public antlr4::ParserRuleContext { + class LitExprContext : public antlr4::ParserRuleContext { public: - SubscriptContext(antlr4::ParserRuleContext *parent, size_t invokingState); + LitExprContext(antlr4::ParserRuleContext *parent, size_t invokingState); virtual size_t getRuleIndex() const override; - NonSubscriptExprContext *nonSubscriptExpr(); - ExprContext *expr(); + antlr4::tree::TerminalNode *INT_LIT(); + antlr4::tree::TerminalNode *DECIMAL_LIT(); + antlr4::tree::TerminalNode *STRING_LIT(); + antlr4::tree::TerminalNode *BOOL_LIT(); virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; }; - SubscriptContext* subscript(); + LitExprContext* litExpr(); - class MemberAccessContext : public antlr4::ParserRuleContext { + class AccessExprContext : public antlr4::ParserRuleContext { public: - MemberAccessContext(antlr4::ParserRuleContext *parent, size_t invokingState); + AccessExprContext(antlr4::ParserRuleContext *parent, size_t invokingState); virtual size_t getRuleIndex() const override; - std::vector identifier(); - IdentifierContext* identifier(size_t i); + NonAccessExprContext *nonAccessExpr(); + std::vector identifierExpr(); + IdentifierExprContext* identifierExpr(size_t i); + std::vector expr(); + ExprContext* expr(size_t i); virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; }; - MemberAccessContext* memberAccess(); + AccessExprContext* accessExpr(); class ParenExprContext : public antlr4::ParserRuleContext { public: diff --git a/src/repr.h b/src/repr.h index 6737ef4..c745ba1 100644 --- a/src/repr.h +++ b/src/repr.h @@ -14,22 +14,36 @@ struct Body; struct Function; struct Struct; struct Program; -struct CallExpr; -struct LiteralExpr; -struct VariableExpr; +struct FuncExpr; +struct LitExpr; +struct IdentifierExpr; struct BracketsExpr; -struct OperatorExpr; +struct UnaryOperatorExpr; +struct BinaryOperatorExpr; +struct TernaryOperatorExpr; struct DotExpr; struct Expr; struct IfStmt; +struct SwitchStmt; +struct ForStmt; struct WhileStmt; -struct ReturnStmt; struct AssignStmt; +struct ReturnStmt; struct Stmt; +enum class TypeModifierType { + Pointer, Array +}; + +struct TypeModifier { + TypeModifierType type; + + int _arraySize; +}; struct Type { std::string name; + std::vector modifiers; }; struct Variable { @@ -62,19 +76,28 @@ struct Program { }; enum class ExprType { - Call, Literal, Variable, Brackets, Operator, Dot + Func, Lit, Identifier, Brackets, UnaryOperator, BinaryOperator, TernaryOperator, Dot }; -struct CallExpr { +struct FuncExpr { std::string functionName; std::vector arguments; }; -struct LiteralExpr { - int i; +enum class LitType { + Int, Decimal, String, Bool +}; + +struct LitExpr { + LitType type; + + int _int; + double _decimal; + std::string _string; + bool _bool; }; -struct VariableExpr { +struct IdentifierExpr { std::string name; }; @@ -83,50 +106,95 @@ struct BracketsExpr { std::shared_ptr rexpr; }; -enum class OperatorType { - Plus, Minus, Multiply, Divide, - Equals, NotEquals, - LessThan, GreaterThan +enum class UnaryOperatorType { + Plus, Minus, IncrementPre, DecrementPre, IncrementPost, DecrementPost, LogicalNot, BitwiseNot, Dereference, AddressOf }; -struct OperatorExpr { +enum class BinaryOperatorType { + Plus, Minus, Multiply, Divide, Modulo, BitwiseAnd, BitwiseOr, BitwiseXor, LessThan, GreaterThan, + LeftShift, RightShift, LogicalAnd, LogicalOr, Equals, NotEquals, LessThanEquals, GreaterThanEquals, BitwiseAndEquals, BitwiseOrEquals, BitwiseXorEquals, + PlusEquals, MinusEquals, MultiplyEquals, DivideEquals, ModuloEquals, + LeftShiftEquals, RightShiftEquals +}; +static std::string UnaryOperatorTypeStrings[] = { + "+", "-", "++", "--", "++", "--", "!", "~", "*", "&" }; + +static std::string BinaryOperatorTypeStrings[] = { + "+", "-", "*", "/", "%", "&", "|", "^", "<", ">", + "<<",">>","&&","||","==","!=","<=",">=","&=","|=","^=", + "+=","-=","*=","/=","%=", + "<<=",">>=" }; + +struct UnaryOperatorExpr { + UnaryOperatorType type; + std::shared_ptr expr; +}; + +struct BinaryOperatorExpr { + BinaryOperatorType type; std::shared_ptr lexpr; std::shared_ptr rexpr; - OperatorType type; +}; + +struct TernaryOperatorExpr { + std::shared_ptr lexpr; + std::shared_ptr rexprTrue; + std::shared_ptr rexprFalse; }; struct DotExpr { std::shared_ptr lexpr; - std::string name; + IdentifierExpr ident; }; struct Expr { ExprType type; - CallExpr _call; - LiteralExpr _literal; - VariableExpr _variable; - BracketsExpr _brackets; - OperatorExpr _operator; - DotExpr _dot; + FuncExpr _func; + LitExpr _lit; + IdentifierExpr _identifier; + BracketsExpr _brackets; + UnaryOperatorExpr _unaryOperator; + BinaryOperatorExpr _binaryOperator; + TernaryOperatorExpr _ternaryOperator; + DotExpr _dot; }; enum class StmtType { - If, While, Return, Assign, Expr + If, Switch, For, While, Assign, Return, Expr }; +struct ElseStmt { + bool _if; + std::shared_ptr expr; + Body body; +}; struct IfStmt { Expr condition; Body body; + std::vector elses; }; -struct WhileStmt { - Expr condition; +struct SwitchCase { + std::shared_ptr expr; Body body; }; -struct ReturnStmt { - Expr expr; +struct SwitchStmt { + IdentifierExpr ident; + std::vector cases; +}; + +struct ForStmt { + AssignStmt assign; + std::shared_ptr condition; + std::shared_ptr action; + Body body; +}; + +struct WhileStmt { + Expr condition; + Body body; }; struct AssignStmt { @@ -134,14 +202,20 @@ struct AssignStmt { Expr rexpr; }; +struct ReturnStmt { + Expr expr; +}; + struct Stmt { StmtType type; - IfStmt _if; - WhileStmt _while; - ReturnStmt _return; - AssignStmt _assign; - Expr _expr; + IfStmt _if; + SwitchStmt _switch; + ForStmt _for; + WhileStmt _while; + AssignStmt _assign; + ReturnStmt _return; + Expr _expr; }; diff --git a/src/repr_get.h b/src/repr_get.h index 7dbeea3..afea882 100644 --- a/src/repr_get.h +++ b/src/repr_get.h @@ -8,9 +8,8 @@ Body getBody(TocParser::BodyContext * ctx); Function getFunction(TocParser::FuncContext * ctx); Struct getStruct(TocParser::StructDeclContext * ctx); Program getProgram(TocParser::ProgContext * ctx); -OperatorExpr getOperatorExpr(TocParser::OperatorExprContext * ctx); -Expr getExpr(TocParser::NonOpExprContext * ctx); -Expr getExpr(TocParser::NonSubscriptExprContext * ctx); +//Expr getExpr(TocParser::NonOpExprContext * ctx); +//Expr getExpr(TocParser::NonAccessExprContext * ctx); Expr getExpr(TocParser::ExprContext * ctx); Stmt getStmt(TocParser::StmtContext * ctx); @@ -76,12 +75,15 @@ Program getProgram(TocParser::ProgContext * ctx) { } return result; } -OperatorExpr getOperatorExpr(TocParser::OperatorExprContext * ctx) { +OperatorExpr getOperatorExpr(TocParser::OpExprContext * ctx) { OperatorExpr result; - result.lexpr = std::make_unique(getExpr(ctx->binaryOperator()->nonOpExpr(0))); - result.rexpr = std::make_unique(getExpr(ctx->binaryOperator()->nonOpExpr(1))); + result.lexpr = std::make_unique(getExpr(ctx->binaryOp()->nonOpExpr(0))); + result.rexpr = std::make_unique(getExpr(ctx->binaryOp()->nonOpExpr(1))); - std::string op = ctx->binaryOperator()->BINARY_OPERATOR(0)->toString(); + std::string op = ctx->binaryOp()->BINARY_OP(0)->toString(); + for (auto o : ops) { + + } if (op == "+") result.type = OperatorType::Plus; if (op == "-") result.type = OperatorType::Minus; if (op == "*") result.type = OperatorType::Multiply; @@ -121,7 +123,7 @@ Expr getExpr(TocParser::NonOpExprContext * ctx) { } return result; } -Expr getExpr(TocParser::NonSubscriptExprContext * ctx) { +Expr getExpr(TocParser::NonAccessExprContext * ctx) { Expr result; if (ctx->funcCall() != nullptr) { result.type = ExprType::Call; diff --git a/src/toc.h b/src/toc.h index 642bc37..67f92dc 100644 --- a/src/toc.h +++ b/src/toc.h @@ -18,7 +18,9 @@ std::ostream & operator<< (std::ostream & out, const std::vector & v) { std::ostream & operator<< (std::ostream & out, const Type & t); std::ostream & operator<< (std::ostream & out, const Variable & v); std::ostream & operator<< (std::ostream & out, const Body & b); -std::ostream & operator<< (std::ostream & out, const OperatorExpr & o); +std::ostream & operator<< (std::ostream & out, const UnaryOperatorExpr & o); +std::ostream & operator<< (std::ostream & out, const BinaryOperatorExpr & o); +std::ostream & operator<< (std::ostream & out, const TernaryOperatorExpr & o); std::ostream & operator<< (std::ostream & out, const Expr & e); std::ostream & operator<< (std::ostream & out, const Stmt & s); @@ -65,21 +67,23 @@ std::ostream & operator<< (std::ostream & out, const Body & b) { return out; } -std::ostream & operator<< (std::ostream & out, const OperatorExpr & o) { - out << *o.lexpr << " "; - - switch (o.type) { - case OperatorType::Plus: out << "+"; break; - case OperatorType::Minus: out << "-"; break; - case OperatorType::Multiply: out << "*"; break; - case OperatorType::Divide: out << "/"; break; - case OperatorType::Equals: out << "=="; break; - case OperatorType::NotEquals: out << "!="; break; - case OperatorType::LessThan: out << "<"; break; - case OperatorType::GreaterThan: out << ">"; break; +std::ostream & operator<< (std::ostream & out, const UnaryOperatorExpr & o) { + if (o.type == UnaryOperatorType::IncrementPost || o.type == UnaryOperatorType::DecrementPost) { + out << UnaryOperatorTypeStrings[(int)o.type] << *o.expr; + } + else { + out << *o.expr << UnaryOperatorTypeStrings[(int)o.type]; } - out << " " << *o.rexpr; + return out; +} +std::ostream & operator<< (std::ostream & out, const BinaryOperatorExpr & o) { + out << *o.lexpr << " " << BinaryOperatorTypeStrings[(int)o.type] << " " << *o.rexpr; + + return out; +} +std::ostream & operator<< (std::ostream & out, const TernaryOperatorExpr & o) { + out << *o.lexpr << " ? " << *o.rexprTrue << " : " << *o.rexprFalse; return out; } diff --git a/todo.txt b/todo.txt index e434bea..8ddc15e 100644 --- a/todo.txt +++ b/todo.txt @@ -28,10 +28,13 @@ define grammar: - dot/[] - literals - cast +- comments ==compiler== - type checks - cast +- files (.c/.h) +- l/rvalue ==new features== - generics @@ -47,4 +50,12 @@ Zeitplan: 01.08: Schreiben, vorabversion 02.08: Schreiben 03.08: Schreiben -04.08: Schreiben, abgeben \ No newline at end of file +04.08: Schreiben, abgeben + + + + + +Missing: +- unions +- const/static/extern \ No newline at end of file