rewrite grammar file
This commit is contained in:
parent
6e7d740938
commit
26de003feb
1
.gitignore
vendored
1
.gitignore
vendored
@ -1 +1,2 @@
|
|||||||
build/
|
build/
|
||||||
|
.antlr/
|
||||||
@ -11,6 +11,7 @@ include_directories(${ANTLR4_INCLUDE_DIR})
|
|||||||
|
|
||||||
# Custom sources start here
|
# Custom sources start here
|
||||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
|
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
|
||||||
|
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include/antlrgen)
|
||||||
file(GLOB_RECURSE SOURCES "src/*.cpp")
|
file(GLOB_RECURSE SOURCES "src/*.cpp")
|
||||||
|
|
||||||
add_executable(sysy ${SOURCES})
|
add_executable(sysy ${SOURCES})
|
||||||
|
|||||||
381
SysY.g4
381
SysY.g4
@ -1,381 +0,0 @@
|
|||||||
grammar SysY;
|
|
||||||
|
|
||||||
program
|
|
||||||
: compUnit
|
|
||||||
;
|
|
||||||
|
|
||||||
compUnit
|
|
||||||
: (funcDef | decl)+
|
|
||||||
;
|
|
||||||
|
|
||||||
decl
|
|
||||||
: constDecl
|
|
||||||
| varDecl
|
|
||||||
;
|
|
||||||
|
|
||||||
constDecl
|
|
||||||
: CONST_KW bType constDef (COMMA constDef)* ';'
|
|
||||||
;
|
|
||||||
|
|
||||||
bType
|
|
||||||
: INT_KW
|
|
||||||
;
|
|
||||||
|
|
||||||
constDef
|
|
||||||
: IDENT (L_BRACKT constExp R_BRACKT)* ASSIGN constInitVal
|
|
||||||
;
|
|
||||||
|
|
||||||
constInitVal
|
|
||||||
: constExp
|
|
||||||
| (L_BRACE (constInitVal (COMMA constInitVal)*)? R_BRACE)
|
|
||||||
;
|
|
||||||
|
|
||||||
varDecl
|
|
||||||
: bType varDef (COMMA varDef)* ';'
|
|
||||||
;
|
|
||||||
|
|
||||||
varDef
|
|
||||||
: IDENT (L_BRACKT constExp R_BRACKT)* (ASSIGN initVal)?
|
|
||||||
;
|
|
||||||
|
|
||||||
initVal
|
|
||||||
: exp
|
|
||||||
| (L_BRACE (initVal (COMMA initVal)*)? R_BRACE)
|
|
||||||
;
|
|
||||||
|
|
||||||
funcDef
|
|
||||||
: funcType IDENT L_PAREN funcFParams? R_PAREN block
|
|
||||||
;
|
|
||||||
|
|
||||||
funcType
|
|
||||||
: VOID_KW
|
|
||||||
| INT_KW
|
|
||||||
;
|
|
||||||
|
|
||||||
funcFParams
|
|
||||||
: funcFParam (COMMA funcFParam)*
|
|
||||||
;
|
|
||||||
|
|
||||||
funcFParam
|
|
||||||
: bType IDENT (L_BRACKT R_BRACKT (L_BRACKT exp R_BRACKT)*)?
|
|
||||||
;
|
|
||||||
|
|
||||||
block
|
|
||||||
: L_BRACE blockItem* R_BRACE
|
|
||||||
;
|
|
||||||
|
|
||||||
blockItem
|
|
||||||
: constDecl
|
|
||||||
| varDecl
|
|
||||||
| stmt
|
|
||||||
;
|
|
||||||
|
|
||||||
stmt
|
|
||||||
: assignStmt
|
|
||||||
| expStmt
|
|
||||||
| block
|
|
||||||
| conditionStmt
|
|
||||||
| whileStmt
|
|
||||||
| breakStmt
|
|
||||||
| continueStmt
|
|
||||||
| returnStmt
|
|
||||||
;
|
|
||||||
|
|
||||||
assignStmt
|
|
||||||
: lVal '=' exp ';'
|
|
||||||
;
|
|
||||||
|
|
||||||
expStmt
|
|
||||||
: exp? ';'
|
|
||||||
;
|
|
||||||
|
|
||||||
conditionStmt
|
|
||||||
: IF_KW L_PAREN cond R_PAREN stmt (ELSE_KW stmt)?
|
|
||||||
;
|
|
||||||
|
|
||||||
whileStmt
|
|
||||||
: WHILE_KW L_PAREN cond R_PAREN stmt
|
|
||||||
;
|
|
||||||
|
|
||||||
breakStmt
|
|
||||||
: BREAK_KW ';'
|
|
||||||
;
|
|
||||||
|
|
||||||
continueStmt
|
|
||||||
: CONTINUE_KW ';'
|
|
||||||
;
|
|
||||||
|
|
||||||
returnStmt
|
|
||||||
: RETURN_KW (exp)? ';'
|
|
||||||
;
|
|
||||||
|
|
||||||
exp
|
|
||||||
: addExp
|
|
||||||
;
|
|
||||||
|
|
||||||
cond
|
|
||||||
: lOrExp
|
|
||||||
;
|
|
||||||
|
|
||||||
lVal
|
|
||||||
: IDENT (L_BRACKT exp R_BRACKT)*
|
|
||||||
;
|
|
||||||
|
|
||||||
primaryExp
|
|
||||||
: (L_PAREN exp R_PAREN)
|
|
||||||
| lVal
|
|
||||||
| number
|
|
||||||
;
|
|
||||||
|
|
||||||
number
|
|
||||||
: intConst
|
|
||||||
;
|
|
||||||
|
|
||||||
intConst
|
|
||||||
: DECIMAL_CONST
|
|
||||||
| OCTAL_CONST
|
|
||||||
| HEXADECIMAL_CONST
|
|
||||||
;
|
|
||||||
|
|
||||||
unaryExp
|
|
||||||
: primaryExp
|
|
||||||
| callee
|
|
||||||
| (unaryOp unaryExp)
|
|
||||||
;
|
|
||||||
|
|
||||||
callee
|
|
||||||
: IDENT L_PAREN funcRParams? R_PAREN
|
|
||||||
;
|
|
||||||
|
|
||||||
unaryOp
|
|
||||||
: '+'
|
|
||||||
| '-'
|
|
||||||
| NOT
|
|
||||||
;
|
|
||||||
|
|
||||||
funcRParams
|
|
||||||
: param (COMMA param)*
|
|
||||||
;
|
|
||||||
|
|
||||||
param
|
|
||||||
: exp
|
|
||||||
| STRING
|
|
||||||
;
|
|
||||||
|
|
||||||
mulExp
|
|
||||||
: unaryExp (mulOp unaryExp)*
|
|
||||||
; // eliminate left-recursive
|
|
||||||
|
|
||||||
mulOp
|
|
||||||
: MUL
|
|
||||||
| DIV
|
|
||||||
| MOD
|
|
||||||
;
|
|
||||||
|
|
||||||
addExp
|
|
||||||
: mulExp (addOp mulExp)*
|
|
||||||
; // eliminate left-recursive
|
|
||||||
|
|
||||||
addOp
|
|
||||||
: '+'
|
|
||||||
| '-'
|
|
||||||
;
|
|
||||||
|
|
||||||
relExp
|
|
||||||
: addExp (relOp addExp)*
|
|
||||||
; // eliminate left-recursive
|
|
||||||
|
|
||||||
relOp
|
|
||||||
: LT
|
|
||||||
| GT
|
|
||||||
| LE
|
|
||||||
| GE
|
|
||||||
;
|
|
||||||
|
|
||||||
eqExp
|
|
||||||
: relExp (eqOp relExp)*
|
|
||||||
;
|
|
||||||
|
|
||||||
eqOp
|
|
||||||
: EQ
|
|
||||||
| NEQ
|
|
||||||
;
|
|
||||||
|
|
||||||
lAndExp
|
|
||||||
: eqExp (AND eqExp)*
|
|
||||||
;
|
|
||||||
|
|
||||||
lOrExp
|
|
||||||
: lAndExp (OR lAndExp)*
|
|
||||||
;
|
|
||||||
|
|
||||||
constExp
|
|
||||||
: addExp
|
|
||||||
;
|
|
||||||
|
|
||||||
CONST_KW
|
|
||||||
: 'const'
|
|
||||||
;
|
|
||||||
|
|
||||||
INT_KW
|
|
||||||
: 'int'
|
|
||||||
;
|
|
||||||
|
|
||||||
VOID_KW
|
|
||||||
: 'void'
|
|
||||||
;
|
|
||||||
|
|
||||||
IF_KW
|
|
||||||
: 'if'
|
|
||||||
;
|
|
||||||
|
|
||||||
ELSE_KW
|
|
||||||
: 'else'
|
|
||||||
;
|
|
||||||
|
|
||||||
WHILE_KW
|
|
||||||
: 'while'
|
|
||||||
;
|
|
||||||
|
|
||||||
BREAK_KW
|
|
||||||
: 'break'
|
|
||||||
;
|
|
||||||
|
|
||||||
CONTINUE_KW
|
|
||||||
: 'continue'
|
|
||||||
;
|
|
||||||
|
|
||||||
RETURN_KW
|
|
||||||
: 'return'
|
|
||||||
;
|
|
||||||
|
|
||||||
IDENT
|
|
||||||
: [_a-zA-Z]
|
|
||||||
| [_a-zA-Z] [_a-zA-Z0-9]+
|
|
||||||
;
|
|
||||||
|
|
||||||
DECIMAL_CONST
|
|
||||||
: [1-9]
|
|
||||||
| [1-9] [0-9]+
|
|
||||||
;
|
|
||||||
|
|
||||||
OCTAL_CONST
|
|
||||||
: '0'
|
|
||||||
| ('0' [0-7]+)
|
|
||||||
;
|
|
||||||
|
|
||||||
HEXADECIMAL_CONST
|
|
||||||
: ('0x' | '0X') [a-fA-F0-9]+
|
|
||||||
;
|
|
||||||
|
|
||||||
STRING
|
|
||||||
: DOUBLE_QUOTE REGULAR_CHAR*? DOUBLE_QUOTE
|
|
||||||
;
|
|
||||||
|
|
||||||
fragment REGULAR_CHAR
|
|
||||||
: (ESC | .)
|
|
||||||
;
|
|
||||||
|
|
||||||
fragment ESC
|
|
||||||
: '\\"' | '\\\\'
|
|
||||||
;
|
|
||||||
|
|
||||||
NOT
|
|
||||||
: '!'
|
|
||||||
;
|
|
||||||
|
|
||||||
MUL
|
|
||||||
: '*'
|
|
||||||
;
|
|
||||||
|
|
||||||
DIV
|
|
||||||
: '/'
|
|
||||||
;
|
|
||||||
|
|
||||||
MOD
|
|
||||||
: '%'
|
|
||||||
;
|
|
||||||
|
|
||||||
ASSIGN
|
|
||||||
: '='
|
|
||||||
;
|
|
||||||
|
|
||||||
EQ
|
|
||||||
: '=='
|
|
||||||
;
|
|
||||||
|
|
||||||
NEQ
|
|
||||||
: '!='
|
|
||||||
;
|
|
||||||
|
|
||||||
LT
|
|
||||||
: '<'
|
|
||||||
;
|
|
||||||
|
|
||||||
GT
|
|
||||||
: '>'
|
|
||||||
;
|
|
||||||
|
|
||||||
LE
|
|
||||||
: '<='
|
|
||||||
;
|
|
||||||
|
|
||||||
GE
|
|
||||||
: '>='
|
|
||||||
;
|
|
||||||
|
|
||||||
AND
|
|
||||||
: '&&'
|
|
||||||
;
|
|
||||||
|
|
||||||
OR
|
|
||||||
: '||'
|
|
||||||
;
|
|
||||||
|
|
||||||
L_PAREN
|
|
||||||
: '('
|
|
||||||
;
|
|
||||||
|
|
||||||
R_PAREN
|
|
||||||
: ')'
|
|
||||||
;
|
|
||||||
|
|
||||||
L_BRACE
|
|
||||||
: '{'
|
|
||||||
;
|
|
||||||
|
|
||||||
R_BRACE
|
|
||||||
: '}'
|
|
||||||
;
|
|
||||||
|
|
||||||
L_BRACKT
|
|
||||||
: '['
|
|
||||||
;
|
|
||||||
|
|
||||||
R_BRACKT
|
|
||||||
: ']'
|
|
||||||
;
|
|
||||||
|
|
||||||
COMMA
|
|
||||||
: ','
|
|
||||||
;
|
|
||||||
|
|
||||||
SEMICOLON
|
|
||||||
: ';'
|
|
||||||
;
|
|
||||||
|
|
||||||
DOUBLE_QUOTE
|
|
||||||
: '"'
|
|
||||||
;
|
|
||||||
|
|
||||||
WS
|
|
||||||
: [ \r\n\t]+ -> skip
|
|
||||||
;
|
|
||||||
|
|
||||||
LINE_COMMENT
|
|
||||||
: '//' ~ [\r\n]* -> skip
|
|
||||||
;
|
|
||||||
|
|
||||||
MULTILINE_COMMENT
|
|
||||||
: '/*' .*? '*/' -> skip
|
|
||||||
;
|
|
||||||
114
Sysy.g4
Normal file
114
Sysy.g4
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
grammar Sysy;
|
||||||
|
|
||||||
|
program: compUnit;
|
||||||
|
|
||||||
|
compUnit: (funcDef | decl)+;
|
||||||
|
|
||||||
|
decl: constDecl | varDecl;
|
||||||
|
|
||||||
|
constDecl: 'const' bType constDef (',' constDef)* ';';
|
||||||
|
|
||||||
|
bType: 'int';
|
||||||
|
|
||||||
|
constDef: IDENT ('[' constExp ']')* '=' constInitVal;
|
||||||
|
|
||||||
|
constInitVal:
|
||||||
|
constExp
|
||||||
|
| ('{' (constInitVal (',' constInitVal)*)? '}');
|
||||||
|
|
||||||
|
varDecl: bType varDef (',' varDef)* ';';
|
||||||
|
|
||||||
|
varDef: IDENT ('[' constExp ']')* ('=' initVal)?;
|
||||||
|
|
||||||
|
initVal: exp | ('{' (initVal (',' initVal)*)? '}');
|
||||||
|
|
||||||
|
funcDef: funcType IDENT '(' (funcFParams)? ')' block;
|
||||||
|
|
||||||
|
funcType: 'void' | 'int';
|
||||||
|
|
||||||
|
funcFParams: funcFParam (',' funcFParam)*;
|
||||||
|
|
||||||
|
funcFParam: bType IDENT ('[' ']' ('[' exp ']')*)?;
|
||||||
|
|
||||||
|
block: '{' (blockItem)* '}';
|
||||||
|
|
||||||
|
blockItem: decl | stmt;
|
||||||
|
|
||||||
|
stmt:
|
||||||
|
lVal '=' exp ';' # assignStmt
|
||||||
|
| (exp)? ';' # expStmt
|
||||||
|
| block # blockStmt
|
||||||
|
| 'if' '(' cond ')' stmt ('else' stmt)? # ifStmt
|
||||||
|
| 'while' '(' cond ')' stmt # whileStmt
|
||||||
|
| 'break' ';' # breakStmt
|
||||||
|
| 'continue' ';' # continueStmt
|
||||||
|
| 'return' (exp)? ';' # returnStmt;
|
||||||
|
|
||||||
|
exp: addExp;
|
||||||
|
|
||||||
|
cond: lOrExp;
|
||||||
|
|
||||||
|
lVal: IDENT ('[' exp ']')*;
|
||||||
|
|
||||||
|
primaryExp: ('(' exp ')') | lVal | number;
|
||||||
|
|
||||||
|
number: intConst;
|
||||||
|
|
||||||
|
intConst: DECIMAL_CONST | OCTAL_CONST | HEXADECIMAL_CONST;
|
||||||
|
|
||||||
|
unaryExp:
|
||||||
|
primaryExp
|
||||||
|
| IDENT '(' (funcRParams)? ')'
|
||||||
|
| unaryOp unaryExp;
|
||||||
|
|
||||||
|
unaryOp: '+' | '-' | '!'; // 注:'!'仅出现在条件表达式中
|
||||||
|
|
||||||
|
funcRParams: funcRParam (',' funcRParam)*;
|
||||||
|
|
||||||
|
funcRParam: exp | StringLiteral;
|
||||||
|
|
||||||
|
mulExp:
|
||||||
|
unaryExp
|
||||||
|
| mulExp ('*' | '/' | '%') unaryExp; // ANTLR4 has support for direct left recursion
|
||||||
|
|
||||||
|
addExp: mulExp | addExp ('+' | '-') mulExp;
|
||||||
|
|
||||||
|
relExp: addExp | relExp ('<' | '>' | '<=' | '>=') addExp;
|
||||||
|
|
||||||
|
eqExp: relExp | eqExp ('==' | '!=') relExp;
|
||||||
|
|
||||||
|
lAndExp: eqExp | lAndExp '&&' eqExp;
|
||||||
|
|
||||||
|
lOrExp: lAndExp | lOrExp '||' lAndExp;
|
||||||
|
|
||||||
|
constExp: addExp; // 注:使用的 Ident 必须是常量
|
||||||
|
|
||||||
|
// -------- Terminals ---------
|
||||||
|
|
||||||
|
IDENT: [_a-zA-Z] | [_a-zA-Z] [_a-zA-Z0-9]+;
|
||||||
|
|
||||||
|
DECIMAL_CONST: [1-9] | [1-9] [0-9]+;
|
||||||
|
|
||||||
|
OCTAL_CONST: '0' | ('0' [0-7]+);
|
||||||
|
|
||||||
|
HEXADECIMAL_CONST: ('0x' | '0X') [a-fA-F0-9]+;
|
||||||
|
|
||||||
|
WS: [ \r\n\t]+ -> skip;
|
||||||
|
|
||||||
|
SINGLELINE_COMMENT: '//' ~ [\r\n]* -> skip;
|
||||||
|
|
||||||
|
MULTILINE_COMMENT: '/*' .*? '*/' -> skip;
|
||||||
|
|
||||||
|
fragment EscapeSequence:
|
||||||
|
'\\' ['"?abfnrtv\\]
|
||||||
|
| '\\' [0-7] [0-7]? [0-7]?
|
||||||
|
| '\\x' [0-9a-fA-F]+; // https://github.com/antlr/grammars-v4/blob/master/c/C.g4
|
||||||
|
|
||||||
|
fragment SChar:
|
||||||
|
~["\\\r\n]
|
||||||
|
| EscapeSequence
|
||||||
|
| '\\\n' // Added line
|
||||||
|
| '\\\r\n' ; // Added line
|
||||||
|
|
||||||
|
StringLiteral: '"' (SChar+)? '"';
|
||||||
|
// https://github.com/antlr/antlr4/blob/master/doc/lexer-rules.md
|
||||||
BIN
docs/SysY2022运行时库-V1.pdf
Normal file
BIN
docs/SysY2022运行时库-V1.pdf
Normal file
Binary file not shown.
BIN
docs/SysY语言定义.pdf
Normal file
BIN
docs/SysY语言定义.pdf
Normal file
Binary file not shown.
@ -1,207 +0,0 @@
|
|||||||
|
|
||||||
// Generated from SysY.g4 by ANTLR 4.12.0
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
|
|
||||||
#include "antlr4-runtime.h"
|
|
||||||
#include "SysYVisitor.h"
|
|
||||||
|
|
||||||
|
|
||||||
namespace antlrSysY {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This class provides an empty implementation of SysYVisitor, which can be
|
|
||||||
* extended to create a visitor which only needs to handle a subset of the available methods.
|
|
||||||
*/
|
|
||||||
class SysYBaseVisitor : public SysYVisitor {
|
|
||||||
public:
|
|
||||||
|
|
||||||
virtual std::any visitProgram(SysYParser::ProgramContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitCompUnit(SysYParser::CompUnitContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitDecl(SysYParser::DeclContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitConstDecl(SysYParser::ConstDeclContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitBType(SysYParser::BTypeContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitConstDef(SysYParser::ConstDefContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitConstInitVal(SysYParser::ConstInitValContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitVarDecl(SysYParser::VarDeclContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitVarDef(SysYParser::VarDefContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitInitVal(SysYParser::InitValContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitFuncDef(SysYParser::FuncDefContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitFuncType(SysYParser::FuncTypeContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitFuncFParams(SysYParser::FuncFParamsContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitFuncFParam(SysYParser::FuncFParamContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitBlock(SysYParser::BlockContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitBlockItem(SysYParser::BlockItemContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitStmt(SysYParser::StmtContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitAssignStmt(SysYParser::AssignStmtContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitExpStmt(SysYParser::ExpStmtContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitConditionStmt(SysYParser::ConditionStmtContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitWhileStmt(SysYParser::WhileStmtContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitBreakStmt(SysYParser::BreakStmtContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitContinueStmt(SysYParser::ContinueStmtContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitReturnStmt(SysYParser::ReturnStmtContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitExp(SysYParser::ExpContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitCond(SysYParser::CondContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitLVal(SysYParser::LValContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitPrimaryExp(SysYParser::PrimaryExpContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitNumber(SysYParser::NumberContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitIntConst(SysYParser::IntConstContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitUnaryExp(SysYParser::UnaryExpContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitCallee(SysYParser::CalleeContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitUnaryOp(SysYParser::UnaryOpContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitFuncRParams(SysYParser::FuncRParamsContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitParam(SysYParser::ParamContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitMulExp(SysYParser::MulExpContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitMulOp(SysYParser::MulOpContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitAddExp(SysYParser::AddExpContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitAddOp(SysYParser::AddOpContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitRelExp(SysYParser::RelExpContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitRelOp(SysYParser::RelOpContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitEqExp(SysYParser::EqExpContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitEqOp(SysYParser::EqOpContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitLAndExp(SysYParser::LAndExpContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitLOrExp(SysYParser::LOrExpContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::any visitConstExp(SysYParser::ConstExpContext *ctx) override {
|
|
||||||
return visitChildren(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace antlrSysY
|
|
||||||
@ -1,118 +0,0 @@
|
|||||||
|
|
||||||
// Generated from SysY.g4 by ANTLR 4.12.0
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
|
|
||||||
#include "antlr4-runtime.h"
|
|
||||||
#include "SysYParser.h"
|
|
||||||
|
|
||||||
|
|
||||||
namespace antlrSysY {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This class defines an abstract visitor for a parse tree
|
|
||||||
* produced by SysYParser.
|
|
||||||
*/
|
|
||||||
class SysYVisitor : public antlr4::tree::AbstractParseTreeVisitor {
|
|
||||||
public:
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Visit parse trees produced by SysYParser.
|
|
||||||
*/
|
|
||||||
virtual std::any visitProgram(SysYParser::ProgramContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitCompUnit(SysYParser::CompUnitContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitDecl(SysYParser::DeclContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitConstDecl(SysYParser::ConstDeclContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitBType(SysYParser::BTypeContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitConstDef(SysYParser::ConstDefContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitConstInitVal(SysYParser::ConstInitValContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitVarDecl(SysYParser::VarDeclContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitVarDef(SysYParser::VarDefContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitInitVal(SysYParser::InitValContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitFuncDef(SysYParser::FuncDefContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitFuncType(SysYParser::FuncTypeContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitFuncFParams(SysYParser::FuncFParamsContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitFuncFParam(SysYParser::FuncFParamContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitBlock(SysYParser::BlockContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitBlockItem(SysYParser::BlockItemContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitStmt(SysYParser::StmtContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitAssignStmt(SysYParser::AssignStmtContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitExpStmt(SysYParser::ExpStmtContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitConditionStmt(SysYParser::ConditionStmtContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitWhileStmt(SysYParser::WhileStmtContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitBreakStmt(SysYParser::BreakStmtContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitContinueStmt(SysYParser::ContinueStmtContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitReturnStmt(SysYParser::ReturnStmtContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitExp(SysYParser::ExpContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitCond(SysYParser::CondContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitLVal(SysYParser::LValContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitPrimaryExp(SysYParser::PrimaryExpContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitNumber(SysYParser::NumberContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitIntConst(SysYParser::IntConstContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitUnaryExp(SysYParser::UnaryExpContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitCallee(SysYParser::CalleeContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitUnaryOp(SysYParser::UnaryOpContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitFuncRParams(SysYParser::FuncRParamsContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitParam(SysYParser::ParamContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitMulExp(SysYParser::MulExpContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitMulOp(SysYParser::MulOpContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitAddExp(SysYParser::AddExpContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitAddOp(SysYParser::AddOpContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitRelExp(SysYParser::RelExpContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitRelOp(SysYParser::RelOpContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitEqExp(SysYParser::EqExpContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitEqOp(SysYParser::EqOpContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitLAndExp(SysYParser::LAndExpContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitLOrExp(SysYParser::LOrExpContext *context) = 0;
|
|
||||||
|
|
||||||
virtual std::any visitConstExp(SysYParser::ConstExpContext *context) = 0;
|
|
||||||
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace antlrSysY
|
|
||||||
187
include/antlrgen/SysyBaseVisitor.h
Normal file
187
include/antlrgen/SysyBaseVisitor.h
Normal file
@ -0,0 +1,187 @@
|
|||||||
|
|
||||||
|
// Generated from Sysy.g4 by ANTLR 4.12.0
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
|
#include "antlr4-runtime.h"
|
||||||
|
#include "SysyVisitor.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace antlrSysY {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class provides an empty implementation of SysyVisitor, which can be
|
||||||
|
* extended to create a visitor which only needs to handle a subset of the available methods.
|
||||||
|
*/
|
||||||
|
class SysyBaseVisitor : public SysyVisitor {
|
||||||
|
public:
|
||||||
|
|
||||||
|
virtual std::any visitProgram(SysyParser::ProgramContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::any visitCompUnit(SysyParser::CompUnitContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::any visitDecl(SysyParser::DeclContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::any visitConstDecl(SysyParser::ConstDeclContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::any visitBType(SysyParser::BTypeContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::any visitConstDef(SysyParser::ConstDefContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::any visitConstInitVal(SysyParser::ConstInitValContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::any visitVarDecl(SysyParser::VarDeclContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::any visitVarDef(SysyParser::VarDefContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::any visitInitVal(SysyParser::InitValContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::any visitFuncDef(SysyParser::FuncDefContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::any visitFuncType(SysyParser::FuncTypeContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::any visitFuncFParams(SysyParser::FuncFParamsContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::any visitFuncFParam(SysyParser::FuncFParamContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::any visitBlock(SysyParser::BlockContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::any visitBlockItem(SysyParser::BlockItemContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::any visitAssignStmt(SysyParser::AssignStmtContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::any visitExpStmt(SysyParser::ExpStmtContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::any visitBlockStmt(SysyParser::BlockStmtContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::any visitIfStmt(SysyParser::IfStmtContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::any visitWhileStmt(SysyParser::WhileStmtContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::any visitBreakStmt(SysyParser::BreakStmtContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::any visitContinueStmt(SysyParser::ContinueStmtContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::any visitReturnStmt(SysyParser::ReturnStmtContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::any visitExp(SysyParser::ExpContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::any visitCond(SysyParser::CondContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::any visitLVal(SysyParser::LValContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::any visitPrimaryExp(SysyParser::PrimaryExpContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::any visitNumber(SysyParser::NumberContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::any visitIntConst(SysyParser::IntConstContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::any visitUnaryExp(SysyParser::UnaryExpContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::any visitUnaryOp(SysyParser::UnaryOpContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::any visitFuncRParams(SysyParser::FuncRParamsContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::any visitFuncRParam(SysyParser::FuncRParamContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::any visitMulExp(SysyParser::MulExpContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::any visitAddExp(SysyParser::AddExpContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::any visitRelExp(SysyParser::RelExpContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::any visitEqExp(SysyParser::EqExpContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::any visitLAndExp(SysyParser::LAndExpContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::any visitLOrExp(SysyParser::LOrExpContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::any visitConstExp(SysyParser::ConstExpContext *ctx) override {
|
||||||
|
return visitChildren(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace antlrSysY
|
||||||
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
// Generated from SysY.g4 by ANTLR 4.12.0
|
// Generated from Sysy.g4 by ANTLR 4.12.0
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
@ -10,22 +10,21 @@
|
|||||||
namespace antlrSysY {
|
namespace antlrSysY {
|
||||||
|
|
||||||
|
|
||||||
class SysYLexer : public antlr4::Lexer {
|
class SysyLexer : public antlr4::Lexer {
|
||||||
public:
|
public:
|
||||||
enum {
|
enum {
|
||||||
CONST_KW = 1, INT_KW = 2, VOID_KW = 3, IF_KW = 4, ELSE_KW = 5, WHILE_KW = 6,
|
T__0 = 1, T__1 = 2, T__2 = 3, T__3 = 4, T__4 = 5, T__5 = 6, T__6 = 7,
|
||||||
BREAK_KW = 7, CONTINUE_KW = 8, RETURN_KW = 9, IDENT = 10, DECIMAL_CONST = 11,
|
T__7 = 8, T__8 = 9, T__9 = 10, T__10 = 11, T__11 = 12, T__12 = 13, T__13 = 14,
|
||||||
OCTAL_CONST = 12, HEXADECIMAL_CONST = 13, STRING = 14, PLUS = 15, MINUS = 16,
|
T__14 = 15, T__15 = 16, T__16 = 17, T__17 = 18, T__18 = 19, T__19 = 20,
|
||||||
NOT = 17, MUL = 18, DIV = 19, MOD = 20, ASSIGN = 21, EQ = 22, NEQ = 23,
|
T__20 = 21, T__21 = 22, T__22 = 23, T__23 = 24, T__24 = 25, T__25 = 26,
|
||||||
LT = 24, GT = 25, LE = 26, GE = 27, AND = 28, OR = 29, L_PAREN = 30,
|
T__26 = 27, T__27 = 28, T__28 = 29, T__29 = 30, T__30 = 31, T__31 = 32,
|
||||||
R_PAREN = 31, L_BRACE = 32, R_BRACE = 33, L_BRACKT = 34, R_BRACKT = 35,
|
IDENT = 33, DECIMAL_CONST = 34, OCTAL_CONST = 35, HEXADECIMAL_CONST = 36,
|
||||||
COMMA = 36, SEMICOLON = 37, DOUBLE_QUOTE = 38, WS = 39, LINE_COMMENT = 40,
|
WS = 37, SINGLELINE_COMMENT = 38, MULTILINE_COMMENT = 39, StringLiteral = 40
|
||||||
MULTILINE_COMMENT = 41
|
|
||||||
};
|
};
|
||||||
|
|
||||||
explicit SysYLexer(antlr4::CharStream *input);
|
explicit SysyLexer(antlr4::CharStream *input);
|
||||||
|
|
||||||
~SysYLexer() override;
|
~SysyLexer() override;
|
||||||
|
|
||||||
|
|
||||||
std::string getGrammarFileName() const override;
|
std::string getGrammarFileName() const override;
|
||||||
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
// Generated from SysY.g4 by ANTLR 4.12.0
|
// Generated from Sysy.g4 by ANTLR 4.12.0
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
@ -10,17 +10,16 @@
|
|||||||
namespace antlrSysY {
|
namespace antlrSysY {
|
||||||
|
|
||||||
|
|
||||||
class SysYParser : public antlr4::Parser {
|
class SysyParser : public antlr4::Parser {
|
||||||
public:
|
public:
|
||||||
enum {
|
enum {
|
||||||
CONST_KW = 1, INT_KW = 2, VOID_KW = 3, IF_KW = 4, ELSE_KW = 5, WHILE_KW = 6,
|
T__0 = 1, T__1 = 2, T__2 = 3, T__3 = 4, T__4 = 5, T__5 = 6, T__6 = 7,
|
||||||
BREAK_KW = 7, CONTINUE_KW = 8, RETURN_KW = 9, IDENT = 10, DECIMAL_CONST = 11,
|
T__7 = 8, T__8 = 9, T__9 = 10, T__10 = 11, T__11 = 12, T__12 = 13, T__13 = 14,
|
||||||
OCTAL_CONST = 12, HEXADECIMAL_CONST = 13, STRING = 14, PLUS = 15, MINUS = 16,
|
T__14 = 15, T__15 = 16, T__16 = 17, T__17 = 18, T__18 = 19, T__19 = 20,
|
||||||
NOT = 17, MUL = 18, DIV = 19, MOD = 20, ASSIGN = 21, EQ = 22, NEQ = 23,
|
T__20 = 21, T__21 = 22, T__22 = 23, T__23 = 24, T__24 = 25, T__25 = 26,
|
||||||
LT = 24, GT = 25, LE = 26, GE = 27, AND = 28, OR = 29, L_PAREN = 30,
|
T__26 = 27, T__27 = 28, T__28 = 29, T__29 = 30, T__30 = 31, T__31 = 32,
|
||||||
R_PAREN = 31, L_BRACE = 32, R_BRACE = 33, L_BRACKT = 34, R_BRACKT = 35,
|
IDENT = 33, DECIMAL_CONST = 34, OCTAL_CONST = 35, HEXADECIMAL_CONST = 36,
|
||||||
COMMA = 36, SEMICOLON = 37, DOUBLE_QUOTE = 38, WS = 39, LINE_COMMENT = 40,
|
WS = 37, SINGLELINE_COMMENT = 38, MULTILINE_COMMENT = 39, StringLiteral = 40
|
||||||
MULTILINE_COMMENT = 41
|
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
@ -28,20 +27,18 @@ public:
|
|||||||
RuleBType = 4, RuleConstDef = 5, RuleConstInitVal = 6, RuleVarDecl = 7,
|
RuleBType = 4, RuleConstDef = 5, RuleConstInitVal = 6, RuleVarDecl = 7,
|
||||||
RuleVarDef = 8, RuleInitVal = 9, RuleFuncDef = 10, RuleFuncType = 11,
|
RuleVarDef = 8, RuleInitVal = 9, RuleFuncDef = 10, RuleFuncType = 11,
|
||||||
RuleFuncFParams = 12, RuleFuncFParam = 13, RuleBlock = 14, RuleBlockItem = 15,
|
RuleFuncFParams = 12, RuleFuncFParam = 13, RuleBlock = 14, RuleBlockItem = 15,
|
||||||
RuleStmt = 16, RuleAssignStmt = 17, RuleExpStmt = 18, RuleConditionStmt = 19,
|
RuleStmt = 16, RuleExp = 17, RuleCond = 18, RuleLVal = 19, RulePrimaryExp = 20,
|
||||||
RuleWhileStmt = 20, RuleBreakStmt = 21, RuleContinueStmt = 22, RuleReturnStmt = 23,
|
RuleNumber = 21, RuleIntConst = 22, RuleUnaryExp = 23, RuleUnaryOp = 24,
|
||||||
RuleExp = 24, RuleCond = 25, RuleLVal = 26, RulePrimaryExp = 27, RuleNumber = 28,
|
RuleFuncRParams = 25, RuleFuncRParam = 26, RuleMulExp = 27, RuleAddExp = 28,
|
||||||
RuleIntConst = 29, RuleUnaryExp = 30, RuleCallee = 31, RuleUnaryOp = 32,
|
RuleRelExp = 29, RuleEqExp = 30, RuleLAndExp = 31, RuleLOrExp = 32,
|
||||||
RuleFuncRParams = 33, RuleParam = 34, RuleMulExp = 35, RuleMulOp = 36,
|
RuleConstExp = 33
|
||||||
RuleAddExp = 37, RuleAddOp = 38, RuleRelExp = 39, RuleRelOp = 40, RuleEqExp = 41,
|
|
||||||
RuleEqOp = 42, RuleLAndExp = 43, RuleLOrExp = 44, RuleConstExp = 45
|
|
||||||
};
|
};
|
||||||
|
|
||||||
explicit SysYParser(antlr4::TokenStream *input);
|
explicit SysyParser(antlr4::TokenStream *input);
|
||||||
|
|
||||||
SysYParser(antlr4::TokenStream *input, const antlr4::atn::ParserATNSimulatorOptions &options);
|
SysyParser(antlr4::TokenStream *input, const antlr4::atn::ParserATNSimulatorOptions &options);
|
||||||
|
|
||||||
~SysYParser() override;
|
~SysyParser() override;
|
||||||
|
|
||||||
std::string getGrammarFileName() const override;
|
std::string getGrammarFileName() const override;
|
||||||
|
|
||||||
@ -71,13 +68,6 @@ public:
|
|||||||
class BlockContext;
|
class BlockContext;
|
||||||
class BlockItemContext;
|
class BlockItemContext;
|
||||||
class StmtContext;
|
class StmtContext;
|
||||||
class AssignStmtContext;
|
|
||||||
class ExpStmtContext;
|
|
||||||
class ConditionStmtContext;
|
|
||||||
class WhileStmtContext;
|
|
||||||
class BreakStmtContext;
|
|
||||||
class ContinueStmtContext;
|
|
||||||
class ReturnStmtContext;
|
|
||||||
class ExpContext;
|
class ExpContext;
|
||||||
class CondContext;
|
class CondContext;
|
||||||
class LValContext;
|
class LValContext;
|
||||||
@ -85,18 +75,13 @@ public:
|
|||||||
class NumberContext;
|
class NumberContext;
|
||||||
class IntConstContext;
|
class IntConstContext;
|
||||||
class UnaryExpContext;
|
class UnaryExpContext;
|
||||||
class CalleeContext;
|
|
||||||
class UnaryOpContext;
|
class UnaryOpContext;
|
||||||
class FuncRParamsContext;
|
class FuncRParamsContext;
|
||||||
class ParamContext;
|
class FuncRParamContext;
|
||||||
class MulExpContext;
|
class MulExpContext;
|
||||||
class MulOpContext;
|
|
||||||
class AddExpContext;
|
class AddExpContext;
|
||||||
class AddOpContext;
|
|
||||||
class RelExpContext;
|
class RelExpContext;
|
||||||
class RelOpContext;
|
|
||||||
class EqExpContext;
|
class EqExpContext;
|
||||||
class EqOpContext;
|
|
||||||
class LAndExpContext;
|
class LAndExpContext;
|
||||||
class LOrExpContext;
|
class LOrExpContext;
|
||||||
class ConstExpContext;
|
class ConstExpContext;
|
||||||
@ -148,13 +133,9 @@ public:
|
|||||||
public:
|
public:
|
||||||
ConstDeclContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
ConstDeclContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
||||||
virtual size_t getRuleIndex() const override;
|
virtual size_t getRuleIndex() const override;
|
||||||
antlr4::tree::TerminalNode *CONST_KW();
|
|
||||||
BTypeContext *bType();
|
BTypeContext *bType();
|
||||||
std::vector<ConstDefContext *> constDef();
|
std::vector<ConstDefContext *> constDef();
|
||||||
ConstDefContext* constDef(size_t i);
|
ConstDefContext* constDef(size_t i);
|
||||||
antlr4::tree::TerminalNode *SEMICOLON();
|
|
||||||
std::vector<antlr4::tree::TerminalNode *> COMMA();
|
|
||||||
antlr4::tree::TerminalNode* COMMA(size_t i);
|
|
||||||
|
|
||||||
|
|
||||||
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
||||||
@ -167,7 +148,6 @@ public:
|
|||||||
public:
|
public:
|
||||||
BTypeContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
BTypeContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
||||||
virtual size_t getRuleIndex() const override;
|
virtual size_t getRuleIndex() const override;
|
||||||
antlr4::tree::TerminalNode *INT_KW();
|
|
||||||
|
|
||||||
|
|
||||||
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
||||||
@ -181,14 +161,9 @@ public:
|
|||||||
ConstDefContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
ConstDefContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
||||||
virtual size_t getRuleIndex() const override;
|
virtual size_t getRuleIndex() const override;
|
||||||
antlr4::tree::TerminalNode *IDENT();
|
antlr4::tree::TerminalNode *IDENT();
|
||||||
antlr4::tree::TerminalNode *ASSIGN();
|
|
||||||
ConstInitValContext *constInitVal();
|
ConstInitValContext *constInitVal();
|
||||||
std::vector<antlr4::tree::TerminalNode *> L_BRACKT();
|
|
||||||
antlr4::tree::TerminalNode* L_BRACKT(size_t i);
|
|
||||||
std::vector<ConstExpContext *> constExp();
|
std::vector<ConstExpContext *> constExp();
|
||||||
ConstExpContext* constExp(size_t i);
|
ConstExpContext* constExp(size_t i);
|
||||||
std::vector<antlr4::tree::TerminalNode *> R_BRACKT();
|
|
||||||
antlr4::tree::TerminalNode* R_BRACKT(size_t i);
|
|
||||||
|
|
||||||
|
|
||||||
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
||||||
@ -202,12 +177,8 @@ public:
|
|||||||
ConstInitValContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
ConstInitValContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
||||||
virtual size_t getRuleIndex() const override;
|
virtual size_t getRuleIndex() const override;
|
||||||
ConstExpContext *constExp();
|
ConstExpContext *constExp();
|
||||||
antlr4::tree::TerminalNode *L_BRACE();
|
|
||||||
antlr4::tree::TerminalNode *R_BRACE();
|
|
||||||
std::vector<ConstInitValContext *> constInitVal();
|
std::vector<ConstInitValContext *> constInitVal();
|
||||||
ConstInitValContext* constInitVal(size_t i);
|
ConstInitValContext* constInitVal(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;
|
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
||||||
@ -223,9 +194,6 @@ public:
|
|||||||
BTypeContext *bType();
|
BTypeContext *bType();
|
||||||
std::vector<VarDefContext *> varDef();
|
std::vector<VarDefContext *> varDef();
|
||||||
VarDefContext* varDef(size_t i);
|
VarDefContext* varDef(size_t i);
|
||||||
antlr4::tree::TerminalNode *SEMICOLON();
|
|
||||||
std::vector<antlr4::tree::TerminalNode *> COMMA();
|
|
||||||
antlr4::tree::TerminalNode* COMMA(size_t i);
|
|
||||||
|
|
||||||
|
|
||||||
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
||||||
@ -239,13 +207,8 @@ public:
|
|||||||
VarDefContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
VarDefContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
||||||
virtual size_t getRuleIndex() const override;
|
virtual size_t getRuleIndex() const override;
|
||||||
antlr4::tree::TerminalNode *IDENT();
|
antlr4::tree::TerminalNode *IDENT();
|
||||||
std::vector<antlr4::tree::TerminalNode *> L_BRACKT();
|
|
||||||
antlr4::tree::TerminalNode* L_BRACKT(size_t i);
|
|
||||||
std::vector<ConstExpContext *> constExp();
|
std::vector<ConstExpContext *> constExp();
|
||||||
ConstExpContext* constExp(size_t i);
|
ConstExpContext* constExp(size_t i);
|
||||||
std::vector<antlr4::tree::TerminalNode *> R_BRACKT();
|
|
||||||
antlr4::tree::TerminalNode* R_BRACKT(size_t i);
|
|
||||||
antlr4::tree::TerminalNode *ASSIGN();
|
|
||||||
InitValContext *initVal();
|
InitValContext *initVal();
|
||||||
|
|
||||||
|
|
||||||
@ -260,12 +223,8 @@ public:
|
|||||||
InitValContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
InitValContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
||||||
virtual size_t getRuleIndex() const override;
|
virtual size_t getRuleIndex() const override;
|
||||||
ExpContext *exp();
|
ExpContext *exp();
|
||||||
antlr4::tree::TerminalNode *L_BRACE();
|
|
||||||
antlr4::tree::TerminalNode *R_BRACE();
|
|
||||||
std::vector<InitValContext *> initVal();
|
std::vector<InitValContext *> initVal();
|
||||||
InitValContext* initVal(size_t i);
|
InitValContext* initVal(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;
|
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
||||||
@ -280,8 +239,6 @@ public:
|
|||||||
virtual size_t getRuleIndex() const override;
|
virtual size_t getRuleIndex() const override;
|
||||||
FuncTypeContext *funcType();
|
FuncTypeContext *funcType();
|
||||||
antlr4::tree::TerminalNode *IDENT();
|
antlr4::tree::TerminalNode *IDENT();
|
||||||
antlr4::tree::TerminalNode *L_PAREN();
|
|
||||||
antlr4::tree::TerminalNode *R_PAREN();
|
|
||||||
BlockContext *block();
|
BlockContext *block();
|
||||||
FuncFParamsContext *funcFParams();
|
FuncFParamsContext *funcFParams();
|
||||||
|
|
||||||
@ -296,8 +253,6 @@ public:
|
|||||||
public:
|
public:
|
||||||
FuncTypeContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
FuncTypeContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
||||||
virtual size_t getRuleIndex() const override;
|
virtual size_t getRuleIndex() const override;
|
||||||
antlr4::tree::TerminalNode *VOID_KW();
|
|
||||||
antlr4::tree::TerminalNode *INT_KW();
|
|
||||||
|
|
||||||
|
|
||||||
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
||||||
@ -312,8 +267,6 @@ public:
|
|||||||
virtual size_t getRuleIndex() const override;
|
virtual size_t getRuleIndex() const override;
|
||||||
std::vector<FuncFParamContext *> funcFParam();
|
std::vector<FuncFParamContext *> funcFParam();
|
||||||
FuncFParamContext* funcFParam(size_t i);
|
FuncFParamContext* funcFParam(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;
|
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
||||||
@ -328,10 +281,6 @@ public:
|
|||||||
virtual size_t getRuleIndex() const override;
|
virtual size_t getRuleIndex() const override;
|
||||||
BTypeContext *bType();
|
BTypeContext *bType();
|
||||||
antlr4::tree::TerminalNode *IDENT();
|
antlr4::tree::TerminalNode *IDENT();
|
||||||
std::vector<antlr4::tree::TerminalNode *> L_BRACKT();
|
|
||||||
antlr4::tree::TerminalNode* L_BRACKT(size_t i);
|
|
||||||
std::vector<antlr4::tree::TerminalNode *> R_BRACKT();
|
|
||||||
antlr4::tree::TerminalNode* R_BRACKT(size_t i);
|
|
||||||
std::vector<ExpContext *> exp();
|
std::vector<ExpContext *> exp();
|
||||||
ExpContext* exp(size_t i);
|
ExpContext* exp(size_t i);
|
||||||
|
|
||||||
@ -346,8 +295,6 @@ public:
|
|||||||
public:
|
public:
|
||||||
BlockContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
BlockContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
||||||
virtual size_t getRuleIndex() const override;
|
virtual size_t getRuleIndex() const override;
|
||||||
antlr4::tree::TerminalNode *L_BRACE();
|
|
||||||
antlr4::tree::TerminalNode *R_BRACE();
|
|
||||||
std::vector<BlockItemContext *> blockItem();
|
std::vector<BlockItemContext *> blockItem();
|
||||||
BlockItemContext* blockItem(size_t i);
|
BlockItemContext* blockItem(size_t i);
|
||||||
|
|
||||||
@ -362,8 +309,7 @@ public:
|
|||||||
public:
|
public:
|
||||||
BlockItemContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
BlockItemContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
||||||
virtual size_t getRuleIndex() const override;
|
virtual size_t getRuleIndex() const override;
|
||||||
ConstDeclContext *constDecl();
|
DeclContext *decl();
|
||||||
VarDeclContext *varDecl();
|
|
||||||
StmtContext *stmt();
|
StmtContext *stmt();
|
||||||
|
|
||||||
|
|
||||||
@ -376,132 +322,92 @@ public:
|
|||||||
class StmtContext : public antlr4::ParserRuleContext {
|
class StmtContext : public antlr4::ParserRuleContext {
|
||||||
public:
|
public:
|
||||||
StmtContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
StmtContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
||||||
|
|
||||||
|
StmtContext() = default;
|
||||||
|
void copyFrom(StmtContext *context);
|
||||||
|
using antlr4::ParserRuleContext::copyFrom;
|
||||||
|
|
||||||
virtual size_t getRuleIndex() const override;
|
virtual size_t getRuleIndex() const override;
|
||||||
AssignStmtContext *assignStmt();
|
|
||||||
ExpStmtContext *expStmt();
|
|
||||||
|
};
|
||||||
|
|
||||||
|
class WhileStmtContext : public StmtContext {
|
||||||
|
public:
|
||||||
|
WhileStmtContext(StmtContext *ctx);
|
||||||
|
|
||||||
|
CondContext *cond();
|
||||||
|
StmtContext *stmt();
|
||||||
|
|
||||||
|
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class IfStmtContext : public StmtContext {
|
||||||
|
public:
|
||||||
|
IfStmtContext(StmtContext *ctx);
|
||||||
|
|
||||||
|
CondContext *cond();
|
||||||
|
std::vector<StmtContext *> stmt();
|
||||||
|
StmtContext* stmt(size_t i);
|
||||||
|
|
||||||
|
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class BlockStmtContext : public StmtContext {
|
||||||
|
public:
|
||||||
|
BlockStmtContext(StmtContext *ctx);
|
||||||
|
|
||||||
BlockContext *block();
|
BlockContext *block();
|
||||||
ConditionStmtContext *conditionStmt();
|
|
||||||
WhileStmtContext *whileStmt();
|
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
||||||
BreakStmtContext *breakStmt();
|
};
|
||||||
ContinueStmtContext *continueStmt();
|
|
||||||
ReturnStmtContext *returnStmt();
|
class AssignStmtContext : public StmtContext {
|
||||||
|
public:
|
||||||
|
AssignStmtContext(StmtContext *ctx);
|
||||||
|
|
||||||
|
LValContext *lVal();
|
||||||
|
ExpContext *exp();
|
||||||
|
|
||||||
|
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class BreakStmtContext : public StmtContext {
|
||||||
|
public:
|
||||||
|
BreakStmtContext(StmtContext *ctx);
|
||||||
|
|
||||||
|
|
||||||
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class ExpStmtContext : public StmtContext {
|
||||||
|
public:
|
||||||
|
ExpStmtContext(StmtContext *ctx);
|
||||||
|
|
||||||
|
ExpContext *exp();
|
||||||
|
|
||||||
|
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class ReturnStmtContext : public StmtContext {
|
||||||
|
public:
|
||||||
|
ReturnStmtContext(StmtContext *ctx);
|
||||||
|
|
||||||
|
ExpContext *exp();
|
||||||
|
|
||||||
|
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class ContinueStmtContext : public StmtContext {
|
||||||
|
public:
|
||||||
|
ContinueStmtContext(StmtContext *ctx);
|
||||||
|
|
||||||
|
|
||||||
|
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
StmtContext* stmt();
|
StmtContext* stmt();
|
||||||
|
|
||||||
class AssignStmtContext : public antlr4::ParserRuleContext {
|
|
||||||
public:
|
|
||||||
AssignStmtContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
|
||||||
virtual size_t getRuleIndex() const override;
|
|
||||||
LValContext *lVal();
|
|
||||||
antlr4::tree::TerminalNode *ASSIGN();
|
|
||||||
ExpContext *exp();
|
|
||||||
antlr4::tree::TerminalNode *SEMICOLON();
|
|
||||||
|
|
||||||
|
|
||||||
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
AssignStmtContext* assignStmt();
|
|
||||||
|
|
||||||
class ExpStmtContext : public antlr4::ParserRuleContext {
|
|
||||||
public:
|
|
||||||
ExpStmtContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
|
||||||
virtual size_t getRuleIndex() const override;
|
|
||||||
antlr4::tree::TerminalNode *SEMICOLON();
|
|
||||||
ExpContext *exp();
|
|
||||||
|
|
||||||
|
|
||||||
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
ExpStmtContext* expStmt();
|
|
||||||
|
|
||||||
class ConditionStmtContext : public antlr4::ParserRuleContext {
|
|
||||||
public:
|
|
||||||
ConditionStmtContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
|
||||||
virtual size_t getRuleIndex() const override;
|
|
||||||
antlr4::tree::TerminalNode *IF_KW();
|
|
||||||
antlr4::tree::TerminalNode *L_PAREN();
|
|
||||||
CondContext *cond();
|
|
||||||
antlr4::tree::TerminalNode *R_PAREN();
|
|
||||||
std::vector<StmtContext *> stmt();
|
|
||||||
StmtContext* stmt(size_t i);
|
|
||||||
antlr4::tree::TerminalNode *ELSE_KW();
|
|
||||||
|
|
||||||
|
|
||||||
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
ConditionStmtContext* conditionStmt();
|
|
||||||
|
|
||||||
class WhileStmtContext : public antlr4::ParserRuleContext {
|
|
||||||
public:
|
|
||||||
WhileStmtContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
|
||||||
virtual size_t getRuleIndex() const override;
|
|
||||||
antlr4::tree::TerminalNode *WHILE_KW();
|
|
||||||
antlr4::tree::TerminalNode *L_PAREN();
|
|
||||||
CondContext *cond();
|
|
||||||
antlr4::tree::TerminalNode *R_PAREN();
|
|
||||||
StmtContext *stmt();
|
|
||||||
|
|
||||||
|
|
||||||
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
WhileStmtContext* whileStmt();
|
|
||||||
|
|
||||||
class BreakStmtContext : public antlr4::ParserRuleContext {
|
|
||||||
public:
|
|
||||||
BreakStmtContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
|
||||||
virtual size_t getRuleIndex() const override;
|
|
||||||
antlr4::tree::TerminalNode *BREAK_KW();
|
|
||||||
antlr4::tree::TerminalNode *SEMICOLON();
|
|
||||||
|
|
||||||
|
|
||||||
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
BreakStmtContext* breakStmt();
|
|
||||||
|
|
||||||
class ContinueStmtContext : public antlr4::ParserRuleContext {
|
|
||||||
public:
|
|
||||||
ContinueStmtContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
|
||||||
virtual size_t getRuleIndex() const override;
|
|
||||||
antlr4::tree::TerminalNode *CONTINUE_KW();
|
|
||||||
antlr4::tree::TerminalNode *SEMICOLON();
|
|
||||||
|
|
||||||
|
|
||||||
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
ContinueStmtContext* continueStmt();
|
|
||||||
|
|
||||||
class ReturnStmtContext : public antlr4::ParserRuleContext {
|
|
||||||
public:
|
|
||||||
ReturnStmtContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
|
||||||
virtual size_t getRuleIndex() const override;
|
|
||||||
antlr4::tree::TerminalNode *RETURN_KW();
|
|
||||||
antlr4::tree::TerminalNode *SEMICOLON();
|
|
||||||
ExpContext *exp();
|
|
||||||
|
|
||||||
|
|
||||||
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
ReturnStmtContext* returnStmt();
|
|
||||||
|
|
||||||
class ExpContext : public antlr4::ParserRuleContext {
|
class ExpContext : public antlr4::ParserRuleContext {
|
||||||
public:
|
public:
|
||||||
ExpContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
ExpContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
||||||
@ -533,12 +439,8 @@ public:
|
|||||||
LValContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
LValContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
||||||
virtual size_t getRuleIndex() const override;
|
virtual size_t getRuleIndex() const override;
|
||||||
antlr4::tree::TerminalNode *IDENT();
|
antlr4::tree::TerminalNode *IDENT();
|
||||||
std::vector<antlr4::tree::TerminalNode *> L_BRACKT();
|
|
||||||
antlr4::tree::TerminalNode* L_BRACKT(size_t i);
|
|
||||||
std::vector<ExpContext *> exp();
|
std::vector<ExpContext *> exp();
|
||||||
ExpContext* exp(size_t i);
|
ExpContext* exp(size_t i);
|
||||||
std::vector<antlr4::tree::TerminalNode *> R_BRACKT();
|
|
||||||
antlr4::tree::TerminalNode* R_BRACKT(size_t i);
|
|
||||||
|
|
||||||
|
|
||||||
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
||||||
@ -551,9 +453,7 @@ public:
|
|||||||
public:
|
public:
|
||||||
PrimaryExpContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
PrimaryExpContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
||||||
virtual size_t getRuleIndex() const override;
|
virtual size_t getRuleIndex() const override;
|
||||||
antlr4::tree::TerminalNode *L_PAREN();
|
|
||||||
ExpContext *exp();
|
ExpContext *exp();
|
||||||
antlr4::tree::TerminalNode *R_PAREN();
|
|
||||||
LValContext *lVal();
|
LValContext *lVal();
|
||||||
NumberContext *number();
|
NumberContext *number();
|
||||||
|
|
||||||
@ -597,7 +497,8 @@ public:
|
|||||||
UnaryExpContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
UnaryExpContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
||||||
virtual size_t getRuleIndex() const override;
|
virtual size_t getRuleIndex() const override;
|
||||||
PrimaryExpContext *primaryExp();
|
PrimaryExpContext *primaryExp();
|
||||||
CalleeContext *callee();
|
antlr4::tree::TerminalNode *IDENT();
|
||||||
|
FuncRParamsContext *funcRParams();
|
||||||
UnaryOpContext *unaryOp();
|
UnaryOpContext *unaryOp();
|
||||||
UnaryExpContext *unaryExp();
|
UnaryExpContext *unaryExp();
|
||||||
|
|
||||||
@ -608,29 +509,10 @@ public:
|
|||||||
|
|
||||||
UnaryExpContext* unaryExp();
|
UnaryExpContext* unaryExp();
|
||||||
|
|
||||||
class CalleeContext : public antlr4::ParserRuleContext {
|
|
||||||
public:
|
|
||||||
CalleeContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
|
||||||
virtual size_t getRuleIndex() const override;
|
|
||||||
antlr4::tree::TerminalNode *IDENT();
|
|
||||||
antlr4::tree::TerminalNode *L_PAREN();
|
|
||||||
antlr4::tree::TerminalNode *R_PAREN();
|
|
||||||
FuncRParamsContext *funcRParams();
|
|
||||||
|
|
||||||
|
|
||||||
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
CalleeContext* callee();
|
|
||||||
|
|
||||||
class UnaryOpContext : public antlr4::ParserRuleContext {
|
class UnaryOpContext : public antlr4::ParserRuleContext {
|
||||||
public:
|
public:
|
||||||
UnaryOpContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
UnaryOpContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
||||||
virtual size_t getRuleIndex() const override;
|
virtual size_t getRuleIndex() const override;
|
||||||
antlr4::tree::TerminalNode *PLUS();
|
|
||||||
antlr4::tree::TerminalNode *MINUS();
|
|
||||||
antlr4::tree::TerminalNode *NOT();
|
|
||||||
|
|
||||||
|
|
||||||
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
||||||
@ -643,10 +525,8 @@ public:
|
|||||||
public:
|
public:
|
||||||
FuncRParamsContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
FuncRParamsContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
||||||
virtual size_t getRuleIndex() const override;
|
virtual size_t getRuleIndex() const override;
|
||||||
std::vector<ParamContext *> param();
|
std::vector<FuncRParamContext *> funcRParam();
|
||||||
ParamContext* param(size_t i);
|
FuncRParamContext* funcRParam(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;
|
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
||||||
@ -655,28 +535,26 @@ public:
|
|||||||
|
|
||||||
FuncRParamsContext* funcRParams();
|
FuncRParamsContext* funcRParams();
|
||||||
|
|
||||||
class ParamContext : public antlr4::ParserRuleContext {
|
class FuncRParamContext : public antlr4::ParserRuleContext {
|
||||||
public:
|
public:
|
||||||
ParamContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
FuncRParamContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
||||||
virtual size_t getRuleIndex() const override;
|
virtual size_t getRuleIndex() const override;
|
||||||
ExpContext *exp();
|
ExpContext *exp();
|
||||||
antlr4::tree::TerminalNode *STRING();
|
antlr4::tree::TerminalNode *StringLiteral();
|
||||||
|
|
||||||
|
|
||||||
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
ParamContext* param();
|
FuncRParamContext* funcRParam();
|
||||||
|
|
||||||
class MulExpContext : public antlr4::ParserRuleContext {
|
class MulExpContext : public antlr4::ParserRuleContext {
|
||||||
public:
|
public:
|
||||||
MulExpContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
MulExpContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
||||||
virtual size_t getRuleIndex() const override;
|
virtual size_t getRuleIndex() const override;
|
||||||
std::vector<UnaryExpContext *> unaryExp();
|
UnaryExpContext *unaryExp();
|
||||||
UnaryExpContext* unaryExp(size_t i);
|
MulExpContext *mulExp();
|
||||||
std::vector<MulOpContext *> mulOp();
|
|
||||||
MulOpContext* mulOp(size_t i);
|
|
||||||
|
|
||||||
|
|
||||||
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
||||||
@ -684,30 +562,13 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
MulExpContext* mulExp();
|
MulExpContext* mulExp();
|
||||||
|
MulExpContext* mulExp(int precedence);
|
||||||
class MulOpContext : public antlr4::ParserRuleContext {
|
|
||||||
public:
|
|
||||||
MulOpContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
|
||||||
virtual size_t getRuleIndex() const override;
|
|
||||||
antlr4::tree::TerminalNode *MUL();
|
|
||||||
antlr4::tree::TerminalNode *DIV();
|
|
||||||
antlr4::tree::TerminalNode *MOD();
|
|
||||||
|
|
||||||
|
|
||||||
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
MulOpContext* mulOp();
|
|
||||||
|
|
||||||
class AddExpContext : public antlr4::ParserRuleContext {
|
class AddExpContext : public antlr4::ParserRuleContext {
|
||||||
public:
|
public:
|
||||||
AddExpContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
AddExpContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
||||||
virtual size_t getRuleIndex() const override;
|
virtual size_t getRuleIndex() const override;
|
||||||
std::vector<MulExpContext *> mulExp();
|
MulExpContext *mulExp();
|
||||||
MulExpContext* mulExp(size_t i);
|
AddExpContext *addExp();
|
||||||
std::vector<AddOpContext *> addOp();
|
|
||||||
AddOpContext* addOp(size_t i);
|
|
||||||
|
|
||||||
|
|
||||||
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
||||||
@ -715,29 +576,13 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
AddExpContext* addExp();
|
AddExpContext* addExp();
|
||||||
|
AddExpContext* addExp(int precedence);
|
||||||
class AddOpContext : public antlr4::ParserRuleContext {
|
|
||||||
public:
|
|
||||||
AddOpContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
|
||||||
virtual size_t getRuleIndex() const override;
|
|
||||||
antlr4::tree::TerminalNode *PLUS();
|
|
||||||
antlr4::tree::TerminalNode *MINUS();
|
|
||||||
|
|
||||||
|
|
||||||
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
AddOpContext* addOp();
|
|
||||||
|
|
||||||
class RelExpContext : public antlr4::ParserRuleContext {
|
class RelExpContext : public antlr4::ParserRuleContext {
|
||||||
public:
|
public:
|
||||||
RelExpContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
RelExpContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
||||||
virtual size_t getRuleIndex() const override;
|
virtual size_t getRuleIndex() const override;
|
||||||
std::vector<AddExpContext *> addExp();
|
AddExpContext *addExp();
|
||||||
AddExpContext* addExp(size_t i);
|
RelExpContext *relExp();
|
||||||
std::vector<RelOpContext *> relOp();
|
|
||||||
RelOpContext* relOp(size_t i);
|
|
||||||
|
|
||||||
|
|
||||||
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
||||||
@ -745,31 +590,13 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
RelExpContext* relExp();
|
RelExpContext* relExp();
|
||||||
|
RelExpContext* relExp(int precedence);
|
||||||
class RelOpContext : public antlr4::ParserRuleContext {
|
|
||||||
public:
|
|
||||||
RelOpContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
|
||||||
virtual size_t getRuleIndex() const override;
|
|
||||||
antlr4::tree::TerminalNode *LT();
|
|
||||||
antlr4::tree::TerminalNode *GT();
|
|
||||||
antlr4::tree::TerminalNode *LE();
|
|
||||||
antlr4::tree::TerminalNode *GE();
|
|
||||||
|
|
||||||
|
|
||||||
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
RelOpContext* relOp();
|
|
||||||
|
|
||||||
class EqExpContext : public antlr4::ParserRuleContext {
|
class EqExpContext : public antlr4::ParserRuleContext {
|
||||||
public:
|
public:
|
||||||
EqExpContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
EqExpContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
||||||
virtual size_t getRuleIndex() const override;
|
virtual size_t getRuleIndex() const override;
|
||||||
std::vector<RelExpContext *> relExp();
|
RelExpContext *relExp();
|
||||||
RelExpContext* relExp(size_t i);
|
EqExpContext *eqExp();
|
||||||
std::vector<EqOpContext *> eqOp();
|
|
||||||
EqOpContext* eqOp(size_t i);
|
|
||||||
|
|
||||||
|
|
||||||
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
||||||
@ -777,29 +604,13 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
EqExpContext* eqExp();
|
EqExpContext* eqExp();
|
||||||
|
EqExpContext* eqExp(int precedence);
|
||||||
class EqOpContext : public antlr4::ParserRuleContext {
|
|
||||||
public:
|
|
||||||
EqOpContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
|
||||||
virtual size_t getRuleIndex() const override;
|
|
||||||
antlr4::tree::TerminalNode *EQ();
|
|
||||||
antlr4::tree::TerminalNode *NEQ();
|
|
||||||
|
|
||||||
|
|
||||||
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
EqOpContext* eqOp();
|
|
||||||
|
|
||||||
class LAndExpContext : public antlr4::ParserRuleContext {
|
class LAndExpContext : public antlr4::ParserRuleContext {
|
||||||
public:
|
public:
|
||||||
LAndExpContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
LAndExpContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
||||||
virtual size_t getRuleIndex() const override;
|
virtual size_t getRuleIndex() const override;
|
||||||
std::vector<EqExpContext *> eqExp();
|
EqExpContext *eqExp();
|
||||||
EqExpContext* eqExp(size_t i);
|
LAndExpContext *lAndExp();
|
||||||
std::vector<antlr4::tree::TerminalNode *> AND();
|
|
||||||
antlr4::tree::TerminalNode* AND(size_t i);
|
|
||||||
|
|
||||||
|
|
||||||
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
||||||
@ -807,15 +618,13 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
LAndExpContext* lAndExp();
|
LAndExpContext* lAndExp();
|
||||||
|
LAndExpContext* lAndExp(int precedence);
|
||||||
class LOrExpContext : public antlr4::ParserRuleContext {
|
class LOrExpContext : public antlr4::ParserRuleContext {
|
||||||
public:
|
public:
|
||||||
LOrExpContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
LOrExpContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
||||||
virtual size_t getRuleIndex() const override;
|
virtual size_t getRuleIndex() const override;
|
||||||
std::vector<LAndExpContext *> lAndExp();
|
LAndExpContext *lAndExp();
|
||||||
LAndExpContext* lAndExp(size_t i);
|
LOrExpContext *lOrExp();
|
||||||
std::vector<antlr4::tree::TerminalNode *> OR();
|
|
||||||
antlr4::tree::TerminalNode* OR(size_t i);
|
|
||||||
|
|
||||||
|
|
||||||
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
|
||||||
@ -823,7 +632,7 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
LOrExpContext* lOrExp();
|
LOrExpContext* lOrExp();
|
||||||
|
LOrExpContext* lOrExp(int precedence);
|
||||||
class ConstExpContext : public antlr4::ParserRuleContext {
|
class ConstExpContext : public antlr4::ParserRuleContext {
|
||||||
public:
|
public:
|
||||||
ConstExpContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
ConstExpContext(antlr4::ParserRuleContext *parent, size_t invokingState);
|
||||||
@ -838,6 +647,15 @@ public:
|
|||||||
ConstExpContext* constExp();
|
ConstExpContext* constExp();
|
||||||
|
|
||||||
|
|
||||||
|
bool sempred(antlr4::RuleContext *_localctx, size_t ruleIndex, size_t predicateIndex) override;
|
||||||
|
|
||||||
|
bool mulExpSempred(MulExpContext *_localctx, size_t predicateIndex);
|
||||||
|
bool addExpSempred(AddExpContext *_localctx, size_t predicateIndex);
|
||||||
|
bool relExpSempred(RelExpContext *_localctx, size_t predicateIndex);
|
||||||
|
bool eqExpSempred(EqExpContext *_localctx, size_t predicateIndex);
|
||||||
|
bool lAndExpSempred(LAndExpContext *_localctx, size_t predicateIndex);
|
||||||
|
bool lOrExpSempred(LOrExpContext *_localctx, size_t predicateIndex);
|
||||||
|
|
||||||
// By default the static state used to implement the parser is lazily initialized during the first
|
// 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
|
// call to the constructor. You can call this function if you wish to initialize the static state
|
||||||
// ahead of time.
|
// ahead of time.
|
||||||
108
include/antlrgen/SysyVisitor.h
Normal file
108
include/antlrgen/SysyVisitor.h
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
|
||||||
|
// Generated from Sysy.g4 by ANTLR 4.12.0
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
|
#include "antlr4-runtime.h"
|
||||||
|
#include "SysyParser.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace antlrSysY {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class defines an abstract visitor for a parse tree
|
||||||
|
* produced by SysyParser.
|
||||||
|
*/
|
||||||
|
class SysyVisitor : public antlr4::tree::AbstractParseTreeVisitor {
|
||||||
|
public:
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Visit parse trees produced by SysyParser.
|
||||||
|
*/
|
||||||
|
virtual std::any visitProgram(SysyParser::ProgramContext *context) = 0;
|
||||||
|
|
||||||
|
virtual std::any visitCompUnit(SysyParser::CompUnitContext *context) = 0;
|
||||||
|
|
||||||
|
virtual std::any visitDecl(SysyParser::DeclContext *context) = 0;
|
||||||
|
|
||||||
|
virtual std::any visitConstDecl(SysyParser::ConstDeclContext *context) = 0;
|
||||||
|
|
||||||
|
virtual std::any visitBType(SysyParser::BTypeContext *context) = 0;
|
||||||
|
|
||||||
|
virtual std::any visitConstDef(SysyParser::ConstDefContext *context) = 0;
|
||||||
|
|
||||||
|
virtual std::any visitConstInitVal(SysyParser::ConstInitValContext *context) = 0;
|
||||||
|
|
||||||
|
virtual std::any visitVarDecl(SysyParser::VarDeclContext *context) = 0;
|
||||||
|
|
||||||
|
virtual std::any visitVarDef(SysyParser::VarDefContext *context) = 0;
|
||||||
|
|
||||||
|
virtual std::any visitInitVal(SysyParser::InitValContext *context) = 0;
|
||||||
|
|
||||||
|
virtual std::any visitFuncDef(SysyParser::FuncDefContext *context) = 0;
|
||||||
|
|
||||||
|
virtual std::any visitFuncType(SysyParser::FuncTypeContext *context) = 0;
|
||||||
|
|
||||||
|
virtual std::any visitFuncFParams(SysyParser::FuncFParamsContext *context) = 0;
|
||||||
|
|
||||||
|
virtual std::any visitFuncFParam(SysyParser::FuncFParamContext *context) = 0;
|
||||||
|
|
||||||
|
virtual std::any visitBlock(SysyParser::BlockContext *context) = 0;
|
||||||
|
|
||||||
|
virtual std::any visitBlockItem(SysyParser::BlockItemContext *context) = 0;
|
||||||
|
|
||||||
|
virtual std::any visitAssignStmt(SysyParser::AssignStmtContext *context) = 0;
|
||||||
|
|
||||||
|
virtual std::any visitExpStmt(SysyParser::ExpStmtContext *context) = 0;
|
||||||
|
|
||||||
|
virtual std::any visitBlockStmt(SysyParser::BlockStmtContext *context) = 0;
|
||||||
|
|
||||||
|
virtual std::any visitIfStmt(SysyParser::IfStmtContext *context) = 0;
|
||||||
|
|
||||||
|
virtual std::any visitWhileStmt(SysyParser::WhileStmtContext *context) = 0;
|
||||||
|
|
||||||
|
virtual std::any visitBreakStmt(SysyParser::BreakStmtContext *context) = 0;
|
||||||
|
|
||||||
|
virtual std::any visitContinueStmt(SysyParser::ContinueStmtContext *context) = 0;
|
||||||
|
|
||||||
|
virtual std::any visitReturnStmt(SysyParser::ReturnStmtContext *context) = 0;
|
||||||
|
|
||||||
|
virtual std::any visitExp(SysyParser::ExpContext *context) = 0;
|
||||||
|
|
||||||
|
virtual std::any visitCond(SysyParser::CondContext *context) = 0;
|
||||||
|
|
||||||
|
virtual std::any visitLVal(SysyParser::LValContext *context) = 0;
|
||||||
|
|
||||||
|
virtual std::any visitPrimaryExp(SysyParser::PrimaryExpContext *context) = 0;
|
||||||
|
|
||||||
|
virtual std::any visitNumber(SysyParser::NumberContext *context) = 0;
|
||||||
|
|
||||||
|
virtual std::any visitIntConst(SysyParser::IntConstContext *context) = 0;
|
||||||
|
|
||||||
|
virtual std::any visitUnaryExp(SysyParser::UnaryExpContext *context) = 0;
|
||||||
|
|
||||||
|
virtual std::any visitUnaryOp(SysyParser::UnaryOpContext *context) = 0;
|
||||||
|
|
||||||
|
virtual std::any visitFuncRParams(SysyParser::FuncRParamsContext *context) = 0;
|
||||||
|
|
||||||
|
virtual std::any visitFuncRParam(SysyParser::FuncRParamContext *context) = 0;
|
||||||
|
|
||||||
|
virtual std::any visitMulExp(SysyParser::MulExpContext *context) = 0;
|
||||||
|
|
||||||
|
virtual std::any visitAddExp(SysyParser::AddExpContext *context) = 0;
|
||||||
|
|
||||||
|
virtual std::any visitRelExp(SysyParser::RelExpContext *context) = 0;
|
||||||
|
|
||||||
|
virtual std::any visitEqExp(SysyParser::EqExpContext *context) = 0;
|
||||||
|
|
||||||
|
virtual std::any visitLAndExp(SysyParser::LAndExpContext *context) = 0;
|
||||||
|
|
||||||
|
virtual std::any visitLOrExp(SysyParser::LOrExpContext *context) = 0;
|
||||||
|
|
||||||
|
virtual std::any visitConstExp(SysyParser::ConstExpContext *context) = 0;
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace antlrSysY
|
||||||
@ -1,8 +1,11 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
filename="Sysy.g4"
|
||||||
mkdir -p build/antlr-gen
|
mkdir -p build/antlr-gen
|
||||||
mkdir -p include
|
mkdir -p include
|
||||||
mkdir -p src
|
mkdir -p src
|
||||||
java -jar ./tools/antlr-4.12.0-complete.jar -no-listener -visitor -Dlanguage=Cpp -package antlrSysY -o build/antlr-gen SysY.g4
|
rm -fv build/antlr-gen/*
|
||||||
cp build/antlr-gen/*.cpp src/
|
java -jar ./tools/antlr-4.12.0-complete.jar -no-listener -visitor -Dlanguage=Cpp -package antlrSysY -o build/antlr-gen $filename
|
||||||
cp build/antlr-gen/*.h include/
|
mkdir -p src/antlrgen
|
||||||
|
mkdir -p include/antlrgen
|
||||||
|
cp build/antlr-gen/*.cpp src/antlrgen/
|
||||||
|
cp build/antlr-gen/*.h include/antlrgen/
|
||||||
@ -1,9 +0,0 @@
|
|||||||
|
|
||||||
// Generated from SysY.g4 by ANTLR 4.12.0
|
|
||||||
|
|
||||||
|
|
||||||
#include "SysYBaseVisitor.h"
|
|
||||||
|
|
||||||
|
|
||||||
using namespace antlrSysY;
|
|
||||||
|
|
||||||
@ -1,235 +0,0 @@
|
|||||||
|
|
||||||
// Generated from SysY.g4 by ANTLR 4.12.0
|
|
||||||
|
|
||||||
|
|
||||||
#include "SysYLexer.h"
|
|
||||||
|
|
||||||
|
|
||||||
using namespace antlr4;
|
|
||||||
|
|
||||||
using namespace antlrSysY;
|
|
||||||
|
|
||||||
|
|
||||||
using namespace antlr4;
|
|
||||||
|
|
||||||
namespace {
|
|
||||||
|
|
||||||
struct SysYLexerStaticData final {
|
|
||||||
SysYLexerStaticData(std::vector<std::string> ruleNames,
|
|
||||||
std::vector<std::string> channelNames,
|
|
||||||
std::vector<std::string> modeNames,
|
|
||||||
std::vector<std::string> literalNames,
|
|
||||||
std::vector<std::string> symbolicNames)
|
|
||||||
: ruleNames(std::move(ruleNames)), channelNames(std::move(channelNames)),
|
|
||||||
modeNames(std::move(modeNames)), literalNames(std::move(literalNames)),
|
|
||||||
symbolicNames(std::move(symbolicNames)),
|
|
||||||
vocabulary(this->literalNames, this->symbolicNames) {}
|
|
||||||
|
|
||||||
SysYLexerStaticData(const SysYLexerStaticData&) = delete;
|
|
||||||
SysYLexerStaticData(SysYLexerStaticData&&) = delete;
|
|
||||||
SysYLexerStaticData& operator=(const SysYLexerStaticData&) = delete;
|
|
||||||
SysYLexerStaticData& operator=(SysYLexerStaticData&&) = delete;
|
|
||||||
|
|
||||||
std::vector<antlr4::dfa::DFA> decisionToDFA;
|
|
||||||
antlr4::atn::PredictionContextCache sharedContextCache;
|
|
||||||
const std::vector<std::string> ruleNames;
|
|
||||||
const std::vector<std::string> channelNames;
|
|
||||||
const std::vector<std::string> modeNames;
|
|
||||||
const std::vector<std::string> literalNames;
|
|
||||||
const std::vector<std::string> symbolicNames;
|
|
||||||
const antlr4::dfa::Vocabulary vocabulary;
|
|
||||||
antlr4::atn::SerializedATNView serializedATN;
|
|
||||||
std::unique_ptr<antlr4::atn::ATN> atn;
|
|
||||||
};
|
|
||||||
|
|
||||||
::antlr4::internal::OnceFlag sysylexerLexerOnceFlag;
|
|
||||||
SysYLexerStaticData *sysylexerLexerStaticData = nullptr;
|
|
||||||
|
|
||||||
void sysylexerLexerInitialize() {
|
|
||||||
assert(sysylexerLexerStaticData == nullptr);
|
|
||||||
auto staticData = std::make_unique<SysYLexerStaticData>(
|
|
||||||
std::vector<std::string>{
|
|
||||||
"CONST_KW", "INT_KW", "VOID_KW", "IF_KW", "ELSE_KW", "WHILE_KW", "BREAK_KW",
|
|
||||||
"CONTINUE_KW", "RETURN_KW", "IDENT", "DECIMAL_CONST", "OCTAL_CONST",
|
|
||||||
"HEXADECIMAL_CONST", "STRING", "REGULAR_CHAR", "ESC", "PLUS", "MINUS",
|
|
||||||
"NOT", "MUL", "DIV", "MOD", "ASSIGN", "EQ", "NEQ", "LT", "GT", "LE",
|
|
||||||
"GE", "AND", "OR", "L_PAREN", "R_PAREN", "L_BRACE", "R_BRACE", "L_BRACKT",
|
|
||||||
"R_BRACKT", "COMMA", "SEMICOLON", "DOUBLE_QUOTE", "WS", "LINE_COMMENT",
|
|
||||||
"MULTILINE_COMMENT"
|
|
||||||
},
|
|
||||||
std::vector<std::string>{
|
|
||||||
"DEFAULT_TOKEN_CHANNEL", "HIDDEN"
|
|
||||||
},
|
|
||||||
std::vector<std::string>{
|
|
||||||
"DEFAULT_MODE"
|
|
||||||
},
|
|
||||||
std::vector<std::string>{
|
|
||||||
"", "'const'", "'int'", "'void'", "'if'", "'else'", "'while'", "'break'",
|
|
||||||
"'continue'", "'return'", "", "", "", "", "", "'+'", "'-'", "'!'",
|
|
||||||
"'*'", "'/'", "'%'", "'='", "'=='", "'!='", "'<'", "'>'", "'<='",
|
|
||||||
"'>='", "'&&'", "'||'", "'('", "')'", "'{'", "'}'", "'['", "']'",
|
|
||||||
"','", "';'", "'\"'"
|
|
||||||
},
|
|
||||||
std::vector<std::string>{
|
|
||||||
"", "CONST_KW", "INT_KW", "VOID_KW", "IF_KW", "ELSE_KW", "WHILE_KW",
|
|
||||||
"BREAK_KW", "CONTINUE_KW", "RETURN_KW", "IDENT", "DECIMAL_CONST",
|
|
||||||
"OCTAL_CONST", "HEXADECIMAL_CONST", "STRING", "PLUS", "MINUS", "NOT",
|
|
||||||
"MUL", "DIV", "MOD", "ASSIGN", "EQ", "NEQ", "LT", "GT", "LE", "GE",
|
|
||||||
"AND", "OR", "L_PAREN", "R_PAREN", "L_BRACE", "R_BRACE", "L_BRACKT",
|
|
||||||
"R_BRACKT", "COMMA", "SEMICOLON", "DOUBLE_QUOTE", "WS", "LINE_COMMENT",
|
|
||||||
"MULTILINE_COMMENT"
|
|
||||||
}
|
|
||||||
);
|
|
||||||
static const int32_t serializedATNSegment[] = {
|
|
||||||
4,0,41,281,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,
|
|
||||||
6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,13,2,14,
|
|
||||||
7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2,20,7,20,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,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,2,1,2,1,2,1,2,1,2,1,3,
|
|
||||||
1,3,1,3,1,4,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,6,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,8,1,8,1,8,1,8,1,8,1,8,1,8,
|
|
||||||
1,9,1,9,1,9,4,9,142,8,9,11,9,12,9,143,3,9,146,8,9,1,10,1,10,1,10,4,10,
|
|
||||||
151,8,10,11,10,12,10,152,3,10,155,8,10,1,11,1,11,1,11,4,11,160,8,11,11,
|
|
||||||
11,12,11,161,3,11,164,8,11,1,12,1,12,1,12,1,12,3,12,170,8,12,1,12,4,12,
|
|
||||||
173,8,12,11,12,12,12,174,1,13,1,13,5,13,179,8,13,10,13,12,13,182,9,13,
|
|
||||||
1,13,1,13,1,14,1,14,3,14,188,8,14,1,15,1,15,1,15,1,15,3,15,194,8,15,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,
|
|
||||||
23,1,23,1,23,1,24,1,24,1,24,1,25,1,25,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,30,1,31,1,31,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,39,1,39,1,40,4,40,251,
|
|
||||||
8,40,11,40,12,40,252,1,40,1,40,1,41,1,41,1,41,1,41,5,41,261,8,41,10,41,
|
|
||||||
12,41,264,9,41,1,41,1,41,1,42,1,42,1,42,1,42,5,42,272,8,42,10,42,12,42,
|
|
||||||
275,9,42,1,42,1,42,1,42,1,42,1,42,2,180,273,0,43,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,0,31,0,33,15,35,
|
|
||||||
16,37,17,39,18,41,19,43,20,45,21,47,22,49,23,51,24,53,25,55,26,57,27,
|
|
||||||
59,28,61,29,63,30,65,31,67,32,69,33,71,34,73,35,75,36,77,37,79,38,81,
|
|
||||||
39,83,40,85,41,1,0,8,3,0,65,90,95,95,97,122,4,0,48,57,65,90,95,95,97,
|
|
||||||
122,1,0,49,57,1,0,48,57,1,0,48,55,3,0,48,57,65,70,97,102,3,0,9,10,13,
|
|
||||||
13,32,32,2,0,10,10,13,13,292,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,
|
|
||||||
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,1,87,1,0,0,0,3,93,1,0,0,0,5,97,1,0,0,0,7,102,1,0,0,0,9,105,1,0,0,0,
|
|
||||||
11,110,1,0,0,0,13,116,1,0,0,0,15,122,1,0,0,0,17,131,1,0,0,0,19,145,1,
|
|
||||||
0,0,0,21,154,1,0,0,0,23,163,1,0,0,0,25,169,1,0,0,0,27,176,1,0,0,0,29,
|
|
||||||
187,1,0,0,0,31,193,1,0,0,0,33,195,1,0,0,0,35,197,1,0,0,0,37,199,1,0,0,
|
|
||||||
0,39,201,1,0,0,0,41,203,1,0,0,0,43,205,1,0,0,0,45,207,1,0,0,0,47,209,
|
|
||||||
1,0,0,0,49,212,1,0,0,0,51,215,1,0,0,0,53,217,1,0,0,0,55,219,1,0,0,0,57,
|
|
||||||
222,1,0,0,0,59,225,1,0,0,0,61,228,1,0,0,0,63,231,1,0,0,0,65,233,1,0,0,
|
|
||||||
0,67,235,1,0,0,0,69,237,1,0,0,0,71,239,1,0,0,0,73,241,1,0,0,0,75,243,
|
|
||||||
1,0,0,0,77,245,1,0,0,0,79,247,1,0,0,0,81,250,1,0,0,0,83,256,1,0,0,0,85,
|
|
||||||
267,1,0,0,0,87,88,5,99,0,0,88,89,5,111,0,0,89,90,5,110,0,0,90,91,5,115,
|
|
||||||
0,0,91,92,5,116,0,0,92,2,1,0,0,0,93,94,5,105,0,0,94,95,5,110,0,0,95,96,
|
|
||||||
5,116,0,0,96,4,1,0,0,0,97,98,5,118,0,0,98,99,5,111,0,0,99,100,5,105,0,
|
|
||||||
0,100,101,5,100,0,0,101,6,1,0,0,0,102,103,5,105,0,0,103,104,5,102,0,0,
|
|
||||||
104,8,1,0,0,0,105,106,5,101,0,0,106,107,5,108,0,0,107,108,5,115,0,0,108,
|
|
||||||
109,5,101,0,0,109,10,1,0,0,0,110,111,5,119,0,0,111,112,5,104,0,0,112,
|
|
||||||
113,5,105,0,0,113,114,5,108,0,0,114,115,5,101,0,0,115,12,1,0,0,0,116,
|
|
||||||
117,5,98,0,0,117,118,5,114,0,0,118,119,5,101,0,0,119,120,5,97,0,0,120,
|
|
||||||
121,5,107,0,0,121,14,1,0,0,0,122,123,5,99,0,0,123,124,5,111,0,0,124,125,
|
|
||||||
5,110,0,0,125,126,5,116,0,0,126,127,5,105,0,0,127,128,5,110,0,0,128,129,
|
|
||||||
5,117,0,0,129,130,5,101,0,0,130,16,1,0,0,0,131,132,5,114,0,0,132,133,
|
|
||||||
5,101,0,0,133,134,5,116,0,0,134,135,5,117,0,0,135,136,5,114,0,0,136,137,
|
|
||||||
5,110,0,0,137,18,1,0,0,0,138,146,7,0,0,0,139,141,7,0,0,0,140,142,7,1,
|
|
||||||
0,0,141,140,1,0,0,0,142,143,1,0,0,0,143,141,1,0,0,0,143,144,1,0,0,0,144,
|
|
||||||
146,1,0,0,0,145,138,1,0,0,0,145,139,1,0,0,0,146,20,1,0,0,0,147,155,7,
|
|
||||||
2,0,0,148,150,7,2,0,0,149,151,7,3,0,0,150,149,1,0,0,0,151,152,1,0,0,0,
|
|
||||||
152,150,1,0,0,0,152,153,1,0,0,0,153,155,1,0,0,0,154,147,1,0,0,0,154,148,
|
|
||||||
1,0,0,0,155,22,1,0,0,0,156,164,5,48,0,0,157,159,5,48,0,0,158,160,7,4,
|
|
||||||
0,0,159,158,1,0,0,0,160,161,1,0,0,0,161,159,1,0,0,0,161,162,1,0,0,0,162,
|
|
||||||
164,1,0,0,0,163,156,1,0,0,0,163,157,1,0,0,0,164,24,1,0,0,0,165,166,5,
|
|
||||||
48,0,0,166,170,5,120,0,0,167,168,5,48,0,0,168,170,5,88,0,0,169,165,1,
|
|
||||||
0,0,0,169,167,1,0,0,0,170,172,1,0,0,0,171,173,7,5,0,0,172,171,1,0,0,0,
|
|
||||||
173,174,1,0,0,0,174,172,1,0,0,0,174,175,1,0,0,0,175,26,1,0,0,0,176,180,
|
|
||||||
3,79,39,0,177,179,3,29,14,0,178,177,1,0,0,0,179,182,1,0,0,0,180,181,1,
|
|
||||||
0,0,0,180,178,1,0,0,0,181,183,1,0,0,0,182,180,1,0,0,0,183,184,3,79,39,
|
|
||||||
0,184,28,1,0,0,0,185,188,3,31,15,0,186,188,9,0,0,0,187,185,1,0,0,0,187,
|
|
||||||
186,1,0,0,0,188,30,1,0,0,0,189,190,5,92,0,0,190,194,5,34,0,0,191,192,
|
|
||||||
5,92,0,0,192,194,5,92,0,0,193,189,1,0,0,0,193,191,1,0,0,0,194,32,1,0,
|
|
||||||
0,0,195,196,5,43,0,0,196,34,1,0,0,0,197,198,5,45,0,0,198,36,1,0,0,0,199,
|
|
||||||
200,5,33,0,0,200,38,1,0,0,0,201,202,5,42,0,0,202,40,1,0,0,0,203,204,5,
|
|
||||||
47,0,0,204,42,1,0,0,0,205,206,5,37,0,0,206,44,1,0,0,0,207,208,5,61,0,
|
|
||||||
0,208,46,1,0,0,0,209,210,5,61,0,0,210,211,5,61,0,0,211,48,1,0,0,0,212,
|
|
||||||
213,5,33,0,0,213,214,5,61,0,0,214,50,1,0,0,0,215,216,5,60,0,0,216,52,
|
|
||||||
1,0,0,0,217,218,5,62,0,0,218,54,1,0,0,0,219,220,5,60,0,0,220,221,5,61,
|
|
||||||
0,0,221,56,1,0,0,0,222,223,5,62,0,0,223,224,5,61,0,0,224,58,1,0,0,0,225,
|
|
||||||
226,5,38,0,0,226,227,5,38,0,0,227,60,1,0,0,0,228,229,5,124,0,0,229,230,
|
|
||||||
5,124,0,0,230,62,1,0,0,0,231,232,5,40,0,0,232,64,1,0,0,0,233,234,5,41,
|
|
||||||
0,0,234,66,1,0,0,0,235,236,5,123,0,0,236,68,1,0,0,0,237,238,5,125,0,0,
|
|
||||||
238,70,1,0,0,0,239,240,5,91,0,0,240,72,1,0,0,0,241,242,5,93,0,0,242,74,
|
|
||||||
1,0,0,0,243,244,5,44,0,0,244,76,1,0,0,0,245,246,5,59,0,0,246,78,1,0,0,
|
|
||||||
0,247,248,5,34,0,0,248,80,1,0,0,0,249,251,7,6,0,0,250,249,1,0,0,0,251,
|
|
||||||
252,1,0,0,0,252,250,1,0,0,0,252,253,1,0,0,0,253,254,1,0,0,0,254,255,6,
|
|
||||||
40,0,0,255,82,1,0,0,0,256,257,5,47,0,0,257,258,5,47,0,0,258,262,1,0,0,
|
|
||||||
0,259,261,8,7,0,0,260,259,1,0,0,0,261,264,1,0,0,0,262,260,1,0,0,0,262,
|
|
||||||
263,1,0,0,0,263,265,1,0,0,0,264,262,1,0,0,0,265,266,6,41,0,0,266,84,1,
|
|
||||||
0,0,0,267,268,5,47,0,0,268,269,5,42,0,0,269,273,1,0,0,0,270,272,9,0,0,
|
|
||||||
0,271,270,1,0,0,0,272,275,1,0,0,0,273,274,1,0,0,0,273,271,1,0,0,0,274,
|
|
||||||
276,1,0,0,0,275,273,1,0,0,0,276,277,5,42,0,0,277,278,5,47,0,0,278,279,
|
|
||||||
1,0,0,0,279,280,6,42,0,0,280,86,1,0,0,0,15,0,143,145,152,154,161,163,
|
|
||||||
169,174,180,187,193,252,262,273,1,6,0,0
|
|
||||||
};
|
|
||||||
staticData->serializedATN = antlr4::atn::SerializedATNView(serializedATNSegment, sizeof(serializedATNSegment) / sizeof(serializedATNSegment[0]));
|
|
||||||
|
|
||||||
antlr4::atn::ATNDeserializer deserializer;
|
|
||||||
staticData->atn = deserializer.deserialize(staticData->serializedATN);
|
|
||||||
|
|
||||||
const size_t count = staticData->atn->getNumberOfDecisions();
|
|
||||||
staticData->decisionToDFA.reserve(count);
|
|
||||||
for (size_t i = 0; i < count; i++) {
|
|
||||||
staticData->decisionToDFA.emplace_back(staticData->atn->getDecisionState(i), i);
|
|
||||||
}
|
|
||||||
sysylexerLexerStaticData = staticData.release();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
SysYLexer::SysYLexer(CharStream *input) : Lexer(input) {
|
|
||||||
SysYLexer::initialize();
|
|
||||||
_interpreter = new atn::LexerATNSimulator(this, *sysylexerLexerStaticData->atn, sysylexerLexerStaticData->decisionToDFA, sysylexerLexerStaticData->sharedContextCache);
|
|
||||||
}
|
|
||||||
|
|
||||||
SysYLexer::~SysYLexer() {
|
|
||||||
delete _interpreter;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string SysYLexer::getGrammarFileName() const {
|
|
||||||
return "SysY.g4";
|
|
||||||
}
|
|
||||||
|
|
||||||
const std::vector<std::string>& SysYLexer::getRuleNames() const {
|
|
||||||
return sysylexerLexerStaticData->ruleNames;
|
|
||||||
}
|
|
||||||
|
|
||||||
const std::vector<std::string>& SysYLexer::getChannelNames() const {
|
|
||||||
return sysylexerLexerStaticData->channelNames;
|
|
||||||
}
|
|
||||||
|
|
||||||
const std::vector<std::string>& SysYLexer::getModeNames() const {
|
|
||||||
return sysylexerLexerStaticData->modeNames;
|
|
||||||
}
|
|
||||||
|
|
||||||
const dfa::Vocabulary& SysYLexer::getVocabulary() const {
|
|
||||||
return sysylexerLexerStaticData->vocabulary;
|
|
||||||
}
|
|
||||||
|
|
||||||
antlr4::atn::SerializedATNView SysYLexer::getSerializedATN() const {
|
|
||||||
return sysylexerLexerStaticData->serializedATN;
|
|
||||||
}
|
|
||||||
|
|
||||||
const atn::ATN& SysYLexer::getATN() const {
|
|
||||||
return *sysylexerLexerStaticData->atn;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void SysYLexer::initialize() {
|
|
||||||
::antlr4::internal::call_once(sysylexerLexerOnceFlag, sysylexerLexerInitialize);
|
|
||||||
}
|
|
||||||
3780
src/SysYParser.cpp
3780
src/SysYParser.cpp
File diff suppressed because it is too large
Load Diff
@ -1,9 +0,0 @@
|
|||||||
|
|
||||||
// Generated from SysY.g4 by ANTLR 4.12.0
|
|
||||||
|
|
||||||
|
|
||||||
#include "SysYVisitor.h"
|
|
||||||
|
|
||||||
|
|
||||||
using namespace antlrSysY;
|
|
||||||
|
|
||||||
9
src/antlrgen/SysyBaseVisitor.cpp
Normal file
9
src/antlrgen/SysyBaseVisitor.cpp
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
|
||||||
|
// Generated from Sysy.g4 by ANTLR 4.12.0
|
||||||
|
|
||||||
|
|
||||||
|
#include "SysyBaseVisitor.h"
|
||||||
|
|
||||||
|
|
||||||
|
using namespace antlrSysY;
|
||||||
|
|
||||||
239
src/antlrgen/SysyLexer.cpp
Normal file
239
src/antlrgen/SysyLexer.cpp
Normal file
@ -0,0 +1,239 @@
|
|||||||
|
|
||||||
|
// Generated from Sysy.g4 by ANTLR 4.12.0
|
||||||
|
|
||||||
|
|
||||||
|
#include "SysyLexer.h"
|
||||||
|
|
||||||
|
|
||||||
|
using namespace antlr4;
|
||||||
|
|
||||||
|
using namespace antlrSysY;
|
||||||
|
|
||||||
|
|
||||||
|
using namespace antlr4;
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
struct SysyLexerStaticData final {
|
||||||
|
SysyLexerStaticData(std::vector<std::string> ruleNames,
|
||||||
|
std::vector<std::string> channelNames,
|
||||||
|
std::vector<std::string> modeNames,
|
||||||
|
std::vector<std::string> literalNames,
|
||||||
|
std::vector<std::string> symbolicNames)
|
||||||
|
: ruleNames(std::move(ruleNames)), channelNames(std::move(channelNames)),
|
||||||
|
modeNames(std::move(modeNames)), literalNames(std::move(literalNames)),
|
||||||
|
symbolicNames(std::move(symbolicNames)),
|
||||||
|
vocabulary(this->literalNames, this->symbolicNames) {}
|
||||||
|
|
||||||
|
SysyLexerStaticData(const SysyLexerStaticData&) = delete;
|
||||||
|
SysyLexerStaticData(SysyLexerStaticData&&) = delete;
|
||||||
|
SysyLexerStaticData& operator=(const SysyLexerStaticData&) = delete;
|
||||||
|
SysyLexerStaticData& operator=(SysyLexerStaticData&&) = delete;
|
||||||
|
|
||||||
|
std::vector<antlr4::dfa::DFA> decisionToDFA;
|
||||||
|
antlr4::atn::PredictionContextCache sharedContextCache;
|
||||||
|
const std::vector<std::string> ruleNames;
|
||||||
|
const std::vector<std::string> channelNames;
|
||||||
|
const std::vector<std::string> modeNames;
|
||||||
|
const std::vector<std::string> literalNames;
|
||||||
|
const std::vector<std::string> symbolicNames;
|
||||||
|
const antlr4::dfa::Vocabulary vocabulary;
|
||||||
|
antlr4::atn::SerializedATNView serializedATN;
|
||||||
|
std::unique_ptr<antlr4::atn::ATN> atn;
|
||||||
|
};
|
||||||
|
|
||||||
|
::antlr4::internal::OnceFlag sysylexerLexerOnceFlag;
|
||||||
|
SysyLexerStaticData *sysylexerLexerStaticData = nullptr;
|
||||||
|
|
||||||
|
void sysylexerLexerInitialize() {
|
||||||
|
assert(sysylexerLexerStaticData == nullptr);
|
||||||
|
auto staticData = std::make_unique<SysyLexerStaticData>(
|
||||||
|
std::vector<std::string>{
|
||||||
|
"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", "T__16",
|
||||||
|
"T__17", "T__18", "T__19", "T__20", "T__21", "T__22", "T__23", "T__24",
|
||||||
|
"T__25", "T__26", "T__27", "T__28", "T__29", "T__30", "T__31", "IDENT",
|
||||||
|
"DECIMAL_CONST", "OCTAL_CONST", "HEXADECIMAL_CONST", "WS", "SINGLELINE_COMMENT",
|
||||||
|
"MULTILINE_COMMENT", "EscapeSequence", "SChar", "StringLiteral"
|
||||||
|
},
|
||||||
|
std::vector<std::string>{
|
||||||
|
"DEFAULT_TOKEN_CHANNEL", "HIDDEN"
|
||||||
|
},
|
||||||
|
std::vector<std::string>{
|
||||||
|
"DEFAULT_MODE"
|
||||||
|
},
|
||||||
|
std::vector<std::string>{
|
||||||
|
"", "'const'", "','", "';'", "'int'", "'['", "']'", "'='", "'{'",
|
||||||
|
"'}'", "'('", "')'", "'void'", "'if'", "'else'", "'while'", "'break'",
|
||||||
|
"'continue'", "'return'", "'+'", "'-'", "'!'", "'*'", "'/'", "'%'",
|
||||||
|
"'<'", "'>'", "'<='", "'>='", "'=='", "'!='", "'&&'", "'||'"
|
||||||
|
},
|
||||||
|
std::vector<std::string>{
|
||||||
|
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
|
||||||
|
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "IDENT",
|
||||||
|
"DECIMAL_CONST", "OCTAL_CONST", "HEXADECIMAL_CONST", "WS", "SINGLELINE_COMMENT",
|
||||||
|
"MULTILINE_COMMENT", "StringLiteral"
|
||||||
|
}
|
||||||
|
);
|
||||||
|
static const int32_t serializedATNSegment[] = {
|
||||||
|
4,0,40,297,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,
|
||||||
|
6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,13,2,14,
|
||||||
|
7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2,20,7,20,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,1,0,
|
||||||
|
1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,2,1,2,1,3,1,3,1,3,1,3,1,4,1,4,1,5,1,5,1,
|
||||||
|
6,1,6,1,7,1,7,1,8,1,8,1,9,1,9,1,10,1,10,1,11,1,11,1,11,1,11,1,11,1,12,
|
||||||
|
1,12,1,12,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,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,
|
||||||
|
1,17,1,17,1,17,1,17,1,17,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,23,1,23,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,30,1,31,1,31,1,31,1,32,
|
||||||
|
1,32,1,32,4,32,192,8,32,11,32,12,32,193,3,32,196,8,32,1,33,1,33,1,33,
|
||||||
|
4,33,201,8,33,11,33,12,33,202,3,33,205,8,33,1,34,1,34,1,34,4,34,210,8,
|
||||||
|
34,11,34,12,34,211,3,34,214,8,34,1,35,1,35,1,35,1,35,3,35,220,8,35,1,
|
||||||
|
35,4,35,223,8,35,11,35,12,35,224,1,36,4,36,228,8,36,11,36,12,36,229,1,
|
||||||
|
36,1,36,1,37,1,37,1,37,1,37,5,37,238,8,37,10,37,12,37,241,9,37,1,37,1,
|
||||||
|
37,1,38,1,38,1,38,1,38,5,38,249,8,38,10,38,12,38,252,9,38,1,38,1,38,1,
|
||||||
|
38,1,38,1,38,1,39,1,39,1,39,1,39,1,39,3,39,264,8,39,1,39,3,39,267,8,39,
|
||||||
|
1,39,1,39,1,39,1,39,4,39,273,8,39,11,39,12,39,274,3,39,277,8,39,1,40,
|
||||||
|
1,40,1,40,1,40,1,40,1,40,1,40,3,40,286,8,40,1,41,1,41,4,41,290,8,41,11,
|
||||||
|
41,12,41,291,3,41,294,8,41,1,41,1,41,1,250,0,42,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,0,81,0,83,
|
||||||
|
40,1,0,10,3,0,65,90,95,95,97,122,4,0,48,57,65,90,95,95,97,122,1,0,49,
|
||||||
|
57,1,0,48,57,1,0,48,55,3,0,48,57,65,70,97,102,3,0,9,10,13,13,32,32,2,
|
||||||
|
0,10,10,13,13,10,0,34,34,39,39,63,63,92,92,97,98,102,102,110,110,114,
|
||||||
|
114,116,116,118,118,4,0,10,10,13,13,34,34,92,92,315,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,
|
||||||
|
83,1,0,0,0,1,85,1,0,0,0,3,91,1,0,0,0,5,93,1,0,0,0,7,95,1,0,0,0,9,99,1,
|
||||||
|
0,0,0,11,101,1,0,0,0,13,103,1,0,0,0,15,105,1,0,0,0,17,107,1,0,0,0,19,
|
||||||
|
109,1,0,0,0,21,111,1,0,0,0,23,113,1,0,0,0,25,118,1,0,0,0,27,121,1,0,0,
|
||||||
|
0,29,126,1,0,0,0,31,132,1,0,0,0,33,138,1,0,0,0,35,147,1,0,0,0,37,154,
|
||||||
|
1,0,0,0,39,156,1,0,0,0,41,158,1,0,0,0,43,160,1,0,0,0,45,162,1,0,0,0,47,
|
||||||
|
164,1,0,0,0,49,166,1,0,0,0,51,168,1,0,0,0,53,170,1,0,0,0,55,173,1,0,0,
|
||||||
|
0,57,176,1,0,0,0,59,179,1,0,0,0,61,182,1,0,0,0,63,185,1,0,0,0,65,195,
|
||||||
|
1,0,0,0,67,204,1,0,0,0,69,213,1,0,0,0,71,219,1,0,0,0,73,227,1,0,0,0,75,
|
||||||
|
233,1,0,0,0,77,244,1,0,0,0,79,276,1,0,0,0,81,285,1,0,0,0,83,287,1,0,0,
|
||||||
|
0,85,86,5,99,0,0,86,87,5,111,0,0,87,88,5,110,0,0,88,89,5,115,0,0,89,90,
|
||||||
|
5,116,0,0,90,2,1,0,0,0,91,92,5,44,0,0,92,4,1,0,0,0,93,94,5,59,0,0,94,
|
||||||
|
6,1,0,0,0,95,96,5,105,0,0,96,97,5,110,0,0,97,98,5,116,0,0,98,8,1,0,0,
|
||||||
|
0,99,100,5,91,0,0,100,10,1,0,0,0,101,102,5,93,0,0,102,12,1,0,0,0,103,
|
||||||
|
104,5,61,0,0,104,14,1,0,0,0,105,106,5,123,0,0,106,16,1,0,0,0,107,108,
|
||||||
|
5,125,0,0,108,18,1,0,0,0,109,110,5,40,0,0,110,20,1,0,0,0,111,112,5,41,
|
||||||
|
0,0,112,22,1,0,0,0,113,114,5,118,0,0,114,115,5,111,0,0,115,116,5,105,
|
||||||
|
0,0,116,117,5,100,0,0,117,24,1,0,0,0,118,119,5,105,0,0,119,120,5,102,
|
||||||
|
0,0,120,26,1,0,0,0,121,122,5,101,0,0,122,123,5,108,0,0,123,124,5,115,
|
||||||
|
0,0,124,125,5,101,0,0,125,28,1,0,0,0,126,127,5,119,0,0,127,128,5,104,
|
||||||
|
0,0,128,129,5,105,0,0,129,130,5,108,0,0,130,131,5,101,0,0,131,30,1,0,
|
||||||
|
0,0,132,133,5,98,0,0,133,134,5,114,0,0,134,135,5,101,0,0,135,136,5,97,
|
||||||
|
0,0,136,137,5,107,0,0,137,32,1,0,0,0,138,139,5,99,0,0,139,140,5,111,0,
|
||||||
|
0,140,141,5,110,0,0,141,142,5,116,0,0,142,143,5,105,0,0,143,144,5,110,
|
||||||
|
0,0,144,145,5,117,0,0,145,146,5,101,0,0,146,34,1,0,0,0,147,148,5,114,
|
||||||
|
0,0,148,149,5,101,0,0,149,150,5,116,0,0,150,151,5,117,0,0,151,152,5,114,
|
||||||
|
0,0,152,153,5,110,0,0,153,36,1,0,0,0,154,155,5,43,0,0,155,38,1,0,0,0,
|
||||||
|
156,157,5,45,0,0,157,40,1,0,0,0,158,159,5,33,0,0,159,42,1,0,0,0,160,161,
|
||||||
|
5,42,0,0,161,44,1,0,0,0,162,163,5,47,0,0,163,46,1,0,0,0,164,165,5,37,
|
||||||
|
0,0,165,48,1,0,0,0,166,167,5,60,0,0,167,50,1,0,0,0,168,169,5,62,0,0,169,
|
||||||
|
52,1,0,0,0,170,171,5,60,0,0,171,172,5,61,0,0,172,54,1,0,0,0,173,174,5,
|
||||||
|
62,0,0,174,175,5,61,0,0,175,56,1,0,0,0,176,177,5,61,0,0,177,178,5,61,
|
||||||
|
0,0,178,58,1,0,0,0,179,180,5,33,0,0,180,181,5,61,0,0,181,60,1,0,0,0,182,
|
||||||
|
183,5,38,0,0,183,184,5,38,0,0,184,62,1,0,0,0,185,186,5,124,0,0,186,187,
|
||||||
|
5,124,0,0,187,64,1,0,0,0,188,196,7,0,0,0,189,191,7,0,0,0,190,192,7,1,
|
||||||
|
0,0,191,190,1,0,0,0,192,193,1,0,0,0,193,191,1,0,0,0,193,194,1,0,0,0,194,
|
||||||
|
196,1,0,0,0,195,188,1,0,0,0,195,189,1,0,0,0,196,66,1,0,0,0,197,205,7,
|
||||||
|
2,0,0,198,200,7,2,0,0,199,201,7,3,0,0,200,199,1,0,0,0,201,202,1,0,0,0,
|
||||||
|
202,200,1,0,0,0,202,203,1,0,0,0,203,205,1,0,0,0,204,197,1,0,0,0,204,198,
|
||||||
|
1,0,0,0,205,68,1,0,0,0,206,214,5,48,0,0,207,209,5,48,0,0,208,210,7,4,
|
||||||
|
0,0,209,208,1,0,0,0,210,211,1,0,0,0,211,209,1,0,0,0,211,212,1,0,0,0,212,
|
||||||
|
214,1,0,0,0,213,206,1,0,0,0,213,207,1,0,0,0,214,70,1,0,0,0,215,216,5,
|
||||||
|
48,0,0,216,220,5,120,0,0,217,218,5,48,0,0,218,220,5,88,0,0,219,215,1,
|
||||||
|
0,0,0,219,217,1,0,0,0,220,222,1,0,0,0,221,223,7,5,0,0,222,221,1,0,0,0,
|
||||||
|
223,224,1,0,0,0,224,222,1,0,0,0,224,225,1,0,0,0,225,72,1,0,0,0,226,228,
|
||||||
|
7,6,0,0,227,226,1,0,0,0,228,229,1,0,0,0,229,227,1,0,0,0,229,230,1,0,0,
|
||||||
|
0,230,231,1,0,0,0,231,232,6,36,0,0,232,74,1,0,0,0,233,234,5,47,0,0,234,
|
||||||
|
235,5,47,0,0,235,239,1,0,0,0,236,238,8,7,0,0,237,236,1,0,0,0,238,241,
|
||||||
|
1,0,0,0,239,237,1,0,0,0,239,240,1,0,0,0,240,242,1,0,0,0,241,239,1,0,0,
|
||||||
|
0,242,243,6,37,0,0,243,76,1,0,0,0,244,245,5,47,0,0,245,246,5,42,0,0,246,
|
||||||
|
250,1,0,0,0,247,249,9,0,0,0,248,247,1,0,0,0,249,252,1,0,0,0,250,251,1,
|
||||||
|
0,0,0,250,248,1,0,0,0,251,253,1,0,0,0,252,250,1,0,0,0,253,254,5,42,0,
|
||||||
|
0,254,255,5,47,0,0,255,256,1,0,0,0,256,257,6,38,0,0,257,78,1,0,0,0,258,
|
||||||
|
259,5,92,0,0,259,277,7,8,0,0,260,261,5,92,0,0,261,263,7,4,0,0,262,264,
|
||||||
|
7,4,0,0,263,262,1,0,0,0,263,264,1,0,0,0,264,266,1,0,0,0,265,267,7,4,0,
|
||||||
|
0,266,265,1,0,0,0,266,267,1,0,0,0,267,277,1,0,0,0,268,269,5,92,0,0,269,
|
||||||
|
270,5,120,0,0,270,272,1,0,0,0,271,273,7,5,0,0,272,271,1,0,0,0,273,274,
|
||||||
|
1,0,0,0,274,272,1,0,0,0,274,275,1,0,0,0,275,277,1,0,0,0,276,258,1,0,0,
|
||||||
|
0,276,260,1,0,0,0,276,268,1,0,0,0,277,80,1,0,0,0,278,286,8,9,0,0,279,
|
||||||
|
286,3,79,39,0,280,281,5,92,0,0,281,286,5,10,0,0,282,283,5,92,0,0,283,
|
||||||
|
284,5,13,0,0,284,286,5,10,0,0,285,278,1,0,0,0,285,279,1,0,0,0,285,280,
|
||||||
|
1,0,0,0,285,282,1,0,0,0,286,82,1,0,0,0,287,293,5,34,0,0,288,290,3,81,
|
||||||
|
40,0,289,288,1,0,0,0,290,291,1,0,0,0,291,289,1,0,0,0,291,292,1,0,0,0,
|
||||||
|
292,294,1,0,0,0,293,289,1,0,0,0,293,294,1,0,0,0,294,295,1,0,0,0,295,296,
|
||||||
|
5,34,0,0,296,84,1,0,0,0,19,0,193,195,202,204,211,213,219,224,229,239,
|
||||||
|
250,263,266,274,276,285,291,293,1,6,0,0
|
||||||
|
};
|
||||||
|
staticData->serializedATN = antlr4::atn::SerializedATNView(serializedATNSegment, sizeof(serializedATNSegment) / sizeof(serializedATNSegment[0]));
|
||||||
|
|
||||||
|
antlr4::atn::ATNDeserializer deserializer;
|
||||||
|
staticData->atn = deserializer.deserialize(staticData->serializedATN);
|
||||||
|
|
||||||
|
const size_t count = staticData->atn->getNumberOfDecisions();
|
||||||
|
staticData->decisionToDFA.reserve(count);
|
||||||
|
for (size_t i = 0; i < count; i++) {
|
||||||
|
staticData->decisionToDFA.emplace_back(staticData->atn->getDecisionState(i), i);
|
||||||
|
}
|
||||||
|
sysylexerLexerStaticData = staticData.release();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
SysyLexer::SysyLexer(CharStream *input) : Lexer(input) {
|
||||||
|
SysyLexer::initialize();
|
||||||
|
_interpreter = new atn::LexerATNSimulator(this, *sysylexerLexerStaticData->atn, sysylexerLexerStaticData->decisionToDFA, sysylexerLexerStaticData->sharedContextCache);
|
||||||
|
}
|
||||||
|
|
||||||
|
SysyLexer::~SysyLexer() {
|
||||||
|
delete _interpreter;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string SysyLexer::getGrammarFileName() const {
|
||||||
|
return "Sysy.g4";
|
||||||
|
}
|
||||||
|
|
||||||
|
const std::vector<std::string>& SysyLexer::getRuleNames() const {
|
||||||
|
return sysylexerLexerStaticData->ruleNames;
|
||||||
|
}
|
||||||
|
|
||||||
|
const std::vector<std::string>& SysyLexer::getChannelNames() const {
|
||||||
|
return sysylexerLexerStaticData->channelNames;
|
||||||
|
}
|
||||||
|
|
||||||
|
const std::vector<std::string>& SysyLexer::getModeNames() const {
|
||||||
|
return sysylexerLexerStaticData->modeNames;
|
||||||
|
}
|
||||||
|
|
||||||
|
const dfa::Vocabulary& SysyLexer::getVocabulary() const {
|
||||||
|
return sysylexerLexerStaticData->vocabulary;
|
||||||
|
}
|
||||||
|
|
||||||
|
antlr4::atn::SerializedATNView SysyLexer::getSerializedATN() const {
|
||||||
|
return sysylexerLexerStaticData->serializedATN;
|
||||||
|
}
|
||||||
|
|
||||||
|
const atn::ATN& SysyLexer::getATN() const {
|
||||||
|
return *sysylexerLexerStaticData->atn;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void SysyLexer::initialize() {
|
||||||
|
::antlr4::internal::call_once(sysylexerLexerOnceFlag, sysylexerLexerInitialize);
|
||||||
|
}
|
||||||
3107
src/antlrgen/SysyParser.cpp
Normal file
3107
src/antlrgen/SysyParser.cpp
Normal file
File diff suppressed because it is too large
Load Diff
9
src/antlrgen/SysyVisitor.cpp
Normal file
9
src/antlrgen/SysyVisitor.cpp
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
|
||||||
|
// Generated from Sysy.g4 by ANTLR 4.12.0
|
||||||
|
|
||||||
|
|
||||||
|
#include "SysyVisitor.h"
|
||||||
|
|
||||||
|
|
||||||
|
using namespace antlrSysY;
|
||||||
|
|
||||||
@ -1,15 +1,15 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
#include "antlr4-runtime.h"
|
#include "antlr4-runtime.h"
|
||||||
#include "SysYLexer.h"
|
#include "SysyLexer.h"
|
||||||
#include "SysYParser.h"
|
#include "SysyParser.h"
|
||||||
|
|
||||||
using namespace antlrSysY;
|
using namespace antlrSysY;
|
||||||
using namespace antlr4;
|
using namespace antlr4;
|
||||||
|
|
||||||
int main(int , const char **) {
|
int main(int , const char **) {
|
||||||
ANTLRInputStream input(u8"🍴 = 🍐 + \"😎\";(((x * π))) * µ + ∰; a + (x * (y ? 0 : 1) + z);");
|
ANTLRInputStream input(u8"🍴 = 🍐 + \"😎\";(((x * π))) * µ + ∰; a + (x * (y ? 0 : 1) + z);");
|
||||||
SysYLexer lexer(&input);
|
SysyLexer lexer(&input);
|
||||||
CommonTokenStream tokens(&lexer);
|
CommonTokenStream tokens(&lexer);
|
||||||
|
|
||||||
tokens.fill();
|
tokens.fill();
|
||||||
@ -17,7 +17,7 @@ int main(int , const char **) {
|
|||||||
std::cout << token->toString() << std::endl;
|
std::cout << token->toString() << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
SysYParser parser(&tokens);
|
SysyParser parser(&tokens);
|
||||||
tree::ParseTree* tree = parser.program();
|
tree::ParseTree* tree = parser.program();
|
||||||
|
|
||||||
std::cout << tree->toStringTree(&parser) << std::endl << std::endl;
|
std::cout << tree->toStringTree(&parser) << std::endl << std::endl;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user