基于C++的词法分析器
时间: 2023-09-26 13:11:07 浏览: 50
以下是一个基于C语言的简单词法分析器示例:
```c
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#define MAX_TOKEN_LEN 100
typedef enum {
TK_INT,
TK_FLOAT,
TK_PLUS,
TK_MINUS,
TK_MUL,
TK_DIV,
TK_LPAREN,
TK_RPAREN,
TK_EOF
} TokenKind;
typedef struct {
TokenKind kind;
char str[MAX_TOKEN_LEN];
} Token;
Token tokens[100];
int token_count = 0;
void add_token(TokenKind kind, char *str) {
Token token;
token.kind = kind;
strncpy(token.str, str, MAX_TOKEN_LEN);
tokens[token_count++] = token;
}
void tokenize(char *p) {
while (*p) {
if (isdigit(*p)) {
char *start = p;
while (isdigit(*p)) {
p++;
}
if (*p == '.') {
p++;
while (isdigit(*p)) {
p++;
}
add_token(TK_FLOAT, start);
} else {
add_token(TK_INT, start);
}
} else if (*p == '+') {
add_token(TK_PLUS, p++);
} else if (*p == '-') {
add_token(TK_MINUS, p++);
} else if (*p == '*') {
add_token(TK_MUL, p++);
} else if (*p == '/') {
add_token(TK_DIV, p++);
} else if (*p == '(') {
add_token(TK_LPAREN, p++);
} else if (*p == ')') {
add_token(TK_RPAREN, p++);
} else {
p++;
}
}
add_token(TK_EOF, p);
}
int main() {
char input[100];
printf("Input an expression: ");
scanf("%s", input);
tokenize(input);
for (int i = 0; i < token_count; i++) {
printf("%s\n", tokens[i].str);
}
return 0;
}
```
运行该程序并输入一个表达式,例如 `2.5+3*(4-1)/2`,将输出以下结果:
```
2.5
+
3
*
(
4
-
1
)
/
2
EOF
```
该词法分析器可以将输入的表达式分解为一个个标记(Token),例如整数、浮点数、加减乘除符号以及左右括号。这些标记将被传递给后续的语法分析器进行解析。