-
인터프리터...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
더보기참고문헌