add some const

This commit is contained in:
Shautvast 2024-10-27 16:06:08 +01:00
parent 47b33bf276
commit 8c7e93f09b
5 changed files with 17 additions and 18 deletions

View file

@ -46,12 +46,12 @@ void run_prompt(void) {
for (;;) { for (;;) {
cout << ">"; cout << ">";
getline(cin, line); getline(cin, line);
auto scan_result = run(line.substr(0, line.length())); auto scan_result = run(line.substr(0, line.length()));
// print_tokens(&scan_result.token_list);
if (is_ok(scan_result)) { if (is_ok(scan_result)) {
auto tokens = Ok(scan_result);
print_tokens(&tokens);
auto expression = (new Parser())->parse(get<vector<Token>>(scan_result)); auto expression = (new Parser())->parse(get<vector<Token>>(scan_result));
if (is_ok(expression)) { if (is_ok(expression)) {
cout << Ok(expression)->as_string() << "\n"; cout << Ok(expression)->as_string() << "\n";
@ -69,10 +69,9 @@ Result<vector<Token>> run(string source) {
return scanner->scan_tokens(); return scanner->scan_tokens();
} }
void print_tokens(vector<Token> *list) { void print_tokens(vector<Token> *const list) {
for (vector<Token>::iterator token = list->begin(); token != list->end(); for (Token token : *list) {
++token) { cout << token.as_string() << "(" << token.literal << "), ";
cout << token->as_string() << "(" << token->literal << "), ";
} }
cout << "\n"; cout << "\n";

View file

@ -9,7 +9,7 @@ Expression::~Expression() = default;
// class Binary // class Binary
string Binary::as_string() { string Binary::as_string() const {
return "(" + token_name(op->tokentype) + " " + left->as_string() + " " + return "(" + token_name(op->tokentype) + " " + left->as_string() + " " +
right->as_string() + ")"; right->as_string() + ")";
} }
@ -21,7 +21,7 @@ Binary::~Binary() = default;
// class Grouping // 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){}; Grouping::Grouping(Expression *_expr) : expr(_expr){};
@ -29,7 +29,7 @@ Grouping::~Grouping() = default;
// class Unary // class Unary
string Unary::as_string() { string Unary::as_string() const {
return token_name(op->tokentype) + right->as_string(); return token_name(op->tokentype) + right->as_string();
} }
@ -39,7 +39,7 @@ Unary::Unary(Token *_operator, Expression *_right)
Unary::~Unary() = default; Unary::~Unary() = default;
// class Literal // class Literal
string Literal::as_string() { string Literal::as_string() const {
string text; string text;
if (holds_alternative<string>(value)) { if (holds_alternative<string>(value)) {
return "\"" + get<string>(value) + "\""; return "\"" + get<string>(value) + "\"";

View file

@ -11,7 +11,7 @@ enum class ExprType { Binary, Grouping, Unary, Literal, None };
/// Base class for expressions /// Base class for expressions
class Expression { class Expression {
public: 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(); virtual ~Expression();
}; };
@ -22,7 +22,7 @@ class Binary : public Expression {
std::unique_ptr<Expression> right; std::unique_ptr<Expression> right;
public: public:
std::string as_string() override; std::string as_string() const override;
Binary(Expression *_left, Token *_operator, Expression *_right); Binary(Expression *_left, Token *_operator, Expression *_right);
~Binary(); ~Binary();
}; };
@ -32,7 +32,7 @@ class Grouping : public Expression {
std::unique_ptr<Expression> expr; std::unique_ptr<Expression> expr;
public: public:
std::string as_string() override; std::string as_string() const override;
Grouping(Expression *_expr); Grouping(Expression *_expr);
~Grouping(); ~Grouping();
}; };
@ -43,7 +43,7 @@ class Unary : public Expression {
std::unique_ptr<Expression> right; std::unique_ptr<Expression> right;
public: public:
std::string as_string() override; std::string as_string() const override;
Unary(Token *_operator, Expression *_right); Unary(Token *_operator, Expression *_right);
~Unary(); ~Unary();
}; };
@ -64,7 +64,7 @@ public:
Literal(std::string _str) : value(_str){}; Literal(std::string _str) : value(_str){};
Literal(bool _boolean) : value(_boolean){}; Literal(bool _boolean) : value(_boolean){};
std::string as_string() override; std::string as_string() const override;
}; };
class Parser { class Parser {

View file

@ -16,4 +16,4 @@ string token_name(Token::Type tokentype) {
return tokens[(int)tokentype]; return tokens[(int)tokentype];
} }
std::string Token::as_string() { return token_name(tokentype); } std::string Token::as_string() const { return token_name(tokentype); }

View file

@ -49,7 +49,7 @@ public:
WHILE = 38, WHILE = 38,
} tokentype; } tokentype;
std::string as_string(); std::string as_string() const;
Token(Token::Type _tokentype, std::string _lexeme, std::string _literal, Token(Token::Type _tokentype, std::string _lexeme, std::string _literal,
int line); int line);