Hydrogen/include/Scanner.h

53 lines
1.3 KiB
C++

# pragma once
#include "stdc++.h"
#include "Token.h"
#include "Tbs.h"
#include <cstdlib>
#include <vector>
#include <iostream>
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 {
std::cerr << "Error: Tokenize" << std::endl;
exit(0);
}
}
}
inline std::vector<Token> 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<Token> m_token_list;
Tbs m_tables;
int index;
};