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 (;;) {
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<vector<Token>>(scan_result));
if (is_ok(expression)) {
cout << Ok(expression)->as_string() << "\n";
@ -69,10 +69,9 @@ Result<vector<Token>> run(string source) {
return scanner->scan_tokens();
}
void print_tokens(vector<Token> *list) {
for (vector<Token>::iterator token = list->begin(); token != list->end();
++token) {
cout << token->as_string() << "(" << token->literal << "), ";
void print_tokens(vector<Token> *const list) {
for (Token token : *list) {
cout << token.as_string() << "(" << token.literal << "), ";
}
cout << "\n";

View file

@ -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<string>(value)) {
return "\"" + get<string>(value) + "\"";

View file

@ -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<Expression> 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<Expression> 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<Expression> 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 {

View file

@ -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); }

View file

@ -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);