简易词法分析器C++实现
时间: 2023-10-20 21:24:09 浏览: 100
基于C语言实现简易词法分析器(编译原理)【100012924】
词法分析器是编译器的第一个阶段,用于将源代码分解成单个的词语(Token)。以下是一个简单的C++实现:
```cpp
#include <iostream>
#include <string>
#include <vector>
using namespace std;
// 定义Token类
class Token {
public:
string type; // 类型
string value; // 值
Token(string type, string value) {
this->type = type;
this->value = value;
}
};
// 定义词法分析器类
class Lexer {
private:
string input; // 输入代码
int position; // 当前位置
char current; // 当前字符
public:
Lexer(string input) {
this->input = input;
position = 0;
current = input[position];
}
// 获取下一个字符
void advance() {
position++;
if (position < input.size()) {
current = input[position];
} else {
current = '\0';
}
}
// 获取数字
Token get_number() {
string number = "";
while (current >= '0' && current <= '9') {
number += current;
advance();
}
return Token("NUMBER", number);
}
// 获取符号
Token get_symbol() {
string symbol = "";
while (current == '+' || current == '-') {
symbol += current;
advance();
}
return Token("SYMBOL", symbol);
}
// 分析输入代码
vector<Token> analyze() {
vector<Token> tokens;
while (current != '\0') {
if (current >= '0' && current <= '9') {
tokens.push_back(get_number());
} else if (current == '+' || current == '-') {
tokens.push_back(get_symbol());
} else {
advance();
}
}
return tokens;
}
};
int main() {
string input = "12+34-56";
Lexer lexer(input);
vector<Token> tokens = lexer.analyze();
for (int i = 0; i < tokens.size(); i++) {
cout << "Token: " << tokens[i].type << ", Value: " << tokens[i].value << endl;
}
return 0;
}
```
以上代码实现了一个简单的词法分析器,可以将输入的代码分解成数字和符号两种类型的Token,并输出它们的类型和值。
阅读全文