diff --git a/src/lox.cpp b/src/lox.cpp index 969cff7..0e8212c 100644 --- a/src/lox.cpp +++ b/src/lox.cpp @@ -46,12 +46,12 @@ void run_prompt(void) { for (;;) { cout << ">"; - getline(cin, line); - auto scan_result = run(line.substr(0, line.length())); - // print_tokens(&scan_result.token_list); + if (is_ok(scan_result)) { + auto tokens = Ok(scan_result); + print_tokens(&tokens); auto expression = (new Parser())->parse(get>(scan_result)); if (is_ok(expression)) { cout << Ok(expression)->as_string() << "\n"; @@ -69,10 +69,9 @@ Result> run(string source) { return scanner->scan_tokens(); } -void print_tokens(vector *list) { - for (vector::iterator token = list->begin(); token != list->end(); - ++token) { - cout << token->as_string() << "(" << token->literal << "), "; +void print_tokens(vector *const list) { + for (Token token : *list) { + cout << token.as_string() << "(" << token.literal << "), "; } cout << "\n"; diff --git a/src/parser.cpp b/src/parser.cpp index b8b8212..21f1b11 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -9,7 +9,7 @@ Expression::~Expression() = default; // class Binary -string Binary::as_string() { +string Binary::as_string() const { return "(" + token_name(op->tokentype) + " " + left->as_string() + " " + right->as_string() + ")"; } @@ -21,7 +21,7 @@ Binary::~Binary() = default; // class Grouping -string Grouping::as_string() { return "(" + expr->as_string() + ")"; } +string Grouping::as_string() const { return "(" + expr->as_string() + ")"; } Grouping::Grouping(Expression *_expr) : expr(_expr){}; @@ -29,7 +29,7 @@ Grouping::~Grouping() = default; // class Unary -string Unary::as_string() { +string Unary::as_string() const { return token_name(op->tokentype) + right->as_string(); } @@ -39,7 +39,7 @@ Unary::Unary(Token *_operator, Expression *_right) Unary::~Unary() = default; // class Literal -string Literal::as_string() { +string Literal::as_string() const { string text; if (holds_alternative(value)) { return "\"" + get(value) + "\""; diff --git a/src/parser.hpp b/src/parser.hpp index d8835ed..a4804b6 100644 --- a/src/parser.hpp +++ b/src/parser.hpp @@ -11,7 +11,7 @@ enum class ExprType { Binary, Grouping, Unary, Literal, None }; /// Base class for expressions class Expression { public: - virtual std::string as_string() = 0; // get string rep for debugging + virtual std::string as_string() const = 0; // get string rep for debugging virtual ~Expression(); }; @@ -22,7 +22,7 @@ class Binary : public Expression { std::unique_ptr right; public: - std::string as_string() override; + std::string as_string() const override; Binary(Expression *_left, Token *_operator, Expression *_right); ~Binary(); }; @@ -32,7 +32,7 @@ class Grouping : public Expression { std::unique_ptr expr; public: - std::string as_string() override; + std::string as_string() const override; Grouping(Expression *_expr); ~Grouping(); }; @@ -43,7 +43,7 @@ class Unary : public Expression { std::unique_ptr right; public: - std::string as_string() override; + std::string as_string() const override; Unary(Token *_operator, Expression *_right); ~Unary(); }; @@ -64,7 +64,7 @@ public: Literal(std::string _str) : value(_str){}; Literal(bool _boolean) : value(_boolean){}; - std::string as_string() override; + std::string as_string() const override; }; class Parser { diff --git a/src/tokens.cpp b/src/tokens.cpp index 037b6a1..5d338d8 100644 --- a/src/tokens.cpp +++ b/src/tokens.cpp @@ -16,4 +16,4 @@ string token_name(Token::Type tokentype) { return tokens[(int)tokentype]; } -std::string Token::as_string() { return token_name(tokentype); } +std::string Token::as_string() const { return token_name(tokentype); } diff --git a/src/tokens.hpp b/src/tokens.hpp index 1cd9b69..4d796a0 100644 --- a/src/tokens.hpp +++ b/src/tokens.hpp @@ -49,7 +49,7 @@ public: WHILE = 38, } tokentype; - std::string as_string(); + std::string as_string() const; Token(Token::Type _tokentype, std::string _lexeme, std::string _literal, int line);