add tag4stmt in .g4,format cpp modification needed

This commit is contained in:
Downright
2025-03-19 20:35:37 +08:00
parent d4d7e6494b
commit 3e80cb8f3f
2 changed files with 24 additions and 15 deletions

View File

@@ -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;

View File

@@ -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)*;