Changed if-else symbo, cleaned up parsing a bit
This commit is contained in:
@@ -4,8 +4,12 @@ Lexer::Lexer(string source): source(source) {
|
||||
}
|
||||
|
||||
vector<shared_ptr<Token>> Lexer::getTokens() {
|
||||
shared_ptr<Token> token = nullptr;
|
||||
tokens.clear();
|
||||
currentIndex = 0;
|
||||
currentLine = 0;
|
||||
currentColumn = 0;
|
||||
|
||||
vector<shared_ptr<Token>> tokens;
|
||||
shared_ptr<Token> token;
|
||||
do {
|
||||
token = nextToken();
|
||||
// Got a nullptr, shouldn't have happened
|
||||
@@ -123,14 +127,6 @@ shared_ptr<Token> Lexer::nextToken() {
|
||||
token = match(TokenKind::SEMICOLON, ";", false);
|
||||
if (token != nullptr)
|
||||
return token;
|
||||
|
||||
token = match(TokenKind::QUESTION_QUESTION, "??", false);
|
||||
if (token != nullptr)
|
||||
return token;
|
||||
|
||||
token = match(TokenKind::QUESTION, "?", false);
|
||||
if (token != nullptr)
|
||||
return token;
|
||||
|
||||
token = match(TokenKind::LEFT_ARROW, "<-", false);
|
||||
if (token != nullptr)
|
||||
@@ -187,6 +183,14 @@ shared_ptr<Token> Lexer::nextToken() {
|
||||
return token;
|
||||
|
||||
// keywords
|
||||
token = match(TokenKind::IF, "if", true);
|
||||
if (token != nullptr)
|
||||
return token;
|
||||
|
||||
token = match(TokenKind::ELSE, "else", true);
|
||||
if (token != nullptr)
|
||||
return token;
|
||||
|
||||
token = match(TokenKind::FUNCTION, "fun", true);
|
||||
if (token != nullptr)
|
||||
return token;
|
||||
|
||||
@@ -10,11 +10,9 @@ using namespace std;
|
||||
class Lexer {
|
||||
private:
|
||||
string source;
|
||||
int currentIndex = 0;
|
||||
int currentLine = 0;
|
||||
int currentColumn = 0;
|
||||
|
||||
vector<shared_ptr<Token>> tokens;
|
||||
int currentIndex;
|
||||
int currentLine;
|
||||
int currentColumn;
|
||||
|
||||
shared_ptr<Token> nextToken();
|
||||
shared_ptr<Token> match(TokenKind kind, string lexme, bool needsSeparator);
|
||||
|
||||
@@ -112,10 +112,6 @@ string Token::toString() {
|
||||
return ":";
|
||||
case TokenKind::SEMICOLON:
|
||||
return ";";
|
||||
case TokenKind::QUESTION_QUESTION:
|
||||
return "??";
|
||||
case TokenKind::QUESTION:
|
||||
return "?";
|
||||
case TokenKind::LEFT_ARROW:
|
||||
return "←";
|
||||
case TokenKind::RIGHT_ARROW:
|
||||
@@ -136,6 +132,10 @@ string Token::toString() {
|
||||
case TokenKind::TYPE:
|
||||
return "TYPE(" + lexme + ")";
|
||||
|
||||
case TokenKind::IF:
|
||||
return "IF";
|
||||
case TokenKind::ELSE:
|
||||
return "ELSE";
|
||||
case TokenKind::FUNCTION:
|
||||
return "FUNCTION";
|
||||
case TokenKind::RETURN:
|
||||
|
||||
@@ -26,14 +26,14 @@ enum class TokenKind {
|
||||
COMMA,
|
||||
COLON,
|
||||
SEMICOLON,
|
||||
QUESTION,
|
||||
QUESTION_QUESTION,
|
||||
LEFT_ARROW,
|
||||
RIGHT_ARROW,
|
||||
|
||||
FUNCTION,
|
||||
RETURN,
|
||||
REPEAT,
|
||||
IF,
|
||||
ELSE,
|
||||
|
||||
BOOL,
|
||||
INTEGER_DEC,
|
||||
|
||||
Reference in New Issue
Block a user