能识别浮点数的简单词法分析程序(C语言实现)
时间: 2023-12-05 13:03:00 浏览: 110
以下是一个简单的C语言实现的浮点数词法分析程序:
```c
#include<stdio.h>
#include<ctype.h>
int main(){
char str[100];
printf("请输入一个字符串: ");
fgets(str, 100, stdin);
int len = strlen(str);
int i = 0;
int flag = 0; //标记是否有小数点
while(i < len){
if(isdigit(str[i])){
i++;
}else if(str[i] == '.' && !flag){
flag = 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中接受了输入字符串,则该字符串被识别为浮点数。
阅读全文