set up grammar structure

This commit is contained in:
2024-08-06 15:03:51 +00:00
parent 9245c4fae7
commit a22a4ba594
14 changed files with 3243 additions and 852 deletions

View File

@ -1,10 +1,22 @@
lexer grammar MXLexer;
// Keywords
INT: 'int';
VOID: 'void';
BOOL: 'bool';
INT: 'int';
STRING: 'string';
NEW: 'new';
CLASS: 'class';
NULL: 'null';
TRUE: 'true';
FALSE: 'false';
THIS: 'this';
IF: 'if';
ELSE: 'else';
FOR: 'for';
WHILE: 'while';
BREAK: 'break';
CONTINUE: 'continue';
RETURN: 'return';
// Operators
@ -12,21 +24,57 @@ PLUS: '+';
MINUS: '-';
MULTIPLY: '*';
DIVIDE: '/';
MOD: '%';
GN: '>=';
GE: '>';
LN: '<=';
LE: '<';
NE: '!=';
EQ: '==';
LAND: '&&';
LOR: '||';
LNOT: '!';
ARS: '>>';
ALS: '<<';
BAND: '&';
BOR: '|';
BXOR: '^';
BNOT: '~';
ASSIGN: '=';
SELF_PLUS: '++';
SELF_MINUS: '--';
DOT: '.';
QUESTION_MARK: '?';
COLON: ':';
// Punctuation
LPAREN: '(';
RPAREN: ')';
LBRACKET: '[';
RBRACKET: ']';
LBRACE: '{';
RBRACE: '}';
SEMICOLON: ';';
COMMA: ',';
FORMAT_STRING_WHOLE: 'f"' FORMAT_STR_INTERNAL '"';
FORMAT_STRING_HEAD: 'f"' FORMAT_STR_INTERNAL '$';
FORMAT_STRING_TAIL: '$' FORMAT_STR_INTERNAL '"';
FORMAT_STRING_BODY: '$' FORMAT_STR_INTERNAL '$';
fragment FORMAT_STR_INTERNAL : (DOLLAR_IN_FORMAT_STR | ESC | ~[$"\\])*?;
fragment FORMAT_STR_BEG: 'f"';
fragment FORMAT_STR_END: '"';
fragment DOLLAR_IN_FORMAT_STR: '$$';
fragment DOLLAR: '$';
// Identifiers
ID: [a-zA-Z_][a-zA-Z_0-9]*;
ID: [a-zA-Z][a-zA-Z_0-9]*;
// Literals
INT_LITERAL: [0-9]+;
STRING_LITERAL: '"' (ESC|~["\\])*? '"';
fragment ESC : '\\"' | '\\\\';
// Whitespace and comments
WS: [ \t\r\n]+ -> skip;
COMMENT: '//' ~[\r\n]* -> skip;
LINE_COMMENT : '//' .*? '\r'? '\n' -> skip;
BLOCK_COMMENT: '/*' .*? '*/' -> skip;

View File

@ -3,39 +3,74 @@ parser grammar MXParser;
options { tokenVocab=MXLexer; }
mxprog
: function* EOF
: (class_def|define_statement|function_def)+ EOF
;
function
: type ID LPAREN RPAREN block
function_def
: type ID LPAREN ((type ID)(COMMA type ID)*)? RPAREN suite
;
class_def : CLASS ID LBRACE (class_var_def|class_constructor|function_def)* RBRACE SEMICOLON;
class_var_def : type (LBRACKET RBRACKET)* ID (COMMA ID )* SEMICOLON;
class_constructor : ID LPAREN RPAREN suite;
suite : LBRACE statement* RBRACE;
statement
: SEMICOLON
| define_statement
| expr SEMICOLON
| IF LPAREN expr RPAREN statement (ELSE statement)?
| WHILE LPAREN expr RPAREN statement
| FOR LPAREN (define_statement|(expr SEMICOLON)|SEMICOLON) expr? SEMICOLON (define_statement|expr)? RPAREN statement
| (BREAK|CONTINUE|(RETURN expr?)) SEMICOLON
| suite
;
define_statement : type (LBRACKET RBRACKET)* ID (ASSIGN expr)? (COMMA ID (ASSIGN expr)?)* SEMICOLON;
expr
: basic_expr
| LPAREN expr RPAREN
| expr DOT (ID|(ID LPAREN (expr (COMMA expr)*)? RPAREN))
| expr (LBRACKET expr RBRACKET)+
| expr (SELF_PLUS | SELF_MINUS)
| (SELF_PLUS | SELF_MINUS) expr
| MINUS expr
| LNOT expr
| BNOT expr
| expr (MULTIPLY|DIVIDE|MOD) expr
| expr (PLUS|MINUS) expr
| expr (ARS|ALS) expr
| expr (GN|GE|LN|LE) expr
| expr (NE|EQ) expr
| expr BAND expr
| expr BXOR expr
| expr BOR expr
| expr LAND expr
| expr LOR expr
| expr QUESTION_MARK expr COLON expr
| <assoc=right> expr ASSIGN expr
| NEW ID
| NEW ID LPAREN RPAREN
| NEW ID (LBRACKET expr RBRACKET)*(LBRACKET RBRACKET)*constant?
;
basic_expr
: THIS
| ID
| ID LPAREN (expr (COMMA expr)*)? RPAREN
| formatted_string
| constant
;
formatted_string : FORMAT_STRING_WHOLE | (FORMAT_STRING_HEAD expr (FORMAT_STRING_BODY expr)*? FORMAT_STRING_TAIL);
constant : TRUE
|FALSE
|INT_LITERAL
|STRING_LITERAL
|NULL
|LBRACE (constant (COMMA constant)*)? RBRACE;
type
: INT
| BOOL
| STRING
| VOID
;
block
: LBRACE statement* RBRACE
;
statement
: expression SEMICOLON
| returnStmt
| ifStmt
;
expression
: INT_LITERAL
| ID
| expression (PLUS | MINUS | MULTIPLY | DIVIDE) expression
| LPAREN expression RPAREN
;
returnStmt
: RETURN expression? SEMICOLON
;
ifStmt
: IF LPAREN expression RPAREN statement (ELSE statement)?
;
;

View File

@ -9,5 +9,7 @@ OUTPUT_DIR="../src/semantic/antlr-generated"
mkdir -p "$OUTPUT_DIR"
# Run ANTLR to generate lexer and parser
antlr4 -Dlanguage=Cpp -no-listener -visitor MXLexer.g4 MXParser.g4 -o "$OUTPUT_DIR"
rm "$OUTPUT_DIR/MXParserBaseVisitor.cpp"
rm "$OUTPUT_DIR/MXParserBaseVisitor.h"
# Return to the original directory
cd - > /dev/null

View File

@ -57,9 +57,17 @@ void mxlexerLexerInitialize() {
#endif
auto staticData = std::make_unique<MXLexerStaticData>(
std::vector<std::string>{
"INT", "VOID", "IF", "ELSE", "RETURN", "PLUS", "MINUS", "MULTIPLY",
"DIVIDE", "ASSIGN", "LPAREN", "RPAREN", "LBRACE", "RBRACE", "SEMICOLON",
"ID", "INT_LITERAL", "WS", "COMMENT"
"VOID", "BOOL", "INT", "STRING", "NEW", "CLASS", "NULL", "TRUE", "FALSE",
"THIS", "IF", "ELSE", "FOR", "WHILE", "BREAK", "CONTINUE", "RETURN",
"PLUS", "MINUS", "MULTIPLY", "DIVIDE", "MOD", "GN", "GE", "LN", "LE",
"NE", "EQ", "LAND", "LOR", "LNOT", "ARS", "ALS", "BAND", "BOR", "BXOR",
"BNOT", "ASSIGN", "SELF_PLUS", "SELF_MINUS", "DOT", "QUESTION_MARK",
"COLON", "LPAREN", "RPAREN", "LBRACKET", "RBRACKET", "LBRACE", "RBRACE",
"SEMICOLON", "COMMA", "FORMAT_STRING_WHOLE", "FORMAT_STRING_HEAD",
"FORMAT_STRING_TAIL", "FORMAT_STRING_BODY", "FORMAT_STR_INTERNAL",
"FORMAT_STR_BEG", "FORMAT_STR_END", "DOLLAR_IN_FORMAT_STR", "DOLLAR",
"ID", "INT_LITERAL", "STRING_LITERAL", "ESC", "WS", "LINE_COMMENT",
"BLOCK_COMMENT"
},
std::vector<std::string>{
"DEFAULT_TOKEN_CHANNEL", "HIDDEN"
@ -68,52 +76,160 @@ void mxlexerLexerInitialize() {
"DEFAULT_MODE"
},
std::vector<std::string>{
"", "'int'", "'void'", "'if'", "'else'", "'return'", "'+'", "'-'",
"'*'", "'/'", "'='", "'('", "')'", "'{'", "'}'", "';'"
"", "'void'", "'bool'", "'int'", "'string'", "'new'", "'class'", "'null'",
"'true'", "'false'", "'this'", "'if'", "'else'", "'for'", "'while'",
"'break'", "'continue'", "'return'", "'+'", "'-'", "'*'", "'/'", "'%'",
"'>='", "'>'", "'<='", "'<'", "'!='", "'=='", "'&&'", "'||'", "'!'",
"'>>'", "'<<'", "'&'", "'|'", "'^'", "'~'", "'='", "'++'", "'--'",
"'.'", "'\\u003F'", "':'", "'('", "')'", "'['", "']'", "'{'", "'}'",
"';'", "','"
},
std::vector<std::string>{
"", "INT", "VOID", "IF", "ELSE", "RETURN", "PLUS", "MINUS", "MULTIPLY",
"DIVIDE", "ASSIGN", "LPAREN", "RPAREN", "LBRACE", "RBRACE", "SEMICOLON",
"ID", "INT_LITERAL", "WS", "COMMENT"
"", "VOID", "BOOL", "INT", "STRING", "NEW", "CLASS", "NULL", "TRUE",
"FALSE", "THIS", "IF", "ELSE", "FOR", "WHILE", "BREAK", "CONTINUE",
"RETURN", "PLUS", "MINUS", "MULTIPLY", "DIVIDE", "MOD", "GN", "GE",
"LN", "LE", "NE", "EQ", "LAND", "LOR", "LNOT", "ARS", "ALS", "BAND",
"BOR", "BXOR", "BNOT", "ASSIGN", "SELF_PLUS", "SELF_MINUS", "DOT",
"QUESTION_MARK", "COLON", "LPAREN", "RPAREN", "LBRACKET", "RBRACKET",
"LBRACE", "RBRACE", "SEMICOLON", "COMMA", "FORMAT_STRING_WHOLE", "FORMAT_STRING_HEAD",
"FORMAT_STRING_TAIL", "FORMAT_STRING_BODY", "ID", "INT_LITERAL", "STRING_LITERAL",
"WS", "LINE_COMMENT", "BLOCK_COMMENT"
}
);
static const int32_t serializedATNSegment[] = {
4,0,19,113,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,
4,0,61,408,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,
6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,13,2,14,
7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,1,0,1,0,1,0,1,0,1,1,1,1,
1,1,1,1,1,1,1,2,1,2,1,2,1,3,1,3,1,3,1,3,1,3,1,4,1,4,1,4,1,4,1,4,1,4,1,
4,1,5,1,5,1,6,1,6,1,7,1,7,1,8,1,8,1,9,1,9,1,10,1,10,1,11,1,11,1,12,1,
12,1,13,1,13,1,14,1,14,1,15,1,15,5,15,86,8,15,10,15,12,15,89,9,15,1,16,
4,16,92,8,16,11,16,12,16,93,1,17,4,17,97,8,17,11,17,12,17,98,1,17,1,17,
1,18,1,18,1,18,1,18,5,18,107,8,18,10,18,12,18,110,9,18,1,18,1,18,0,0,
19,1,1,3,2,5,3,7,4,9,5,11,6,13,7,15,8,17,9,19,10,21,11,23,12,25,13,27,
14,29,15,31,16,33,17,35,18,37,19,1,0,5,3,0,65,90,95,95,97,122,4,0,48,
57,65,90,95,95,97,122,1,0,48,57,3,0,9,10,13,13,32,32,2,0,10,10,13,13,
116,0,1,1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0,9,1,0,0,0,0,11,
1,0,0,0,0,13,1,0,0,0,0,15,1,0,0,0,0,17,1,0,0,0,0,19,1,0,0,0,0,21,1,0,
0,0,0,23,1,0,0,0,0,25,1,0,0,0,0,27,1,0,0,0,0,29,1,0,0,0,0,31,1,0,0,0,
0,33,1,0,0,0,0,35,1,0,0,0,0,37,1,0,0,0,1,39,1,0,0,0,3,43,1,0,0,0,5,48,
1,0,0,0,7,51,1,0,0,0,9,56,1,0,0,0,11,63,1,0,0,0,13,65,1,0,0,0,15,67,1,
0,0,0,17,69,1,0,0,0,19,71,1,0,0,0,21,73,1,0,0,0,23,75,1,0,0,0,25,77,1,
0,0,0,27,79,1,0,0,0,29,81,1,0,0,0,31,83,1,0,0,0,33,91,1,0,0,0,35,96,1,
0,0,0,37,102,1,0,0,0,39,40,5,105,0,0,40,41,5,110,0,0,41,42,5,116,0,0,
42,2,1,0,0,0,43,44,5,118,0,0,44,45,5,111,0,0,45,46,5,105,0,0,46,47,5,
100,0,0,47,4,1,0,0,0,48,49,5,105,0,0,49,50,5,102,0,0,50,6,1,0,0,0,51,
52,5,101,0,0,52,53,5,108,0,0,53,54,5,115,0,0,54,55,5,101,0,0,55,8,1,0,
0,0,56,57,5,114,0,0,57,58,5,101,0,0,58,59,5,116,0,0,59,60,5,117,0,0,60,
61,5,114,0,0,61,62,5,110,0,0,62,10,1,0,0,0,63,64,5,43,0,0,64,12,1,0,0,
0,65,66,5,45,0,0,66,14,1,0,0,0,67,68,5,42,0,0,68,16,1,0,0,0,69,70,5,47,
0,0,70,18,1,0,0,0,71,72,5,61,0,0,72,20,1,0,0,0,73,74,5,40,0,0,74,22,1,
0,0,0,75,76,5,41,0,0,76,24,1,0,0,0,77,78,5,123,0,0,78,26,1,0,0,0,79,80,
5,125,0,0,80,28,1,0,0,0,81,82,5,59,0,0,82,30,1,0,0,0,83,87,7,0,0,0,84,
86,7,1,0,0,85,84,1,0,0,0,86,89,1,0,0,0,87,85,1,0,0,0,87,88,1,0,0,0,88,
32,1,0,0,0,89,87,1,0,0,0,90,92,7,2,0,0,91,90,1,0,0,0,92,93,1,0,0,0,93,
91,1,0,0,0,93,94,1,0,0,0,94,34,1,0,0,0,95,97,7,3,0,0,96,95,1,0,0,0,97,
98,1,0,0,0,98,96,1,0,0,0,98,99,1,0,0,0,99,100,1,0,0,0,100,101,6,17,0,
0,101,36,1,0,0,0,102,103,5,47,0,0,103,104,5,47,0,0,104,108,1,0,0,0,105,
107,8,4,0,0,106,105,1,0,0,0,107,110,1,0,0,0,108,106,1,0,0,0,108,109,1,
0,0,0,109,111,1,0,0,0,110,108,1,0,0,0,111,112,6,18,0,0,112,38,1,0,0,0,
5,0,87,93,98,108,1,6,0,0
7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2,20,7,20,2,21,
7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,7,26,2,27,7,27,2,28,
7,28,2,29,7,29,2,30,7,30,2,31,7,31,2,32,7,32,2,33,7,33,2,34,7,34,2,35,
7,35,2,36,7,36,2,37,7,37,2,38,7,38,2,39,7,39,2,40,7,40,2,41,7,41,2,42,
7,42,2,43,7,43,2,44,7,44,2,45,7,45,2,46,7,46,2,47,7,47,2,48,7,48,2,49,
7,49,2,50,7,50,2,51,7,51,2,52,7,52,2,53,7,53,2,54,7,54,2,55,7,55,2,56,
7,56,2,57,7,57,2,58,7,58,2,59,7,59,2,60,7,60,2,61,7,61,2,62,7,62,2,63,
7,63,2,64,7,64,2,65,7,65,2,66,7,66,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,
1,1,1,1,2,1,2,1,2,1,2,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,4,1,4,1,4,1,4,1,5,
1,5,1,5,1,5,1,5,1,5,1,6,1,6,1,6,1,6,1,6,1,7,1,7,1,7,1,7,1,7,1,8,1,8,1,
8,1,8,1,8,1,8,1,9,1,9,1,9,1,9,1,9,1,10,1,10,1,10,1,11,1,11,1,11,1,11,
1,11,1,12,1,12,1,12,1,12,1,13,1,13,1,13,1,13,1,13,1,13,1,14,1,14,1,14,
1,14,1,14,1,14,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,16,1,16,
1,16,1,16,1,16,1,16,1,16,1,17,1,17,1,18,1,18,1,19,1,19,1,20,1,20,1,21,
1,21,1,22,1,22,1,22,1,23,1,23,1,24,1,24,1,24,1,25,1,25,1,26,1,26,1,26,
1,27,1,27,1,27,1,28,1,28,1,28,1,29,1,29,1,29,1,30,1,30,1,31,1,31,1,31,
1,32,1,32,1,32,1,33,1,33,1,34,1,34,1,35,1,35,1,36,1,36,1,37,1,37,1,38,
1,38,1,38,1,39,1,39,1,39,1,40,1,40,1,41,1,41,1,42,1,42,1,43,1,43,1,44,
1,44,1,45,1,45,1,46,1,46,1,47,1,47,1,48,1,48,1,49,1,49,1,50,1,50,1,51,
1,51,1,51,1,51,1,51,1,51,1,52,1,52,1,52,1,52,1,52,1,52,1,53,1,53,1,53,
1,53,1,54,1,54,1,54,1,54,1,55,1,55,1,55,5,55,329,8,55,10,55,12,55,332,
9,55,1,56,1,56,1,56,1,57,1,57,1,58,1,58,1,58,1,59,1,59,1,60,1,60,5,60,
346,8,60,10,60,12,60,349,9,60,1,61,4,61,352,8,61,11,61,12,61,353,1,62,
1,62,1,62,5,62,359,8,62,10,62,12,62,362,9,62,1,62,1,62,1,63,1,63,1,63,
1,63,3,63,370,8,63,1,64,4,64,373,8,64,11,64,12,64,374,1,64,1,64,1,65,
1,65,1,65,1,65,5,65,383,8,65,10,65,12,65,386,9,65,1,65,3,65,389,8,65,
1,65,1,65,1,65,1,65,1,66,1,66,1,66,1,66,5,66,399,8,66,10,66,12,66,402,
9,66,1,66,1,66,1,66,1,66,1,66,4,330,360,384,400,0,67,1,1,3,2,5,3,7,4,
9,5,11,6,13,7,15,8,17,9,19,10,21,11,23,12,25,13,27,14,29,15,31,16,33,
17,35,18,37,19,39,20,41,21,43,22,45,23,47,24,49,25,51,26,53,27,55,28,
57,29,59,30,61,31,63,32,65,33,67,34,69,35,71,36,73,37,75,38,77,39,79,
40,81,41,83,42,85,43,87,44,89,45,91,46,93,47,95,48,97,49,99,50,101,51,
103,52,105,53,107,54,109,55,111,0,113,0,115,0,117,0,119,0,121,56,123,
57,125,58,127,0,129,59,131,60,133,61,1,0,6,3,0,34,34,36,36,92,92,2,0,
65,90,97,122,4,0,48,57,65,90,95,95,97,122,1,0,48,57,2,0,34,34,92,92,3,
0,9,10,13,13,32,32,413,0,1,1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,
0,0,9,1,0,0,0,0,11,1,0,0,0,0,13,1,0,0,0,0,15,1,0,0,0,0,17,1,0,0,0,0,19,
1,0,0,0,0,21,1,0,0,0,0,23,1,0,0,0,0,25,1,0,0,0,0,27,1,0,0,0,0,29,1,0,
0,0,0,31,1,0,0,0,0,33,1,0,0,0,0,35,1,0,0,0,0,37,1,0,0,0,0,39,1,0,0,0,
0,41,1,0,0,0,0,43,1,0,0,0,0,45,1,0,0,0,0,47,1,0,0,0,0,49,1,0,0,0,0,51,
1,0,0,0,0,53,1,0,0,0,0,55,1,0,0,0,0,57,1,0,0,0,0,59,1,0,0,0,0,61,1,0,
0,0,0,63,1,0,0,0,0,65,1,0,0,0,0,67,1,0,0,0,0,69,1,0,0,0,0,71,1,0,0,0,
0,73,1,0,0,0,0,75,1,0,0,0,0,77,1,0,0,0,0,79,1,0,0,0,0,81,1,0,0,0,0,83,
1,0,0,0,0,85,1,0,0,0,0,87,1,0,0,0,0,89,1,0,0,0,0,91,1,0,0,0,0,93,1,0,
0,0,0,95,1,0,0,0,0,97,1,0,0,0,0,99,1,0,0,0,0,101,1,0,0,0,0,103,1,0,0,
0,0,105,1,0,0,0,0,107,1,0,0,0,0,109,1,0,0,0,0,121,1,0,0,0,0,123,1,0,0,
0,0,125,1,0,0,0,0,129,1,0,0,0,0,131,1,0,0,0,0,133,1,0,0,0,1,135,1,0,0,
0,3,140,1,0,0,0,5,145,1,0,0,0,7,149,1,0,0,0,9,156,1,0,0,0,11,160,1,0,
0,0,13,166,1,0,0,0,15,171,1,0,0,0,17,176,1,0,0,0,19,182,1,0,0,0,21,187,
1,0,0,0,23,190,1,0,0,0,25,195,1,0,0,0,27,199,1,0,0,0,29,205,1,0,0,0,31,
211,1,0,0,0,33,220,1,0,0,0,35,227,1,0,0,0,37,229,1,0,0,0,39,231,1,0,0,
0,41,233,1,0,0,0,43,235,1,0,0,0,45,237,1,0,0,0,47,240,1,0,0,0,49,242,
1,0,0,0,51,245,1,0,0,0,53,247,1,0,0,0,55,250,1,0,0,0,57,253,1,0,0,0,59,
256,1,0,0,0,61,259,1,0,0,0,63,261,1,0,0,0,65,264,1,0,0,0,67,267,1,0,0,
0,69,269,1,0,0,0,71,271,1,0,0,0,73,273,1,0,0,0,75,275,1,0,0,0,77,277,
1,0,0,0,79,280,1,0,0,0,81,283,1,0,0,0,83,285,1,0,0,0,85,287,1,0,0,0,87,
289,1,0,0,0,89,291,1,0,0,0,91,293,1,0,0,0,93,295,1,0,0,0,95,297,1,0,0,
0,97,299,1,0,0,0,99,301,1,0,0,0,101,303,1,0,0,0,103,305,1,0,0,0,105,311,
1,0,0,0,107,317,1,0,0,0,109,321,1,0,0,0,111,330,1,0,0,0,113,333,1,0,0,
0,115,336,1,0,0,0,117,338,1,0,0,0,119,341,1,0,0,0,121,343,1,0,0,0,123,
351,1,0,0,0,125,355,1,0,0,0,127,369,1,0,0,0,129,372,1,0,0,0,131,378,1,
0,0,0,133,394,1,0,0,0,135,136,5,118,0,0,136,137,5,111,0,0,137,138,5,105,
0,0,138,139,5,100,0,0,139,2,1,0,0,0,140,141,5,98,0,0,141,142,5,111,0,
0,142,143,5,111,0,0,143,144,5,108,0,0,144,4,1,0,0,0,145,146,5,105,0,0,
146,147,5,110,0,0,147,148,5,116,0,0,148,6,1,0,0,0,149,150,5,115,0,0,150,
151,5,116,0,0,151,152,5,114,0,0,152,153,5,105,0,0,153,154,5,110,0,0,154,
155,5,103,0,0,155,8,1,0,0,0,156,157,5,110,0,0,157,158,5,101,0,0,158,159,
5,119,0,0,159,10,1,0,0,0,160,161,5,99,0,0,161,162,5,108,0,0,162,163,5,
97,0,0,163,164,5,115,0,0,164,165,5,115,0,0,165,12,1,0,0,0,166,167,5,110,
0,0,167,168,5,117,0,0,168,169,5,108,0,0,169,170,5,108,0,0,170,14,1,0,
0,0,171,172,5,116,0,0,172,173,5,114,0,0,173,174,5,117,0,0,174,175,5,101,
0,0,175,16,1,0,0,0,176,177,5,102,0,0,177,178,5,97,0,0,178,179,5,108,0,
0,179,180,5,115,0,0,180,181,5,101,0,0,181,18,1,0,0,0,182,183,5,116,0,
0,183,184,5,104,0,0,184,185,5,105,0,0,185,186,5,115,0,0,186,20,1,0,0,
0,187,188,5,105,0,0,188,189,5,102,0,0,189,22,1,0,0,0,190,191,5,101,0,
0,191,192,5,108,0,0,192,193,5,115,0,0,193,194,5,101,0,0,194,24,1,0,0,
0,195,196,5,102,0,0,196,197,5,111,0,0,197,198,5,114,0,0,198,26,1,0,0,
0,199,200,5,119,0,0,200,201,5,104,0,0,201,202,5,105,0,0,202,203,5,108,
0,0,203,204,5,101,0,0,204,28,1,0,0,0,205,206,5,98,0,0,206,207,5,114,0,
0,207,208,5,101,0,0,208,209,5,97,0,0,209,210,5,107,0,0,210,30,1,0,0,0,
211,212,5,99,0,0,212,213,5,111,0,0,213,214,5,110,0,0,214,215,5,116,0,
0,215,216,5,105,0,0,216,217,5,110,0,0,217,218,5,117,0,0,218,219,5,101,
0,0,219,32,1,0,0,0,220,221,5,114,0,0,221,222,5,101,0,0,222,223,5,116,
0,0,223,224,5,117,0,0,224,225,5,114,0,0,225,226,5,110,0,0,226,34,1,0,
0,0,227,228,5,43,0,0,228,36,1,0,0,0,229,230,5,45,0,0,230,38,1,0,0,0,231,
232,5,42,0,0,232,40,1,0,0,0,233,234,5,47,0,0,234,42,1,0,0,0,235,236,5,
37,0,0,236,44,1,0,0,0,237,238,5,62,0,0,238,239,5,61,0,0,239,46,1,0,0,
0,240,241,5,62,0,0,241,48,1,0,0,0,242,243,5,60,0,0,243,244,5,61,0,0,244,
50,1,0,0,0,245,246,5,60,0,0,246,52,1,0,0,0,247,248,5,33,0,0,248,249,5,
61,0,0,249,54,1,0,0,0,250,251,5,61,0,0,251,252,5,61,0,0,252,56,1,0,0,
0,253,254,5,38,0,0,254,255,5,38,0,0,255,58,1,0,0,0,256,257,5,124,0,0,
257,258,5,124,0,0,258,60,1,0,0,0,259,260,5,33,0,0,260,62,1,0,0,0,261,
262,5,62,0,0,262,263,5,62,0,0,263,64,1,0,0,0,264,265,5,60,0,0,265,266,
5,60,0,0,266,66,1,0,0,0,267,268,5,38,0,0,268,68,1,0,0,0,269,270,5,124,
0,0,270,70,1,0,0,0,271,272,5,94,0,0,272,72,1,0,0,0,273,274,5,126,0,0,
274,74,1,0,0,0,275,276,5,61,0,0,276,76,1,0,0,0,277,278,5,43,0,0,278,279,
5,43,0,0,279,78,1,0,0,0,280,281,5,45,0,0,281,282,5,45,0,0,282,80,1,0,
0,0,283,284,5,46,0,0,284,82,1,0,0,0,285,286,5,63,0,0,286,84,1,0,0,0,287,
288,5,58,0,0,288,86,1,0,0,0,289,290,5,40,0,0,290,88,1,0,0,0,291,292,5,
41,0,0,292,90,1,0,0,0,293,294,5,91,0,0,294,92,1,0,0,0,295,296,5,93,0,
0,296,94,1,0,0,0,297,298,5,123,0,0,298,96,1,0,0,0,299,300,5,125,0,0,300,
98,1,0,0,0,301,302,5,59,0,0,302,100,1,0,0,0,303,304,5,44,0,0,304,102,
1,0,0,0,305,306,5,102,0,0,306,307,5,34,0,0,307,308,1,0,0,0,308,309,3,
111,55,0,309,310,5,34,0,0,310,104,1,0,0,0,311,312,5,102,0,0,312,313,5,
34,0,0,313,314,1,0,0,0,314,315,3,111,55,0,315,316,5,36,0,0,316,106,1,
0,0,0,317,318,5,36,0,0,318,319,3,111,55,0,319,320,5,34,0,0,320,108,1,
0,0,0,321,322,5,36,0,0,322,323,3,111,55,0,323,324,5,36,0,0,324,110,1,
0,0,0,325,329,3,117,58,0,326,329,3,127,63,0,327,329,8,0,0,0,328,325,1,
0,0,0,328,326,1,0,0,0,328,327,1,0,0,0,329,332,1,0,0,0,330,331,1,0,0,0,
330,328,1,0,0,0,331,112,1,0,0,0,332,330,1,0,0,0,333,334,5,102,0,0,334,
335,5,34,0,0,335,114,1,0,0,0,336,337,5,34,0,0,337,116,1,0,0,0,338,339,
5,36,0,0,339,340,5,36,0,0,340,118,1,0,0,0,341,342,5,36,0,0,342,120,1,
0,0,0,343,347,7,1,0,0,344,346,7,2,0,0,345,344,1,0,0,0,346,349,1,0,0,0,
347,345,1,0,0,0,347,348,1,0,0,0,348,122,1,0,0,0,349,347,1,0,0,0,350,352,
7,3,0,0,351,350,1,0,0,0,352,353,1,0,0,0,353,351,1,0,0,0,353,354,1,0,0,
0,354,124,1,0,0,0,355,360,5,34,0,0,356,359,3,127,63,0,357,359,8,4,0,0,
358,356,1,0,0,0,358,357,1,0,0,0,359,362,1,0,0,0,360,361,1,0,0,0,360,358,
1,0,0,0,361,363,1,0,0,0,362,360,1,0,0,0,363,364,5,34,0,0,364,126,1,0,
0,0,365,366,5,92,0,0,366,370,5,34,0,0,367,368,5,92,0,0,368,370,5,92,0,
0,369,365,1,0,0,0,369,367,1,0,0,0,370,128,1,0,0,0,371,373,7,5,0,0,372,
371,1,0,0,0,373,374,1,0,0,0,374,372,1,0,0,0,374,375,1,0,0,0,375,376,1,
0,0,0,376,377,6,64,0,0,377,130,1,0,0,0,378,379,5,47,0,0,379,380,5,47,
0,0,380,384,1,0,0,0,381,383,9,0,0,0,382,381,1,0,0,0,383,386,1,0,0,0,384,
385,1,0,0,0,384,382,1,0,0,0,385,388,1,0,0,0,386,384,1,0,0,0,387,389,5,
13,0,0,388,387,1,0,0,0,388,389,1,0,0,0,389,390,1,0,0,0,390,391,5,10,0,
0,391,392,1,0,0,0,392,393,6,65,0,0,393,132,1,0,0,0,394,395,5,47,0,0,395,
396,5,42,0,0,396,400,1,0,0,0,397,399,9,0,0,0,398,397,1,0,0,0,399,402,
1,0,0,0,400,401,1,0,0,0,400,398,1,0,0,0,401,403,1,0,0,0,402,400,1,0,0,
0,403,404,5,42,0,0,404,405,5,47,0,0,405,406,1,0,0,0,406,407,6,66,0,0,
407,134,1,0,0,0,12,0,328,330,347,353,358,360,369,374,384,388,400,1,6,
0,0
};
staticData->serializedATN = antlr4::atn::SerializedATNView(serializedATNSegment, sizeof(serializedATNSegment) / sizeof(serializedATNSegment[0]));

View File

@ -12,9 +12,17 @@
class MXLexer : public antlr4::Lexer {
public:
enum {
INT = 1, VOID = 2, IF = 3, ELSE = 4, RETURN = 5, PLUS = 6, MINUS = 7,
MULTIPLY = 8, DIVIDE = 9, ASSIGN = 10, LPAREN = 11, RPAREN = 12, LBRACE = 13,
RBRACE = 14, SEMICOLON = 15, ID = 16, INT_LITERAL = 17, WS = 18, COMMENT = 19
VOID = 1, BOOL = 2, INT = 3, STRING = 4, NEW = 5, CLASS = 6, NULL_ = 7,
TRUE = 8, FALSE = 9, THIS = 10, IF = 11, ELSE = 12, FOR = 13, WHILE = 14,
BREAK = 15, CONTINUE = 16, RETURN = 17, PLUS = 18, MINUS = 19, MULTIPLY = 20,
DIVIDE = 21, MOD = 22, GN = 23, GE = 24, LN = 25, LE = 26, NE = 27,
EQ = 28, LAND = 29, LOR = 30, LNOT = 31, ARS = 32, ALS = 33, BAND = 34,
BOR = 35, BXOR = 36, BNOT = 37, ASSIGN = 38, SELF_PLUS = 39, SELF_MINUS = 40,
DOT = 41, QUESTION_MARK = 42, COLON = 43, LPAREN = 44, RPAREN = 45,
LBRACKET = 46, RBRACKET = 47, LBRACE = 48, RBRACE = 49, SEMICOLON = 50,
COMMA = 51, FORMAT_STRING_WHOLE = 52, FORMAT_STRING_HEAD = 53, FORMAT_STRING_TAIL = 54,
FORMAT_STRING_BODY = 55, ID = 56, INT_LITERAL = 57, STRING_LITERAL = 58,
WS = 59, LINE_COMMENT = 60, BLOCK_COMMENT = 61
};
explicit MXLexer(antlr4::CharStream *input);

File diff suppressed because one or more lines are too long

View File

@ -1,34 +1,112 @@
INT=1
VOID=2
IF=3
ELSE=4
RETURN=5
PLUS=6
MINUS=7
MULTIPLY=8
DIVIDE=9
ASSIGN=10
LPAREN=11
RPAREN=12
LBRACE=13
RBRACE=14
SEMICOLON=15
ID=16
INT_LITERAL=17
WS=18
COMMENT=19
'int'=1
'void'=2
'if'=3
'else'=4
'return'=5
'+'=6
'-'=7
'*'=8
'/'=9
'='=10
'('=11
')'=12
'{'=13
'}'=14
';'=15
VOID=1
BOOL=2
INT=3
STRING=4
NEW=5
CLASS=6
NULL=7
TRUE=8
FALSE=9
THIS=10
IF=11
ELSE=12
FOR=13
WHILE=14
BREAK=15
CONTINUE=16
RETURN=17
PLUS=18
MINUS=19
MULTIPLY=20
DIVIDE=21
MOD=22
GN=23
GE=24
LN=25
LE=26
NE=27
EQ=28
LAND=29
LOR=30
LNOT=31
ARS=32
ALS=33
BAND=34
BOR=35
BXOR=36
BNOT=37
ASSIGN=38
SELF_PLUS=39
SELF_MINUS=40
DOT=41
QUESTION_MARK=42
COLON=43
LPAREN=44
RPAREN=45
LBRACKET=46
RBRACKET=47
LBRACE=48
RBRACE=49
SEMICOLON=50
COMMA=51
FORMAT_STRING_WHOLE=52
FORMAT_STRING_HEAD=53
FORMAT_STRING_TAIL=54
FORMAT_STRING_BODY=55
ID=56
INT_LITERAL=57
STRING_LITERAL=58
WS=59
LINE_COMMENT=60
BLOCK_COMMENT=61
'void'=1
'bool'=2
'int'=3
'string'=4
'new'=5
'class'=6
'null'=7
'true'=8
'false'=9
'this'=10
'if'=11
'else'=12
'for'=13
'while'=14
'break'=15
'continue'=16
'return'=17
'+'=18
'-'=19
'*'=20
'/'=21
'%'=22
'>='=23
'>'=24
'<='=25
'<'=26
'!='=27
'=='=28
'&&'=29
'||'=30
'!'=31
'>>'=32
'<<'=33
'&'=34
'|'=35
'^'=36
'~'=37
'='=38
'++'=39
'--'=40
'.'=41
'?'=42
':'=43
'('=44
')'=45
'['=46
']'=47
'{'=48
'}'=49
';'=50
','=51

File diff suppressed because it is too large Load Diff

View File

@ -12,14 +12,24 @@
class MXParser : public antlr4::Parser {
public:
enum {
INT = 1, VOID = 2, IF = 3, ELSE = 4, RETURN = 5, PLUS = 6, MINUS = 7,
MULTIPLY = 8, DIVIDE = 9, ASSIGN = 10, LPAREN = 11, RPAREN = 12, LBRACE = 13,
RBRACE = 14, SEMICOLON = 15, ID = 16, INT_LITERAL = 17, WS = 18, COMMENT = 19
VOID = 1, BOOL = 2, INT = 3, STRING = 4, NEW = 5, CLASS = 6, NULL_ = 7,
TRUE = 8, FALSE = 9, THIS = 10, IF = 11, ELSE = 12, FOR = 13, WHILE = 14,
BREAK = 15, CONTINUE = 16, RETURN = 17, PLUS = 18, MINUS = 19, MULTIPLY = 20,
DIVIDE = 21, MOD = 22, GN = 23, GE = 24, LN = 25, LE = 26, NE = 27,
EQ = 28, LAND = 29, LOR = 30, LNOT = 31, ARS = 32, ALS = 33, BAND = 34,
BOR = 35, BXOR = 36, BNOT = 37, ASSIGN = 38, SELF_PLUS = 39, SELF_MINUS = 40,
DOT = 41, QUESTION_MARK = 42, COLON = 43, LPAREN = 44, RPAREN = 45,
LBRACKET = 46, RBRACKET = 47, LBRACE = 48, RBRACE = 49, SEMICOLON = 50,
COMMA = 51, FORMAT_STRING_WHOLE = 52, FORMAT_STRING_HEAD = 53, FORMAT_STRING_TAIL = 54,
FORMAT_STRING_BODY = 55, ID = 56, INT_LITERAL = 57, STRING_LITERAL = 58,
WS = 59, LINE_COMMENT = 60, BLOCK_COMMENT = 61
};
enum {
RuleMxprog = 0, RuleFunction = 1, RuleType = 2, RuleBlock = 3, RuleStatement = 4,
RuleExpression = 5, RuleReturnStmt = 6, RuleIfStmt = 7
RuleMxprog = 0, RuleFunction_def = 1, RuleClass_def = 2, RuleClass_var_def = 3,
RuleClass_constructor = 4, RuleSuite = 5, RuleStatement = 6, RuleDefine_statement = 7,
RuleExpr = 8, RuleBasic_expr = 9, RuleFormatted_string = 10, RuleConstant = 11,
RuleType = 12
};
explicit MXParser(antlr4::TokenStream *input);
@ -40,21 +50,30 @@ public:
class MxprogContext;
class FunctionContext;
class TypeContext;
class BlockContext;
class Function_defContext;
class Class_defContext;
class Class_var_defContext;
class Class_constructorContext;
class SuiteContext;
class StatementContext;
class ExpressionContext;
class ReturnStmtContext;
class IfStmtContext;
class Define_statementContext;
class ExprContext;
class Basic_exprContext;
class Formatted_stringContext;
class ConstantContext;
class TypeContext;
class MxprogContext : public antlr4::ParserRuleContext {
public:
MxprogContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
antlr4::tree::TerminalNode *EOF();
std::vector<FunctionContext *> function();
FunctionContext* function(size_t i);
std::vector<Class_defContext *> class_def();
Class_defContext* class_def(size_t i);
std::vector<Define_statementContext *> define_statement();
Define_statementContext* define_statement(size_t i);
std::vector<Function_defContext *> function_def();
Function_defContext* function_def(size_t i);
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
@ -63,40 +82,91 @@ public:
MxprogContext* mxprog();
class FunctionContext : public antlr4::ParserRuleContext {
class Function_defContext : public antlr4::ParserRuleContext {
public:
FunctionContext(antlr4::ParserRuleContext *parent, size_t invokingState);
Function_defContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
std::vector<TypeContext *> type();
TypeContext* type(size_t i);
std::vector<antlr4::tree::TerminalNode *> ID();
antlr4::tree::TerminalNode* ID(size_t i);
antlr4::tree::TerminalNode *LPAREN();
antlr4::tree::TerminalNode *RPAREN();
SuiteContext *suite();
std::vector<antlr4::tree::TerminalNode *> COMMA();
antlr4::tree::TerminalNode* COMMA(size_t i);
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
Function_defContext* function_def();
class Class_defContext : public antlr4::ParserRuleContext {
public:
Class_defContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
antlr4::tree::TerminalNode *CLASS();
antlr4::tree::TerminalNode *ID();
antlr4::tree::TerminalNode *LBRACE();
antlr4::tree::TerminalNode *RBRACE();
antlr4::tree::TerminalNode *SEMICOLON();
std::vector<Class_var_defContext *> class_var_def();
Class_var_defContext* class_var_def(size_t i);
std::vector<Class_constructorContext *> class_constructor();
Class_constructorContext* class_constructor(size_t i);
std::vector<Function_defContext *> function_def();
Function_defContext* function_def(size_t i);
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
Class_defContext* class_def();
class Class_var_defContext : public antlr4::ParserRuleContext {
public:
Class_var_defContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
TypeContext *type();
std::vector<antlr4::tree::TerminalNode *> ID();
antlr4::tree::TerminalNode* ID(size_t i);
antlr4::tree::TerminalNode *SEMICOLON();
std::vector<antlr4::tree::TerminalNode *> LBRACKET();
antlr4::tree::TerminalNode* LBRACKET(size_t i);
std::vector<antlr4::tree::TerminalNode *> RBRACKET();
antlr4::tree::TerminalNode* RBRACKET(size_t i);
std::vector<antlr4::tree::TerminalNode *> COMMA();
antlr4::tree::TerminalNode* COMMA(size_t i);
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
Class_var_defContext* class_var_def();
class Class_constructorContext : public antlr4::ParserRuleContext {
public:
Class_constructorContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
antlr4::tree::TerminalNode *ID();
antlr4::tree::TerminalNode *LPAREN();
antlr4::tree::TerminalNode *RPAREN();
BlockContext *block();
SuiteContext *suite();
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
FunctionContext* function();
Class_constructorContext* class_constructor();
class TypeContext : public antlr4::ParserRuleContext {
class SuiteContext : public antlr4::ParserRuleContext {
public:
TypeContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
antlr4::tree::TerminalNode *INT();
antlr4::tree::TerminalNode *VOID();
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
TypeContext* type();
class BlockContext : public antlr4::ParserRuleContext {
public:
BlockContext(antlr4::ParserRuleContext *parent, size_t invokingState);
SuiteContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
antlr4::tree::TerminalNode *LBRACE();
antlr4::tree::TerminalNode *RBRACE();
@ -108,16 +178,30 @@ public:
};
BlockContext* block();
SuiteContext* suite();
class StatementContext : public antlr4::ParserRuleContext {
public:
StatementContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
ExpressionContext *expression();
antlr4::tree::TerminalNode *SEMICOLON();
ReturnStmtContext *returnStmt();
IfStmtContext *ifStmt();
std::vector<antlr4::tree::TerminalNode *> SEMICOLON();
antlr4::tree::TerminalNode* SEMICOLON(size_t i);
std::vector<Define_statementContext *> define_statement();
Define_statementContext* define_statement(size_t i);
std::vector<ExprContext *> expr();
ExprContext* expr(size_t i);
antlr4::tree::TerminalNode *IF();
antlr4::tree::TerminalNode *LPAREN();
antlr4::tree::TerminalNode *RPAREN();
std::vector<StatementContext *> statement();
StatementContext* statement(size_t i);
antlr4::tree::TerminalNode *ELSE();
antlr4::tree::TerminalNode *WHILE();
antlr4::tree::TerminalNode *FOR();
antlr4::tree::TerminalNode *BREAK();
antlr4::tree::TerminalNode *CONTINUE();
antlr4::tree::TerminalNode *RETURN();
SuiteContext *suite();
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
@ -126,66 +210,169 @@ public:
StatementContext* statement();
class ExpressionContext : public antlr4::ParserRuleContext {
class Define_statementContext : public antlr4::ParserRuleContext {
public:
ExpressionContext(antlr4::ParserRuleContext *parent, size_t invokingState);
Define_statementContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
antlr4::tree::TerminalNode *INT_LITERAL();
antlr4::tree::TerminalNode *ID();
TypeContext *type();
std::vector<antlr4::tree::TerminalNode *> ID();
antlr4::tree::TerminalNode* ID(size_t i);
antlr4::tree::TerminalNode *SEMICOLON();
std::vector<antlr4::tree::TerminalNode *> LBRACKET();
antlr4::tree::TerminalNode* LBRACKET(size_t i);
std::vector<antlr4::tree::TerminalNode *> RBRACKET();
antlr4::tree::TerminalNode* RBRACKET(size_t i);
std::vector<antlr4::tree::TerminalNode *> ASSIGN();
antlr4::tree::TerminalNode* ASSIGN(size_t i);
std::vector<ExprContext *> expr();
ExprContext* expr(size_t i);
std::vector<antlr4::tree::TerminalNode *> COMMA();
antlr4::tree::TerminalNode* COMMA(size_t i);
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
Define_statementContext* define_statement();
class ExprContext : public antlr4::ParserRuleContext {
public:
ExprContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
Basic_exprContext *basic_expr();
antlr4::tree::TerminalNode *LPAREN();
std::vector<ExpressionContext *> expression();
ExpressionContext* expression(size_t i);
std::vector<ExprContext *> expr();
ExprContext* expr(size_t i);
antlr4::tree::TerminalNode *RPAREN();
antlr4::tree::TerminalNode *PLUS();
antlr4::tree::TerminalNode *SELF_PLUS();
antlr4::tree::TerminalNode *SELF_MINUS();
antlr4::tree::TerminalNode *MINUS();
antlr4::tree::TerminalNode *LNOT();
antlr4::tree::TerminalNode *BNOT();
antlr4::tree::TerminalNode *NEW();
antlr4::tree::TerminalNode *ID();
std::vector<antlr4::tree::TerminalNode *> LBRACKET();
antlr4::tree::TerminalNode* LBRACKET(size_t i);
std::vector<antlr4::tree::TerminalNode *> RBRACKET();
antlr4::tree::TerminalNode* RBRACKET(size_t i);
ConstantContext *constant();
antlr4::tree::TerminalNode *MULTIPLY();
antlr4::tree::TerminalNode *DIVIDE();
antlr4::tree::TerminalNode *MOD();
antlr4::tree::TerminalNode *PLUS();
antlr4::tree::TerminalNode *ARS();
antlr4::tree::TerminalNode *ALS();
antlr4::tree::TerminalNode *GN();
antlr4::tree::TerminalNode *GE();
antlr4::tree::TerminalNode *LN();
antlr4::tree::TerminalNode *LE();
antlr4::tree::TerminalNode *NE();
antlr4::tree::TerminalNode *EQ();
antlr4::tree::TerminalNode *BAND();
antlr4::tree::TerminalNode *BXOR();
antlr4::tree::TerminalNode *BOR();
antlr4::tree::TerminalNode *LAND();
antlr4::tree::TerminalNode *LOR();
antlr4::tree::TerminalNode *QUESTION_MARK();
antlr4::tree::TerminalNode *COLON();
antlr4::tree::TerminalNode *ASSIGN();
antlr4::tree::TerminalNode *DOT();
std::vector<antlr4::tree::TerminalNode *> COMMA();
antlr4::tree::TerminalNode* COMMA(size_t i);
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
ExpressionContext* expression();
ExpressionContext* expression(int precedence);
class ReturnStmtContext : public antlr4::ParserRuleContext {
ExprContext* expr();
ExprContext* expr(int precedence);
class Basic_exprContext : public antlr4::ParserRuleContext {
public:
ReturnStmtContext(antlr4::ParserRuleContext *parent, size_t invokingState);
Basic_exprContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
antlr4::tree::TerminalNode *RETURN();
antlr4::tree::TerminalNode *SEMICOLON();
ExpressionContext *expression();
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
ReturnStmtContext* returnStmt();
class IfStmtContext : public antlr4::ParserRuleContext {
public:
IfStmtContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
antlr4::tree::TerminalNode *IF();
antlr4::tree::TerminalNode *THIS();
antlr4::tree::TerminalNode *ID();
antlr4::tree::TerminalNode *LPAREN();
ExpressionContext *expression();
antlr4::tree::TerminalNode *RPAREN();
std::vector<StatementContext *> statement();
StatementContext* statement(size_t i);
antlr4::tree::TerminalNode *ELSE();
std::vector<ExprContext *> expr();
ExprContext* expr(size_t i);
std::vector<antlr4::tree::TerminalNode *> COMMA();
antlr4::tree::TerminalNode* COMMA(size_t i);
Formatted_stringContext *formatted_string();
ConstantContext *constant();
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
IfStmtContext* ifStmt();
Basic_exprContext* basic_expr();
class Formatted_stringContext : public antlr4::ParserRuleContext {
public:
Formatted_stringContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
antlr4::tree::TerminalNode *FORMAT_STRING_WHOLE();
antlr4::tree::TerminalNode *FORMAT_STRING_HEAD();
std::vector<ExprContext *> expr();
ExprContext* expr(size_t i);
antlr4::tree::TerminalNode *FORMAT_STRING_TAIL();
std::vector<antlr4::tree::TerminalNode *> FORMAT_STRING_BODY();
antlr4::tree::TerminalNode* FORMAT_STRING_BODY(size_t i);
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
Formatted_stringContext* formatted_string();
class ConstantContext : public antlr4::ParserRuleContext {
public:
ConstantContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
antlr4::tree::TerminalNode *TRUE();
antlr4::tree::TerminalNode *FALSE();
antlr4::tree::TerminalNode *INT_LITERAL();
antlr4::tree::TerminalNode *STRING_LITERAL();
antlr4::tree::TerminalNode *NULL_();
antlr4::tree::TerminalNode *LBRACE();
antlr4::tree::TerminalNode *RBRACE();
std::vector<ConstantContext *> constant();
ConstantContext* constant(size_t i);
std::vector<antlr4::tree::TerminalNode *> COMMA();
antlr4::tree::TerminalNode* COMMA(size_t i);
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
ConstantContext* constant();
class TypeContext : public antlr4::ParserRuleContext {
public:
TypeContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
antlr4::tree::TerminalNode *INT();
antlr4::tree::TerminalNode *BOOL();
antlr4::tree::TerminalNode *STRING();
antlr4::tree::TerminalNode *VOID();
antlr4::tree::TerminalNode *ID();
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
TypeContext* type();
bool sempred(antlr4::RuleContext *_localctx, size_t ruleIndex, size_t predicateIndex) override;
bool expressionSempred(ExpressionContext *_localctx, size_t predicateIndex);
bool exprSempred(ExprContext *_localctx, size_t predicateIndex);
// By default the static state used to implement the parser is lazily initialized during the first
// call to the constructor. You can call this function if you wish to initialize the static state

File diff suppressed because one or more lines are too long

View File

@ -1,34 +1,112 @@
INT=1
VOID=2
IF=3
ELSE=4
RETURN=5
PLUS=6
MINUS=7
MULTIPLY=8
DIVIDE=9
ASSIGN=10
LPAREN=11
RPAREN=12
LBRACE=13
RBRACE=14
SEMICOLON=15
ID=16
INT_LITERAL=17
WS=18
COMMENT=19
'int'=1
'void'=2
'if'=3
'else'=4
'return'=5
'+'=6
'-'=7
'*'=8
'/'=9
'='=10
'('=11
')'=12
'{'=13
'}'=14
';'=15
VOID=1
BOOL=2
INT=3
STRING=4
NEW=5
CLASS=6
NULL=7
TRUE=8
FALSE=9
THIS=10
IF=11
ELSE=12
FOR=13
WHILE=14
BREAK=15
CONTINUE=16
RETURN=17
PLUS=18
MINUS=19
MULTIPLY=20
DIVIDE=21
MOD=22
GN=23
GE=24
LN=25
LE=26
NE=27
EQ=28
LAND=29
LOR=30
LNOT=31
ARS=32
ALS=33
BAND=34
BOR=35
BXOR=36
BNOT=37
ASSIGN=38
SELF_PLUS=39
SELF_MINUS=40
DOT=41
QUESTION_MARK=42
COLON=43
LPAREN=44
RPAREN=45
LBRACKET=46
RBRACKET=47
LBRACE=48
RBRACE=49
SEMICOLON=50
COMMA=51
FORMAT_STRING_WHOLE=52
FORMAT_STRING_HEAD=53
FORMAT_STRING_TAIL=54
FORMAT_STRING_BODY=55
ID=56
INT_LITERAL=57
STRING_LITERAL=58
WS=59
LINE_COMMENT=60
BLOCK_COMMENT=61
'void'=1
'bool'=2
'int'=3
'string'=4
'new'=5
'class'=6
'null'=7
'true'=8
'false'=9
'this'=10
'if'=11
'else'=12
'for'=13
'while'=14
'break'=15
'continue'=16
'return'=17
'+'=18
'-'=19
'*'=20
'/'=21
'%'=22
'>='=23
'>'=24
'<='=25
'<'=26
'!='=27
'=='=28
'&&'=29
'||'=30
'!'=31
'>>'=32
'<<'=33
'&'=34
'|'=35
'^'=36
'~'=37
'='=38
'++'=39
'--'=40
'.'=41
'?'=42
':'=43
'('=44
')'=45
'['=46
']'=47
'{'=48
'}'=49
';'=50
','=51

View File

@ -1,7 +0,0 @@
// Generated from MXParser.g4 by ANTLR 4.13.2
#include "MXParserBaseVisitor.h"

View File

@ -1,52 +0,0 @@
// Generated from MXParser.g4 by ANTLR 4.13.2
#pragma once
#include "antlr4-runtime.h"
#include "MXParserVisitor.h"
/**
* This class provides an empty implementation of MXParserVisitor, which can be
* extended to create a visitor which only needs to handle a subset of the available methods.
*/
class MXParserBaseVisitor : public MXParserVisitor {
public:
virtual std::any visitMxprog(MXParser::MxprogContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitFunction(MXParser::FunctionContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitType(MXParser::TypeContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitBlock(MXParser::BlockContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitStatement(MXParser::StatementContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitExpression(MXParser::ExpressionContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitReturnStmt(MXParser::ReturnStmtContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitIfStmt(MXParser::IfStmtContext *ctx) override {
return visitChildren(ctx);
}
};

View File

@ -21,19 +21,29 @@ public:
*/
virtual std::any visitMxprog(MXParser::MxprogContext *context) = 0;
virtual std::any visitFunction(MXParser::FunctionContext *context) = 0;
virtual std::any visitFunction_def(MXParser::Function_defContext *context) = 0;
virtual std::any visitType(MXParser::TypeContext *context) = 0;
virtual std::any visitClass_def(MXParser::Class_defContext *context) = 0;
virtual std::any visitBlock(MXParser::BlockContext *context) = 0;
virtual std::any visitClass_var_def(MXParser::Class_var_defContext *context) = 0;
virtual std::any visitClass_constructor(MXParser::Class_constructorContext *context) = 0;
virtual std::any visitSuite(MXParser::SuiteContext *context) = 0;
virtual std::any visitStatement(MXParser::StatementContext *context) = 0;
virtual std::any visitExpression(MXParser::ExpressionContext *context) = 0;
virtual std::any visitDefine_statement(MXParser::Define_statementContext *context) = 0;
virtual std::any visitReturnStmt(MXParser::ReturnStmtContext *context) = 0;
virtual std::any visitExpr(MXParser::ExprContext *context) = 0;
virtual std::any visitIfStmt(MXParser::IfStmtContext *context) = 0;
virtual std::any visitBasic_expr(MXParser::Basic_exprContext *context) = 0;
virtual std::any visitFormatted_string(MXParser::Formatted_stringContext *context) = 0;
virtual std::any visitConstant(MXParser::ConstantContext *context) = 0;
virtual std::any visitType(MXParser::TypeContext *context) = 0;
};