Minor changes - change vector to deque in lexer as this needs to behave like a queue
This commit is contained in:
22
src/lex.cpp
22
src/lex.cpp
@@ -9,14 +9,14 @@ using namespace std;
|
||||
std::ostream &operator<<(std::ostream &os, Token const &t) {
|
||||
os << "Token(";
|
||||
switch (t.type) {
|
||||
case TokenType::OpenParen: os << "OpenParen)"; break;
|
||||
case TokenType::CloseParen: os << "CloseParen)"; break;
|
||||
case TokenType::Dollar: os << "Dollar)"; break;
|
||||
case TokenType::Symbol: os << "Symbol, " << get<string>(*t.value) << ")"; break;
|
||||
case TokenType::String: os << "String, \"" << get<string>(*t.value) << "\")"; break;
|
||||
case TokenType::Int: os << "Int, " << get<int64_t>(*t.value) << ")"; break;
|
||||
case TokenType::Double: os << "Double, " << get<double>(*t.value) << ")"; break;
|
||||
case TokenType::End: os << "END)"; break;
|
||||
case OpenParen: os << "OpenParen)"; break;
|
||||
case CloseParen: os << "CloseParen)"; break;
|
||||
case Dollar: os << "Dollar)"; break;
|
||||
case Symbol: os << "Symbol, " << get<string>(*t.value) << ")"; break;
|
||||
case String: os << "String, \"" << get<string>(*t.value) << "\")"; break;
|
||||
case Int: os << "Int, " << get<int64_t>(*t.value) << ")"; break;
|
||||
case Double: os << "Double, " << get<double>(*t.value) << ")"; break;
|
||||
case End: os << "END)"; break;
|
||||
default:
|
||||
os << ")";
|
||||
}
|
||||
@@ -146,8 +146,8 @@ Token Lexer::next() {
|
||||
}
|
||||
}
|
||||
|
||||
vector<Token> Lexer::collect() {
|
||||
vector<Token> v;
|
||||
deque<Token> Lexer::collect() {
|
||||
deque<Token> v;
|
||||
while (true) {
|
||||
Token t = next();
|
||||
if (t.type == TokenType::End)
|
||||
@@ -158,7 +158,7 @@ vector<Token> Lexer::collect() {
|
||||
return v;
|
||||
}
|
||||
|
||||
std::vector<Token> lex(std::string s) {
|
||||
std::deque<Token> lex(std::string s) {
|
||||
Lexer l(s);
|
||||
return l.collect();
|
||||
}
|
||||
|
Reference in New Issue
Block a user