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 (;;) {
|
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";
|
||||||
|
|
|
||||||
|
|
@ -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) + "\"";
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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); }
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue