c语言词法分析能够识别基本字、标识符、有符号整数、有符号浮点数、运算符和界符)
时间: 2023-08-07 09:05:04 浏览: 46
下面是一个简单的 C 语言词法分析程序,可以识别基本字、标识符、有符号整数、有符号浮点数、运算符和界符:
```c
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int is_keyword(char* str) {
char keywords[32][10] = {
"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"
};
int i;
for (i = 0; i < 32; i++) {
if (strcmp(keywords[i], str) == 0) {
return 1;
}
}
return 0;
}
int main() {
char str[20];
int i = 0;
printf("请输入一个表达式:");
scanf("%s", str);
while (str[i]) {
// 判断是否为标识符或关键字
if (isalpha(str[i]) || str[i] == '_') {
char token[20];
int j = 0;
while (isalnum(str[i]) || str[i] == '_') {
token[j++] = str[i++];
}
token[j] = '\0';
if (is_keyword(token)) {
printf("%s 是关键字\n", token);
} else {
printf("%s 是标识符\n", token);
}
}
// 判断是否为数字
else if (isdigit(str[i])) {
int num = 0;
while (isdigit(str[i])) {
num = num * 10 + (str[i++] - '0');
}
printf("%d 是整数\n", num);
if (str[i] == '.') {
i++;
double decimal = 0.0;
double fraction = 1.0;
while (isdigit(str[i])) {
fraction *= 0.1;
decimal = decimal + (str[i++] - '0') * fraction;
}
printf("%.3lf 是浮点数\n", num + decimal);
}
}
// 判断是否为运算符或界符
else if (str[i] == '+' || str[i] == '-' || str[i] == '*' || str[i] == '/' || str[i] == '%' || str[i] == '=' ||
str[i] == '>' || str[i] == '<' || str[i] == '&' || str[i] == '|' || str[i] == '^' || str[i] == '~' ||
str[i] == '(' || str[i] == ')' || str[i] == '{' || str[i] == '}' || str[i] == ';' || str[i] == ','
) {
printf("%c 是运算符或界符\n", str[i]);
i++;
} else {
i++;
}
}
return 0;
}
```
该程序会提示用户输入一个表达式,然后对表达式进行词法分析,输出各个单词的类型。其中,is_keyword 函数用于判断一个字符串是否为关键字。