From 51ed88f7613c4072b334a52c26071382c9caf295 Mon Sep 17 00:00:00 2001 From: Downright <12709502+downrighr@user.noreply.gitee.com> Date: Wed, 5 Mar 2025 13:43:27 +0800 Subject: [PATCH] fix format bug for elsestme and stmt def in .g4 --- src/ASTPrinter.cpp | 2 +- src/SysY.g4 | 1 + src/SysYIRGenerator.cpp | 2 +- src/SysYIRGenerator.h | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/ASTPrinter.cpp b/src/ASTPrinter.cpp index b1ec3d0..f5adbcc 100644 --- a/src/ASTPrinter.cpp +++ b/src/ASTPrinter.cpp @@ -155,7 +155,7 @@ std::any ASTPrinter::visitStmt(SysYParser::StmtContext *ctx){ cout << getIndent() << "}" << endl; } if (ctx->stmt().size() > 1) { - cout << getIndent() << "else" << endl; + cout << getIndent() << "else"; if(ctx->stmt(1)->blockStmt())ctx->stmt(1)->accept(this); else{ cout << " {"<< endl; diff --git a/src/SysY.g4 b/src/SysY.g4 index fe6f489..2a8361e 100644 --- a/src/SysY.g4 +++ b/src/SysY.g4 @@ -137,6 +137,7 @@ 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 diff --git a/src/SysYIRGenerator.cpp b/src/SysYIRGenerator.cpp index a17418a..3eccc14 100644 --- a/src/SysYIRGenerator.cpp +++ b/src/SysYIRGenerator.cpp @@ -6,7 +6,7 @@ using namespace std; namespace sysy { -any SysYIRGenerator::visitModule(SysYParser::ModuleContext *ctx) { +any SysYIRGenerator::visitCompUnit(SysYParser::CompUnitContext *ctx) { // create the IR module auto pModule = new Module(); assert(pModule); diff --git a/src/SysYIRGenerator.h b/src/SysYIRGenerator.h index 9fc5d78..bfc1865 100644 --- a/src/SysYIRGenerator.h +++ b/src/SysYIRGenerator.h @@ -20,7 +20,7 @@ public: Module *get() const { return module.get(); } public: - std::any visitModule(SysYParser::ModuleContext *ctx) override; + std::any visitCompUnit(SysYParser::CompUnitContext *ctx) override; std::any visitFuncRParams(SysYParser::FuncRParamsContext *ctx) override; std::any visitNumber(SysYParser::NumberContext *ctx) override; std::any visitString(SysYParser::StringContext *ctx) override;