add some const
This commit is contained in:
parent
47b33bf276
commit
8c7e93f09b
5 changed files with 17 additions and 18 deletions
13
src/lox.cpp
13
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<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";
|
||||
|
|
|
|||
|
|
@ -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) + "\"";
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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); }
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue