编程实现对C语言的词法分析程序,C语言分为关键字、标识符、数字、运算符、界符五类,编写一个具体程序
时间: 2023-07-10 11:40:13 浏览: 184
好的,下面是一个基于C语言的词法分析程序的实现,代码如下:
```
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#define MAX 100
// 关键字
char *keywords[] = {"auto", "break", "case", "char", "const", "continue", "default", "do", "double", "else", "enum", "extern", "float", "for", "goto", "if", "int", "long", "register", "return", "short", "signed", "sizeof", "static", "struct", "switch", "typedef", "union", "unsigned", "void", "volatile", "while"};
// 运算符
char *operators[] = {"+", "-", "*", "/", "=", "==", "<", "<=", ">", ">=", "++", "--", "!=", "&&", "||", "&", "|", "^", "~", "<<", ">>"};
// 界符
char *delimiters[] = {"(", ")", "[", "]", "{", "}", ",", ";", ":", "."};
// 判断是否为关键字
int isKeyword(char *str) {
int i;
for (i = 0; i < sizeof(keywords) / sizeof(keywords[0]); i++) {
if (strcmp(str, keywords[i]) == 0) {
return 1;
}
}
return 0;
}
// 判断是否为运算符
int isOperator(char *str) {
int i;
for (i = 0; i < sizeof(operators) / sizeof(operators[0]); i++) {
if (strcmp(str, operators[i]) == 0) {
return 1;
}
}
return 0;
}
// 判断是否为界符
int isDelimiter(char *str) {
int i;
for (i = 0; i < sizeof(delimiters) / sizeof(delimiters[0]); i++) {
if (strcmp(str, delimiters[i]) == 0) {
return 1;
}
}
return 0;
}
// 词法分析函数
void lexAnalysis(char *str) {
int len = strlen(str);
int i, j;
char token[MAX];
for (i = 0; i < len; i++) {
if (isspace(str[i])) { // 空格
continue;
}
if (isalpha(str[i])) { // 标识符或关键字
j = 0;
while (isalnum(str[i])) {
token[j++] = str[i++];
}
token[j] = '\0';
i--;
if (isKeyword(token)) {
printf("%s is keyword\n", token);
} else {
printf("%s is identifier\n", token);
}
} else if (isdigit(str[i])) { // 数字
j = 0;
while (isdigit(str[i])) {
token[j++] = str[i++];
}
token[j] = '\0';
i--;
printf("%s is number\n", token);
} else { // 运算符或界符
token[0] = str[i];
token[1] = '\0';
if (isOperator(token)) {
printf("%s is operator\n", token);
} else if (isDelimiter(token)) {
printf("%s is delimiter\n", token);
} else {
printf("Invalid character: %s\n", token);
}
}
}
}
int main() {
char str[MAX];
printf("Enter a string: ");
fgets(str, MAX, stdin);
lexAnalysis(str);
return 0;
}
```
这个程序会读取用户输入的字符串,然后对其进行词法分析,识别出其中的关键字、标识符、数字、运算符和界符,并输出它们的类型。注意,这个程序只是一个简单的示例,实际的词法分析程序还需要更多的功能和优化。
阅读全文