add tag4stmt in .g4,format cpp modification needed
This commit is contained in:
@@ -25,6 +25,15 @@ public:
|
|||||||
std::any visitFuncFParams(SysYParser::FuncFParamsContext *ctx) override;
|
std::any visitFuncFParams(SysYParser::FuncFParamsContext *ctx) override;
|
||||||
std::any visitFuncFParam(SysYParser::FuncFParamContext *ctx) override;
|
std::any visitFuncFParam(SysYParser::FuncFParamContext *ctx) override;
|
||||||
std::any visitBlockStmt(SysYParser::BlockStmtContext *ctx) override;
|
std::any visitBlockStmt(SysYParser::BlockStmtContext *ctx) override;
|
||||||
|
|
||||||
|
// std::any visitAssignStmt(SysYParser::AssignStmtContext *ctx) override;
|
||||||
|
// std::any visitExpStmt(SysYParser::ExpStmtContext *ctx) override;
|
||||||
|
// std::any visitIfStmt(SysYParser::IfStmtContext *ctx) override;
|
||||||
|
// std::any visitWhileStmt(SysYParser::WhileStmtContext *ctx) override;
|
||||||
|
// std::any visitBreakStmt(SysYParser::BreakStmtContext *ctx) override;
|
||||||
|
// std::any visitContinueStmt(SysYParser::ContinueStmtContext *ctx) override;
|
||||||
|
// std::any visitReturnStmt(SysYParser::ReturnStmtContext *ctx) override;
|
||||||
|
|
||||||
// std::any visitBlockItem(SysYParser::BlockItemContext *ctx) override;
|
// std::any visitBlockItem(SysYParser::BlockItemContext *ctx) override;
|
||||||
std::any visitStmt(SysYParser::StmtContext *ctx) override;
|
std::any visitStmt(SysYParser::StmtContext *ctx) override;
|
||||||
// std::any visitExp(SysYParser::ExpContext *ctx) override;
|
// std::any visitExp(SysYParser::ExpContext *ctx) override;
|
||||||
|
|||||||
30
src/SysY.g4
30
src/SysY.g4
@@ -136,29 +136,29 @@ blockStmt: LBRACE blockItem* RBRACE;
|
|||||||
|
|
||||||
blockItem: decl | stmt;
|
blockItem: decl | stmt;
|
||||||
|
|
||||||
stmt: lValue ASSIGN exp SEMICOLON
|
stmt: lValue ASSIGN exp SEMICOLON #assignStmt
|
||||||
| exp? SEMICOLON
|
| exp? SEMICOLON #expStmt
|
||||||
| blockStmt
|
| blockStmt #blkStmt
|
||||||
| IF LPAREN cond RPAREN stmt (ELSE stmt)?
|
| IF LPAREN cond RPAREN stmt (ELSE stmt)? #ifStmt
|
||||||
| WHILE LPAREN cond RPAREN stmt
|
| WHILE LPAREN cond RPAREN stmt #whileStmt
|
||||||
| BREAK SEMICOLON
|
| BREAK SEMICOLON #breakStmt
|
||||||
| CONTINUE SEMICOLON
|
| CONTINUE SEMICOLON #continueStmt
|
||||||
| RETURN exp? SEMICOLON;
|
| RETURN exp? SEMICOLON #returnStmt;
|
||||||
|
|
||||||
exp: addExp;
|
exp: addExp;
|
||||||
cond: lOrExp;
|
cond: lOrExp;
|
||||||
lValue: Ident (LBRACK exp RBRACK)*;
|
lValue: Ident (LBRACK exp RBRACK)*;
|
||||||
|
|
||||||
// 为了方便测试 primaryExp 可以是一个string
|
// 为了方便测试 primaryExp 可以是一个string
|
||||||
primaryExp: LPAREN exp RPAREN
|
primaryExp: LPAREN exp RPAREN #parenExp
|
||||||
| lValue
|
| lValue #lVal
|
||||||
| number
|
| number #num
|
||||||
| string;
|
| string #str;
|
||||||
|
|
||||||
number: ILITERAL | FLITERAL;
|
number: ILITERAL | FLITERAL;
|
||||||
unaryExp: primaryExp
|
unaryExp: primaryExp #primExp
|
||||||
| Ident LPAREN (funcRParams)? RPAREN
|
| Ident LPAREN (funcRParams)? RPAREN #call
|
||||||
| unaryOp unaryExp;
|
| unaryOp unaryExp #unExp;
|
||||||
|
|
||||||
unaryOp: ADD|SUB|NOT;
|
unaryOp: ADD|SUB|NOT;
|
||||||
funcRParams: exp (COMMA exp)*;
|
funcRParams: exp (COMMA exp)*;
|
||||||
|
|||||||
Reference in New Issue
Block a user