生成一个 可识别单词的C++词法分析器的代码,
时间: 2024-11-06 09:35:59 浏览: 6
创建一个能识别简单英文单词的C++词法分析器,我们可以利用字符串流(istringstream)和基本的字符处理函数。下面是一个基础的示例,它会读取输入并检测是否为单个英文单词:
```cpp
#include <iostream>
#include <sstream>
#include <locale>
#include <vector>
#include <cctype>
// 定义一个简单的词元枚举类型
enum class TokenType {
Word,
EndOfFile
};
// 词法分析器类
class LexicalAnalyzer {
public:
explicit LexicalAnalyzer(const std::string& input)
: m_input(input), m_pos(0), m_word() {}
bool nextToken(std::vector<std::string>& words) {
if (m_pos >= m_input.length()) {
words.push_back("");
return false; // End of file
}
m_word.clear();
while (m_pos < m_input.length()) {
char c = m_input[m_pos];
if (!std::isalnum(c)) { // 非字母数字字符
if (!m_word.empty()) {
words.push_back(m_word);
m_word.clear();
}
break;
}
m_word += c;
++m_pos;
}
if (!m_word.empty()) {
words.push_back(m_word); // 如果有剩余的字母数字,则视为一个词
}
return true;
}
private:
std::string m_input;
size_t m_pos;
std::string m_word;
};
int main() {
std::string input = "Hello World This is a test";
LexicalAnalyzer analyzer(input);
std::vector<std::string> words;
while (analyzer.nextToken(words)) {
std::cout << "Token: " << words.back() << "\n";
words.pop_back(); // 清空当前词元
}
return 0;
}
阅读全文