sammine-lang
Loading...
Searching...
No Matches
Lexer.h
Go to the documentation of this file.
1//
2// Created by jjasmine on 3/7/24.
3//
4
5#pragma once
6#include "lex/Token.h"
7#include "util/Utilities.h"
8
11#include <memory>
12
13namespace sammine_lang {
14
16class Lexer : public sammine_util::Reportee {
17private:
19 std::shared_ptr<TokenStream> tokStream;
20
21 [[nodiscard]] size_t handleNumber(size_t i, const std::string &input);
22 size_t handleSpaces(size_t i, const std::string &input);
23 size_t handleID(size_t i, const std::string &input);
24 size_t handleInvalid(size_t i, const std::string &input);
25 size_t handleOperators(size_t i, const std::string &input);
26 size_t handleOperatorsADD(size_t i, const std::string &input);
27 size_t handleOperatorsSUB(size_t i, const std::string &input);
28 size_t handleOperatorsMUL(size_t i, const std::string &input);
29 size_t handleOperatorsDIV(size_t i, const std::string &input);
30 size_t handleOperatorsMOD(size_t i, const std::string &input);
31 size_t handleOperatorsAND(size_t i, const std::string &input);
32 size_t handleOperatorsOR(size_t i, const std::string &input);
33 size_t handleOperatorsXOR(size_t i, const std::string &input);
34 size_t handleOperatorsCompLeft(size_t i, const std::string &input);
35 size_t handleOperatorsCompRight(size_t i, const std::string &input);
36 size_t handleOperatorsEqual(size_t i, const std::string &input);
37 size_t handleOperatorsNot(size_t i, const std::string &input);
38
39 size_t handleUtility(size_t i, const std::string &input);
40 size_t handleUtilityPAREN(size_t i, const std::string &input);
41 size_t handleUtilityCURLY(size_t i, const std::string &input);
42 size_t handleUtilityCOMMENT(size_t i, const std::string &input);
43 size_t handleUtilityCOMMA(size_t i, const std::string &input);
44 size_t handleUtilitySemiColon(size_t i, const std::string &input);
45 size_t handleUtilityDoubleQuote(size_t i, const std::string &input);
46 size_t handleUtilityCOLON(size_t i, const std::string &input);
47
48 void updateLocation();
49
50public:
51 explicit Lexer(const std::string &input);
52 Lexer() : location() { tokStream = std::make_shared<TokenStream>(); }
53 std::shared_ptr<Token> peek();
54 std::shared_ptr<Token> consume();
55
56 std::shared_ptr<TokenStream> getTokenStream() { return tokStream; }
57
58 size_t advance(size_t i);
59
60 size_t devance(size_t i);
61};
62} // namespace sammine_lang
Defines the token structure (TokenType, TokStream, TokenMap)
Holds classes and functionalities for dealing with Error handling, source locations caching & indexin...
Definition Utilities.h:56
Definition Utilities.h:107