请用C语言实现一个简单的词法分析器
时间: 2024-05-12 18:17:44 浏览: 101
基于C语言实现的词法分析【100012857】
好的,我可以回答这个问题。对于这个问题,我可以提供以下的代码示例:
```
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#define MAXLEN 100
// 词法分析器函数
int lexer(char *str) {
char *ptr = str;
char token[MAXLEN];
int i = 0;
int flag = 0;
while (*ptr != '\0') {
if (isalpha(*ptr)) {
while (isalpha(*ptr) || isdigit(*ptr)) {
token[i++] = *ptr++;
}
token[i] = '\0';
i = 0;
printf("标识符:%s\n", token);
} else if (isdigit(*ptr)) {
while (isdigit(*ptr)) {
token[i++] = *ptr++;
}
token[i] = '\0';
i = 0;
printf("常量:%s\n", token);
} else {
switch (*ptr) {
case '+': printf("加号\n"); break;
case '-': printf("减号\n"); break;
case '*': printf("乘号\n"); break;
case '/': printf("除号\n"); break;
case '=': printf("等号\n"); break;
case '(': printf("左括号\n"); break;
case ')': printf("右括号\n"); break;
case '\n': flag = 1; break;
default: break;
}
ptr++;
}
if (flag) break;
}
return 0;
}
// 测试函数
int main() {
char str[] = "a = 5\nb = 6\na + b * 3\n";
lexer(str);
return 0;
}
```
这个程序是一个简单的词法分析器,使用 C 语言实现。它可以从一个输入字符串中提取出标识符、常量和运算符等词法单元,并将它们打印出来。在这个程序中,我们使用了 ctype.h 库中的函数来判断一个字符是否是字母或数字,并使用了字符串操作函数来处理词法单元。
阅读全文