From 05c19789d5e1b5edd050ee97c19a8ab86ec9e0f6 Mon Sep 17 00:00:00 2001 From: ov-4 Date: Thu, 29 Jan 2026 11:13:05 +0000 Subject: Added half way of IF statement --- include/cps/AST.h | 29 +++++++++++++++++++++++++++-- include/cps/CodeGen.h | 3 +++ include/cps/Parser.h | 3 +++ 3 files changed, 33 insertions(+), 2 deletions(-) (limited to 'include/cps') diff --git a/include/cps/AST.h b/include/cps/AST.h index 4d72040..7791580 100644 --- a/include/cps/AST.h +++ b/include/cps/AST.h @@ -61,12 +61,37 @@ public: }; class BinaryExprAST : public ExprAST { - char Op; // '+', '-', '*', '/' + int Op; std::unique_ptr LHS, RHS; public: - BinaryExprAST(char Op, std::unique_ptr LHS, std::unique_ptr RHS) + BinaryExprAST(int Op, std::unique_ptr LHS, std::unique_ptr RHS) : Op(Op), LHS(std::move(LHS)), RHS(std::move(RHS)) {} + int getOp() const { return Op; } + ExprAST *getLHS() const { return LHS.get(); } + ExprAST *getRHS() const { return RHS.get(); } +}; +class IfStmtAST : public StmtAST { + std::unique_ptr Cond; + std::vector> ThenStmts; + std::vector> ElseStmts; +public: + IfStmtAST(std::unique_ptr Cond, + std::vector> ThenStmts, + std::vector> ElseStmts) + : Cond(std::move(Cond)), ThenStmts(std::move(ThenStmts)), ElseStmts(std::move(ElseStmts)) {} + + ExprAST *getCond() const { return Cond.get(); } + const std::vector> &getThenStmts() const { return ThenStmts; } + const std::vector> &getElseStmts() const { return ElseStmts; } +}; + +class BinaryExprAST : public ExprAST { + char Op; + std::unique_ptr LHS, RHS; +public: + BinaryExprAST(char Op, std::unique_ptr LHS, std::unique_ptr RHS) + : Op(Op), LHS(std::move(LHS)), RHS(std::move(RHS)) {} char getOp() const { return Op; } ExprAST *getLHS() const { return LHS.get(); } ExprAST *getRHS() const { return RHS.get(); } diff --git a/include/cps/CodeGen.h b/include/cps/CodeGen.h index d6a6013..88e4755 100644 --- a/include/cps/CodeGen.h +++ b/include/cps/CodeGen.h @@ -21,6 +21,9 @@ class CodeGen { llvm::Value *PrintfFormatStr; llvm::Value *ScanfFormatStr; llvm::Value *emitExpr(ExprAST *Expr); + void emitStmt(StmtAST *Stmt); + void emitIfStmt(IfStmtAST *Stmt); + void SetupExternalFunctions(); diff --git a/include/cps/Parser.h b/include/cps/Parser.h index 1b27a22..c5d0c97 100644 --- a/include/cps/Parser.h +++ b/include/cps/Parser.h @@ -24,6 +24,9 @@ class Parser { std::unique_ptr ParseIdentifierExpr(); std::unique_ptr ParseParenExpr(); + std::unique_ptr ParseStatement(); + std::unique_ptr ParseIfStmt(); + public: Parser(Lexer &L); std::vector> Parse(); -- cgit v1.3.1-4-g156e