能识别浮点数的简单词法分析程序(C语言实现)
时间: 2023-12-05 07:03:00 浏览: 51
基于C语言设计并实现的词法分析程序【100012725】
5星 · 资源好评率100%
以下是一个简单的C语言程序,用于识别浮点数的词法分析:
```c
#include <stdio.h>
#include <ctype.h>
#include <stdbool.h>
bool isFloat(char *str) {
int i = 0;
bool hasDecimal = false;
bool hasExponent = false;
// 处理正负号
if (str[i] == '+' || str[i] == '-') {
i++;
}
// 处理数字和小数点
while (isdigit(str[i]) || str[i] == '.') {
if (str[i] == '.') {
if (hasDecimal || hasExponent) {
return false; // 已经存在小数点或指数符号
}
hasDecimal = true;
}
i++;
}
// 处理指数符号
if (str[i] == 'e' || str[i] == 'E') {
if (hasExponent) {
return false; // 已经存在指数符号
}
i++;
if (str[i] == '+' || str[i] == '-') {
i++;
}
if (!isdigit(str[i])) {
return false; // 指数符号后面必须是数字
}
hasExponent = true;
while (isdigit(str[i])) {
i++;
}
}
// 如果字符串没有被完全处理,则不是浮点数
if (str[i] != '\0') {
return false;
}
// 如果字符串中既没有小数点也没有指数符号,则不是浮点数
if (!hasDecimal && !hasExponent) {
return false;
}
return true;
}
int main() {
char str[100];
printf("请输入一个字符串:");
scanf("%s", str);
if (isFloat(str)) {
printf("%s 是一个浮点数。\n", str);
} else {
printf("%s 不是一个浮点数。\n", str);
}
return 0;
}
```
该程序的基本思路是,从字符串的第一个字符开始,逐个判断是否符合浮点数的规则。具体来说,需要考虑以下几个问题:
1. 正负号:浮点数可以有正负号,但只能出现在第一个字符处。
2. 数字和小数点:浮点数必须包含数字和小数点,但小数点只能出现一次,并且不能出现在指数符号后面。
3. 指数符号:浮点数可以包含指数符号(即E或e),但只能出现一次,并且必须在小数点后面,且其后必须跟着一个整数。
如果字符串符合上述规则,则判断为浮点数,否则不是浮点数。
阅读全文