diff options
| -rw-r--r-- | include/cps/AST.h | 10 | ||||
| -rw-r--r-- | include/cps/Parser.h | 2 | ||||
| -rw-r--r-- | lib/Parser/Parser.cc | 8 |
3 files changed, 8 insertions, 12 deletions
diff --git a/include/cps/AST.h b/include/cps/AST.h index 7791580..3c58642 100644 --- a/include/cps/AST.h +++ b/include/cps/AST.h @@ -86,15 +86,5 @@ public: const std::vector<std::unique_ptr<StmtAST>> &getElseStmts() const { return ElseStmts; } }; -class BinaryExprAST : public ExprAST { - char Op; - std::unique_ptr<ExprAST> LHS, RHS; -public: - BinaryExprAST(char Op, std::unique_ptr<ExprAST> LHS, std::unique_ptr<ExprAST> 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(); } -}; } // namespace cps diff --git a/include/cps/Parser.h b/include/cps/Parser.h index c5d0c97..58b6366 100644 --- a/include/cps/Parser.h +++ b/include/cps/Parser.h @@ -11,7 +11,7 @@ class Parser { Lexer &Lex; int CurTok; - std::map<char, int> BinopPrecedence; + std::map<int, int> BinopPrecedence; int getNextToken(); int GetTokPrecedence(); diff --git a/lib/Parser/Parser.cc b/lib/Parser/Parser.cc index ee94b36..998d50b 100644 --- a/lib/Parser/Parser.cc +++ b/lib/Parser/Parser.cc @@ -9,12 +9,18 @@ Parser::Parser(Lexer &L) : Lex(L) { BinopPrecedence[tok_ne] = 10; BinopPrecedence[tok_le] = 10; BinopPrecedence[tok_ge] = 10; + BinopPrecedence['<'] = 10; BinopPrecedence['>'] = 10; + + BinopPrecedence['+'] = 20; + BinopPrecedence['-'] = 20; + BinopPrecedence['*'] = 40; + BinopPrecedence['/'] = 40; } int Parser::GetTokPrecedence() { - if (!isascii(CurTok)) return -1; + if (BinopPrecedence.find(CurTok) == BinopPrecedence.end()) return -1; int TokPrec = BinopPrecedence[CurTok]; if (TokPrec <= 0) return -1; return TokPrec; |
