From 14b71906b7c6f8a755bdad4b317c6a179a7297f4 Mon Sep 17 00:00:00 2001 From: Username404 Date: Fri, 8 Apr 2022 11:01:07 +0200 Subject: [PATCH] Add a SEMICOLON token Signed-off-by: Username404 --- src/etc/lexer.cpp | 4 ++-- src/headers/lex.hpp | 2 +- src/headers/parsing/Parser.hpp | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/etc/lexer.cpp b/src/etc/lexer.cpp index 22ffbd2..ca773ff 100644 --- a/src/etc/lexer.cpp +++ b/src/etc/lexer.cpp @@ -49,11 +49,11 @@ vector lex(const string& in) } else goto insertToken; } case DEFINE: case RPAR: case COMMA: - case RBRACE: case RBRACKET: + case RBRACE: case RBRACKET: case SEMICOLON: case PLUS: case HYPHEN: case LCOMP: case RCOMP: case DOT: case DOLLAR_SIGN: case SQUOTE: insertToken: resVal.emplace_back(static_cast(current), lineNumber); - [[likely]] case ' ': case '\t': case '\r': case ';': break; + [[likely]] case ' ': case '\t': case '\r': break; [[likely]] case '\n': ++lineNumber; break; default: { const tok::type type = getIdentifierCharType(current); diff --git a/src/headers/lex.hpp b/src/headers/lex.hpp index b578b84..f2c3fc2 100644 --- a/src/headers/lex.hpp +++ b/src/headers/lex.hpp @@ -11,7 +11,7 @@ struct tok { typedef Yerbacon::Exception LexerException; enum type: const unsigned short { UNEXPECTED = std::numeric_limits::max() + 1, IDENTIFIER, NUMBER, ALPHACHAR, - DEFINE = '=', TAG = '#', DOLLAR_SIGN = '$', DOT = '.', COMMA = ',', + DEFINE = '=', TAG = '#', DOLLAR_SIGN = '$', DOT = '.', COMMA = ',', SEMICOLON = ';', LPAR = '(', LBRACE = '{', LBRACKET = '[', RPAR = ')', RBRACE = '}', RBRACKET = ']', PLUS = '+', HYPHEN = '-', DIVIDE = '/', diff --git a/src/headers/parsing/Parser.hpp b/src/headers/parsing/Parser.hpp index 02d5062..a002912 100644 --- a/src/headers/parsing/Parser.hpp +++ b/src/headers/parsing/Parser.hpp @@ -92,7 +92,7 @@ namespace Parser { const unsigned increment = 2 + isFinalDefine; const auto beginning = lexed.begin() + i + increment; const auto end = find_if(beginning, lexed.end(), [¤t](const tok& it){ // TODO Find another way of choosing the tokens to parse - return it.line != current.line; + return it.toktype == SEMICOLON || it.line != current.line; }); parseTree << Define(isFinalDefine, current.toktext, parse(beginning, end)); i += 1 + isFinalDefine + distance(beginning, end);