ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 인터프리터...12
    일지 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

     

    댓글

Designed by Tistory.