Add new lex() function to streamline lexing, change main to reflect this
This commit is contained in:
@@ -40,3 +40,5 @@ public:
|
||||
std::vector<Token> collect();
|
||||
};
|
||||
|
||||
// when you don't want to construct the object
|
||||
std::vector<Token> lex(std::string);
|
||||
|
14
src/lex.cpp
14
src/lex.cpp
@@ -135,5 +135,19 @@ Token Lexer::next() {
|
||||
}
|
||||
}
|
||||
|
||||
vector<Token> Lexer::collect() {
|
||||
vector<Token> v;
|
||||
while (true) {
|
||||
Token t = next();
|
||||
if (t.type == TokenType::End)
|
||||
break;
|
||||
|
||||
v.push_back(t);
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
||||
std::vector<Token> lex(std::string s) {
|
||||
Lexer l(s);
|
||||
return l.collect();
|
||||
}
|
||||
|
11
src/main.cpp
11
src/main.cpp
@@ -1,14 +1,17 @@
|
||||
#include <iostream>
|
||||
#include <lex.hpp>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
|
||||
using namespace std;
|
||||
|
||||
int main() {
|
||||
string s;
|
||||
cin >> s;
|
||||
getline(cin, s);
|
||||
cout << s << endl;
|
||||
|
||||
Lexer l(s);
|
||||
cout << l.next() << endl;
|
||||
for (auto t : lex(s)) {
|
||||
cout << t << " ";
|
||||
}
|
||||
cout << endl;
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user