일지
인터프리터...12
niamdank
2020. 11. 7. 14:39
입력되는 문자를 적절하게 처리하기 위한 문자 종류표를 작성하고 식별자 처리를 위한 구조체와 식별자표를 작성한다.
Tokenizer.h
#pragma region 문자 종류표
TokenKind charType[256];
void InitializeCharTypeTable()
{
std::fill_n(charType, 256, TokenKind::Others);
for (int i = '0'; i <= '9'; charType[i++] = TokenKind::Digit);
for (int i = 'A'; i <= 'Z'; charType[i++] = TokenKind::Letter);
for (int i = 'a'; i <= 'z'; charType[i++] = TokenKind::Letter);
charType['_'] = TokenKind::Letter;
charType['('] = TokenKind::LeftParenthesis;
charType[')'] = TokenKind::LeftParenthesis;
charType['<'] = TokenKind::Less;
charType['<'] = TokenKind::Grater;
charType['+'] = TokenKind::Plus;
charType['-'] = TokenKind::Minus;
charType['*'] = TokenKind::Multiply;
charType['/'] = TokenKind::Divide;
charType['='] = TokenKind::Assign;
charType[','] = TokenKind::Comma;
charType['\"'] = TokenKind::DoubleQuotes;
}
#pragma endregion
#pragma region 식별자표
struct Identifier
{
const char* keyWord;
TokenKind type;
};
Identifier identifier[] = {
{"if", TokenKind::If},
{"else", TokenKind::Else},
{"end", TokenKind::End},
{"print", TokenKind::Print},
{"(", TokenKind::LeftParenthesis},
{")", TokenKind::RightParenthesis},
{"==", TokenKind::Equal},
{"!=", TokenKind::NotEqual},
{"<", TokenKind::Less},
{">", TokenKind::Grater},
{"<=", TokenKind::LessEqual},
{">=", TokenKind::GraterEqual},
{"+", TokenKind::Plus},
{"-", TokenKind::Minus},
{"*", TokenKind::Multiply},
{"/", TokenKind::Divide},
{"=", TokenKind::Assign},
{"", TokenKind::EndOfList}
};
#pragma endregion
더보기