能识别浮点数的简单词法分析程序(C语言实现)
时间: 2023-12-05 19:04:19 浏览: 5
以下是一个简单的词法分析程序,能够识别浮点数:
```c
#include <stdio.h>
#include <ctype.h>
int main() {
char input[50];
printf("请输入一个字符串: ");
scanf("%s", input);
int i = 0;
int has_dot = 0;
while (input[i] != '\0') {
if (isdigit(input[i])) {
i++;
} else if (input[i] == '.') {
if (has_dot) {
printf("非法的浮点数\n");
return 0;
}
has_dot = 1;
i++;
} else {
printf("非法的浮点数\n");
return 0;
}
}
printf("合法的浮点数\n");
return 0;
}
```
程序首先读入一个字符串,然后逐个字符扫描,如果是数字则继续扫描,如果是小数点则标记一下已经有小数点了,并继续扫描,否则就认为不合法。当所有字符都扫描完毕后,如果已经标记了小数点,则认为是合法的浮点数,否则认为不合法。
相关问题
能识别浮点数词法分析程序(C语言实现)
以下是一个可以识别浮点数的词法分析程序,使用 C 语言实现:
```c
#include <stdio.h>
#include <ctype.h>
int main() {
char str[20];
int i = 0;
int flag = 0;
printf("请输入一个字符串:");
scanf("%s", str);
// 判断字符串是否为浮点数
while (str[i]) {
if (isdigit(str[i])) {
i++;
} else if (str[i] == '.') {
i++;
flag = 1;
break; // 有且只有一个小数点
} else {
printf("输入的字符串不是浮点数\n");
return 0;
}
}
if (flag == 1) {
while (str[i]) { // 判断小数点后面的数字
if (isdigit(str[i])) {
i++;
} else {
printf("输入的字符串不是浮点数\n");
return 0;
}
}
printf("输入的字符串是浮点数\n");
} else {
printf("输入的字符串不是浮点数\n");
}
return 0;
}
```
相比于简单的浮点数识别程序,词法分析程序加入了对小数点后面数字的判断,确保字符串中只有一个小数点,并且小数点后面跟着至少一个数字。
能识别浮点数的简单词法分析程序(C语言实现)的DFA图
下面是一个简单的浮点数词法分析程序的DFA图示,包括4个状态和4个输入符号。
![浮点数词法分析程序的DFA图示](https://i.imgur.com/Twz2XwD.png)
其中,圆圈表示状态,箭头表示转换,标签表示输入符号。每个状态都有一个编号,分别是0、1、2和3。在起始状态0中,可以接受数字作为输入,转换到状态1。在状态1中,可以接受数字、小数点和指数符号作为输入,转换到状态1、2或3。在状态2中,可以接受数字和指数符号作为输入,转换到状态3。在状态3中,只能接受数字作为输入,转换到状态3。如果输入符号不是数字、小数点或指数符号,则DFA停留在当前状态。如果DFA在任何状态中停留时接受了输入字符串,则该字符串被识别为不是浮点数。如果DFA在状态1、2或3中接受了输入字符串,则该字符串被识别为浮点数。