-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathtokenizer.h
67 lines (54 loc) · 903 Bytes
/
tokenizer.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#pragma once
#include "stringfragment.h"
enum class TokenType
{
kAreg,
kDreg,
kKill,
kReserve,
kUnreserve,
kRegister,
kIdentifier,
kLeftParen,
kRightParen,
kProc,
kCProc,
kEndProc,
kComma,
kColon,
kEndOfLine,
kSpill,
kRestore,
kRename,
kUnknown,
kInvalid,
kCount
};
const char* tokenTypeName(TokenType tt);
struct Token
{
Token() = default;
Token(TokenType type, StringFragment str)
: m_Type(type)
, m_String(str)
{}
Token(TokenType type, int registerIndex)
: m_Type(type)
, m_Register(registerIndex)
{}
TokenType m_Type = TokenType::kInvalid;
int m_Register = 0;
StringFragment m_String;
};
class Tokenizer
{
StringFragment m_Remain;
Token m_Curr;
public:
explicit Tokenizer(StringFragment p);
Token peek();
Token next();
private:
Token decodeNext();
};
StringFragment skipWhitespace(StringFragment f);