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 visitFuncFParam(SysYParser::FuncFParamContext *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 visitStmt(SysYParser::StmtContext *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;
|
||||
|
||||
stmt: lValue ASSIGN exp SEMICOLON
|
||||
| exp? SEMICOLON
|
||||
| blockStmt
|
||||
| IF LPAREN cond RPAREN stmt (ELSE stmt)?
|
||||
| WHILE LPAREN cond RPAREN stmt
|
||||
| BREAK SEMICOLON
|
||||
| CONTINUE SEMICOLON
|
||||
| RETURN exp? SEMICOLON;
|
||||
stmt: lValue ASSIGN exp SEMICOLON #assignStmt
|
||||
| exp? SEMICOLON #expStmt
|
||||
| blockStmt #blkStmt
|
||||
| IF LPAREN cond RPAREN stmt (ELSE stmt)? #ifStmt
|
||||
| WHILE LPAREN cond RPAREN stmt #whileStmt
|
||||
| BREAK SEMICOLON #breakStmt
|
||||
| CONTINUE SEMICOLON #continueStmt
|
||||
| RETURN exp? SEMICOLON #returnStmt;
|
||||
|
||||
exp: addExp;
|
||||
cond: lOrExp;
|
||||
lValue: Ident (LBRACK exp RBRACK)*;
|
||||
|
||||
// 为了方便测试 primaryExp 可以是一个string
|
||||
primaryExp: LPAREN exp RPAREN
|
||||
| lValue
|
||||
| number
|
||||
| string;
|
||||
primaryExp: LPAREN exp RPAREN #parenExp
|
||||
| lValue #lVal
|
||||
| number #num
|
||||
| string #str;
|
||||
|
||||
number: ILITERAL | FLITERAL;
|
||||
unaryExp: primaryExp
|
||||
| Ident LPAREN (funcRParams)? RPAREN
|
||||
| unaryOp unaryExp;
|
||||
unaryExp: primaryExp #primExp
|
||||
| Ident LPAREN (funcRParams)? RPAREN #call
|
||||
| unaryOp unaryExp #unExp;
|
||||
|
||||
unaryOp: ADD|SUB|NOT;
|
||||
funcRParams: exp (COMMA exp)*;
|
||||
|
||||
Reference in New Issue
Block a user