编写一个简单的词法分析器c++
时间: 2024-06-08 13:09:02 浏览: 102
以下是一个简单的词法分析器 C++ 代码,可以识别四则运算符号(+、-、*、/)和数字:
```c++
#include <iostream>
#include <string>
using namespace std;
enum TokenType {
TOKEN_NUMBER,
TOKEN_PLUS,
TOKEN_MINUS,
TOKEN_MULTIPLY,
TOKEN_DIVIDE,
TOKEN_UNKNOWN
};
struct Token {
TokenType type;
string value;
};
Token getNextToken(string input) {
static int pos = 0;
Token token;
token.type = TOKEN_UNKNOWN;
while (pos < input.size()) {
if (isdigit(input[pos])) {
token.type = TOKEN_NUMBER;
token.value += input[pos];
pos++;
while (pos < input.size() && isdigit(input[pos])) {
token.value += input[pos];
pos++;
}
break;
} else if (input[pos] == '+') {
token.type = TOKEN_PLUS;
token.value = "+";
pos++;
break;
} else if (input[pos] == '-') {
token.type = TOKEN_MINUS;
token.value = "-";
pos++;
break;
} else if (input[pos] == '*') {
token.type = TOKEN_MULTIPLY;
token.value = "*";
pos++;
break;
} else if (input[pos] == '/') {
token.type = TOKEN_DIVIDE;
token.value = "/";
pos++;
break;
} else {
pos++;
}
}
return token;
}
int main() {
string input = "23+4*5-6/2";
Token token;
do {
token = getNextToken(input);
cout << "Type: " << token.type << ", Value: " << token.value << endl;
} while (token.type != TOKEN_UNKNOWN);
return 0;
}
```
这个词法分析器使用枚举类型 `TokenType` 来定义不同的 token 类型,使用结构体 `Token` 来表示一个 token,其中包含类型和值两个字段。`getNextToken` 函数是一个状态机,它从输入字符串中逐个字符读取并识别 token,并返回一个 `Token` 结构体。`main` 函数调用 `getNextToken` 函数,直到遇到未知类型的 token 为止。
阅读全文