일지

인터프리터...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