编写C词法分析器识别浮点数
时间: 2024-05-16 22:16:49 浏览: 130
C语言浮点数探析
下面是一个简单的C语言词法分析器程序,可以识别浮点数:
```c
#include <stdio.h>
#include <ctype.h>
int main() {
char c;
double num = 0.0;
int state = 0;
printf("Enter a string: ");
while ((c = getchar()) != '\n') {
switch (state) {
case 0: // 初始状态
if (isdigit(c)) {
num = c - '0';
state = 1;
} else if (c == '.') {
state = 2;
} else {
state = -1;
}
break;
case 1: // 整数部分
if (isdigit(c)) {
num = num * 10 + (c - '0');
} else if (c == '.') {
state = 3;
} else {
state = -1;
}
break;
case 2: // 小数点前没有整数部分
if (isdigit(c)) {
num = (c - '0') / 10.0;
state = 3;
} else {
state = -1;
}
break;
case 3: // 小数部分
if (isdigit(c)) {
num = num + (c - '0') / 10.0;
} else {
state = -1;
}
break;
}
}
if (state == 1 || state == 3) {
printf("The input is a valid float number: %f\n", num);
} else {
printf("The input is not a valid float number.\n");
}
return 0;
}
```
该程序通过一个状态机来识别浮点数,状态0表示初始状态,状态1表示整数部分,状态2表示小数点前没有整数部分,状态3表示小数部分。在每个状态下,根据输入的字符进行状态转移,如果输入的字符不合法则状态转移到-1,表示输入的不是一个有效的浮点数。
程序的运行结果如下所示:
```
Enter a string: 3.14159
The input is a valid float number: 3.141590
```
阅读全文