📄 cpplexer.cpp
字号:
m_buffer[m_ptr+2] == 'e' && m_buffer[m_ptr+3] == 'r' && m_buffer[m_ptr+4] == 'a' && m_buffer[m_ptr+5] == 't' && m_buffer[m_ptr+6] == 'o' && m_buffer[m_ptr+7] == 'r') { *kind = Token_operator; return; } break; case 'Q': if (m_buffer[m_ptr+1] == '_' && m_buffer[m_ptr+2] == 'O' && m_buffer[m_ptr+3] == 'B' && m_buffer[m_ptr+4] == 'J' && m_buffer[m_ptr+5] == 'E' && m_buffer[m_ptr+6] == 'C' && m_buffer[m_ptr+7] == 'T') { *kind = Token_Q_OBJECT; return; } break; case 'r': if (m_buffer[m_ptr+1] == 'e' && m_buffer[m_ptr+2] == 'g' && m_buffer[m_ptr+3] == 'i' && m_buffer[m_ptr+4] == 's' && m_buffer[m_ptr+5] == 't' && m_buffer[m_ptr+6] == 'e' && m_buffer[m_ptr+7] == 'r') { *kind = Token_register; return; } break; case 'u': if (m_buffer[m_ptr+1] == 'n' && m_buffer[m_ptr+2] == 's' && m_buffer[m_ptr+3] == 'i' && m_buffer[m_ptr+4] == 'g' && m_buffer[m_ptr+5] == 'n' && m_buffer[m_ptr+6] == 'e' && m_buffer[m_ptr+7] == 'd') { *kind = Token_unsigned; return; } break; case 't': if (m_buffer[m_ptr+1] == 'e' && m_buffer[m_ptr+2] == 'm' && m_buffer[m_ptr+3] == 'p' && m_buffer[m_ptr+4] == 'l' && m_buffer[m_ptr+5] == 'a' && m_buffer[m_ptr+6] == 't' && m_buffer[m_ptr+7] == 'e') { *kind = Token_template; return; } if (m_buffer[m_ptr+1] == 'y' && m_buffer[m_ptr+2] == 'p' && m_buffer[m_ptr+3] == 'e' && m_buffer[m_ptr+4] == 'n' && m_buffer[m_ptr+5] == 'a' && m_buffer[m_ptr+6] == 'm' && m_buffer[m_ptr+7] == 'e') { *kind = Token_typename; return; } break; case 'v': if (m_buffer[m_ptr+1] == 'o' && m_buffer[m_ptr+2] == 'l' && m_buffer[m_ptr+3] == 'a' && m_buffer[m_ptr+4] == 't' && m_buffer[m_ptr+5] == 'i' && m_buffer[m_ptr+6] == 'l' && m_buffer[m_ptr+7] == 'e') { *kind = Token_volatile; return; } break; } *kind = Token_identifier;}void CppLexer::scanKeyword9(int *kind){ switch (m_buffer[m_ptr]) { case 'p': if (m_buffer[m_ptr+1] == 'r' && m_buffer[m_ptr+2] == 'o' && m_buffer[m_ptr+3] == 't' && m_buffer[m_ptr+4] == 'e' && m_buffer[m_ptr+5] == 'c' && m_buffer[m_ptr+6] == 't' && m_buffer[m_ptr+7] == 'e' && m_buffer[m_ptr+8] == 'd') { *kind = Token_protected; return; } break; case 'n': if (m_buffer[m_ptr+1] == 'a' && m_buffer[m_ptr+2] == 'm' && m_buffer[m_ptr+3] == 'e' && m_buffer[m_ptr+4] == 's' && m_buffer[m_ptr+5] == 'p' && m_buffer[m_ptr+6] == 'a' && m_buffer[m_ptr+7] == 'c' && m_buffer[m_ptr+8] == 'e') { *kind = Token_namespace; return; } break; } *kind = Token_identifier;}void CppLexer::scanKeyword10(int *kind){ switch (m_buffer[m_ptr]) { case 'c': if (m_buffer[m_ptr+1] == 'o' && m_buffer[m_ptr+2] == 'n' && m_buffer[m_ptr+3] == 's' && m_buffer[m_ptr+4] == 't' && m_buffer[m_ptr+5] == '_' && m_buffer[m_ptr+6] == 'c' && m_buffer[m_ptr+7] == 'a' && m_buffer[m_ptr+8] == 's' && m_buffer[m_ptr+9] == 't') { *kind = Token_const_cast; return; } break; } *kind = Token_identifier;}void CppLexer::scanKeyword11(int *kind){ switch (m_buffer[m_ptr]) { case 's': if (m_buffer[m_ptr+1] == 't' && m_buffer[m_ptr+2] == 'a' && m_buffer[m_ptr+3] == 't' && m_buffer[m_ptr+4] == 'i' && m_buffer[m_ptr+5] == 'c' && m_buffer[m_ptr+6] == '_' && m_buffer[m_ptr+7] == 'c' && m_buffer[m_ptr+8] == 'a' && m_buffer[m_ptr+9] == 's' && m_buffer[m_ptr+10] == 't') { *kind = Token_static_cast; return; } break; } *kind = Token_identifier;}void CppLexer::scanKeyword12(int *kind){ switch (m_buffer[m_ptr]) { case 'd': if (m_buffer[m_ptr+1] == 'y' && m_buffer[m_ptr+2] == 'n' && m_buffer[m_ptr+3] == 'a' && m_buffer[m_ptr+4] == 'm' && m_buffer[m_ptr+5] == 'i' && m_buffer[m_ptr+6] == 'c' && m_buffer[m_ptr+7] == '_' && m_buffer[m_ptr+8] == 'c' && m_buffer[m_ptr+9] == 'a' && m_buffer[m_ptr+10] == 's' && m_buffer[m_ptr+11] == 't') { *kind = Token_dynamic_cast; return; } break; } *kind = Token_identifier;}void CppLexer::scanKeyword14(int *kind){ switch (m_buffer[m_ptr]) { case 'k': if (m_buffer[m_ptr+1] == '_' && m_buffer[m_ptr+2] == 'd' && m_buffer[m_ptr+3] == 'c' && m_buffer[m_ptr+4] == 'o' && m_buffer[m_ptr+5] == 'p' && m_buffer[m_ptr+6] == '_' && m_buffer[m_ptr+7] == 's' && m_buffer[m_ptr+8] == 'i' && m_buffer[m_ptr+9] == 'g' && m_buffer[m_ptr+10] == 'n' && m_buffer[m_ptr+11] == 'a' && m_buffer[m_ptr+12] == 'l' && m_buffer[m_ptr+13] == 's') { *kind = Token_k_dcop_signals; return; } break; } *kind = Token_identifier;}void CppLexer::scanKeyword16(int *kind){ switch (m_buffer[m_ptr]) { case 'r': if (m_buffer[m_ptr+1] == 'e' && m_buffer[m_ptr+2] == 'i' && m_buffer[m_ptr+3] == 'n' && m_buffer[m_ptr+4] == 't' && m_buffer[m_ptr+5] == 'e' && m_buffer[m_ptr+6] == 'r' && m_buffer[m_ptr+7] == 'p' && m_buffer[m_ptr+8] == 'r' && m_buffer[m_ptr+9] == 'e' && m_buffer[m_ptr+10] == 't' && m_buffer[m_ptr+11] == '_' && m_buffer[m_ptr+12] == 'c' && m_buffer[m_ptr+13] == 'a' && m_buffer[m_ptr+14] == 's' && m_buffer[m_ptr+15] == 't') { *kind = Token_reinterpret_cast; return; } break; } *kind = Token_identifier;}void CppLexer::scanChar(int *kind){ *kind = m_buffer[m_ptr++];}void CppLexer::scanWhiteSpaces(int *kind){ *kind = Token_whitespaces;}void CppLexer::scanNewline(int *kind){ *kind = '\n';}void CppLexer::scanUnicodeChar(int *kind){ *kind = m_buffer[0];}void CppLexer::scanCharLiteral(int *kind){ *kind = Token_char_literal;}void CppLexer::scanStringLiteral(int *kind){ *kind = Token_string_literal;}void CppLexer::scanIdentifier(int *kind){ if (m_len <16) (this->*s_scan_keyword_table[m_len])(kind); else (this->*s_scan_keyword_table[0])(kind);}void CppLexer::scanNumberLiteral(int *kind){ *kind = Token_number_literal;}void CppLexer::scanOperator(int *kind){ switch (m_buffer[m_ptr]) { case ':': if (m_buffer[m_ptr+1] == ':') { *kind = Token_scope; return; } break; case '*': case '/': case '%': case '^': if (m_buffer[m_ptr+1] == '=') { *kind = Token_assign; return; } break; case '=': case '!': if (m_buffer[m_ptr+1] == '=') { *kind = Token_eq; return; } break; case '&': if (m_buffer[m_ptr+1] == '&') { *kind = Token_and; return; } else if (m_buffer[m_ptr+1] == '=') { *kind = Token_assign; return; } break; case '|': if (m_buffer[m_ptr+1] == '|' ) { *kind = Token_or; return; } else if (m_buffer[m_ptr+1] == '=') { *kind = Token_assign; return; } break; case '+': if (m_buffer[m_ptr+1] == '+' ) { *kind = Token_incr; return; } else if (m_buffer[m_ptr+1] == '=') { *kind = Token_assign; return; } break; case '<': if (m_buffer[m_ptr+1] == '<') { if (m_buffer[m_ptr+2] == '=') { *kind = Token_assign; return; } *kind = Token_shift; return; } else if (m_buffer[m_ptr+1] == '=') { *kind = Token_leq; return; } break; case '>': if (m_buffer[m_ptr+1] == '>') { if (m_buffer[m_ptr+2] == '=') { *kind = Token_assign; return; } *kind = Token_shift; return; } else if (m_buffer[m_ptr+1] == '=') { *kind = Token_geq; return; } break; case '-': if (m_buffer[m_ptr+1] == '>') { if (m_buffer[m_ptr+2] == '*') { *kind = Token_ptrmem; return; } *kind = Token_arrow; return; } else if (m_buffer[m_ptr+1] == '-') { *kind = Token_decr; return; } else if (m_buffer[m_ptr+1] == '=') { *kind = Token_assign; return; } break; case '.': if (m_buffer[m_ptr+1] == '.' && m_buffer[m_ptr+2] == '.') { *kind = Token_ellipsis; return; } else if (m_buffer[m_ptr+1] == '*') { *kind = Token_ptrmem; return; } break; } *kind = m_buffer[m_ptr++];}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -