# pragma once #include "stdc++.h" #include "Token.h" #include "Tbs.h" #include #include #include class Scanner { public: Scanner(std::string source_code, Tbs tables) : m_source_code(source_code), m_tables(tables) {} void scan() { int len = 0; for (int i = 0; i < m_source_code.size(); i++) { if (len = process_const_table(i)) { i += len - 1; len = 0; } else if (len = process_identifier_table(i)) { i += len - 1; len = 0; } else if (len = process_key_table(i)) { i += len - 1; len = 0; } else if (len = process_punct_table(i)) { i += len - 1; len = 0; } else if (m_source_code[i] == ' ' || m_source_code[i] == '\t' || m_source_code[i] == '\n') { continue; } else { std::cerr << "Error: Tokenize" << std::endl; exit(0); } } } inline std::vector get_token_list() { return m_token_list; } int process_const_table(int i); int process_identifier_table(int i); int process_key_table(int i); int process_punct_table(int i); private: std::string m_source_code; std::vector m_token_list; Tbs m_tables; int index; // 记录标识符表的索引 int identifier_index = 0; };