请你用C语言写一个词法分析器
时间: 2024-04-29 19:27:01 浏览: 103
好的,我可以为您提供一个基本的C语言词法分析器代码:
```c
#include <stdio.h>
#include <stdbool.h>
#include <ctype.h>
#include <string.h>
#define MAX_TOKEN_LENGTH 100
bool isInteger(char* token) {
int length = strlen(token);
for (int i = 0; i < length; i++) {
if (!isdigit(token[i])) {
return false;
}
}
return true;
}
bool isKeyword(char* token) {
char* keywords[] = {"int", "float", "bool"};
int numKeywords = sizeof(keywords) / sizeof(keywords[0]);
for (int i = 0; i < numKeywords; i++) {
if (strcmp(token, keywords[i]) == 0) {
return true;
}
}
return false;
}
bool isIdentifier(char* token) {
int length = strlen(token);
if (!isalpha(token[0])) {
return false;
}
for (int i = 1; i < length; i++) {
if (!isalnum(token[i])) {
return false;
}
}
return true;
}
int main() {
char input[1000];
printf("请输入C语言程序:\n");
fgets(input, sizeof(input), stdin);
char* token = strtok(input, " ");
while (token != NULL) {
if (isKeyword(token)) {
printf("关键词:%s\n", token);
}
else if (isInteger(token)) {
printf("整数:%s\n", token);
}
else if (isIdentifier(token)) {
printf("标识符:%s\n", token);
}
else {
printf("未知:%s\n", token);
}
token = strtok(NULL, " ");
}
return 0;
}
```
这个词法分析器可以识别并分类C语言中使用的关键字、整数和标识符。它使用标准库函数`strtok`将输入拆分为单个令牌,然后对每个令牌应用分类规则。如果令牌不匹配任何分类规则,则将其标记为未知。
阅读全文