词法分析器用c语言实现浮点数识别
时间: 2023-10-23 15:10:49 浏览: 228
[专题]词法分析器c语言实现.doc
好的,下面是一个基于状态机的词法分析器实现浮点数识别的示例代码:
```c
#include <stdio.h>
#include <ctype.h>
#define STATE_INIT 0
#define STATE_INT 1
#define STATE_DOT 2
#define STATE_FRAC 3
#define STATE_END 4
int main() {
char input[50];
int state = STATE_INIT;
float num = 0.0f, frac = 0.1f;
int i = 0;
printf("请输入一个字符串:");
scanf("%s", input);
while (input[i] != '\0') {
switch (state) {
case STATE_INIT:
if (isdigit(input[i])) {
num = input[i] - '0';
state = STATE_INT;
} else {
printf("不是浮点数\n");
return 0;
}
break;
case STATE_INT:
if (isdigit(input[i])) {
num = num * 10.0f + (input[i] - '0');
} else if (input[i] == '.') {
state = STATE_DOT;
} else {
state = STATE_END;
}
break;
case STATE_DOT:
if (isdigit(input[i])) {
num += frac * (input[i] - '0');
frac *= 0.1f;
state = STATE_FRAC;
} else {
printf("不是浮点数\n");
return 0;
}
break;
case STATE_FRAC:
if (isdigit(input[i])) {
num += frac * (input[i] - '0');
frac *= 0.1f;
} else {
state = STATE_END;
}
break;
default:
break;
}
i++;
}
if (state == STATE_INT) {
printf("%.0f\n", num);
} else if (state == STATE_FRAC) {
printf("%.2f\n", num);
} else {
printf("不是浮点数\n");
}
return 0;
}
```
该代码通过一个状态机来实现浮点数的识别。状态机共有五个状态,分别是初始化状态(STATE_INIT)、整数部分状态(STATE_INT)、小数点状态(STATE_DOT)、小数部分状态(STATE_FRAC)和结束状态(STATE_END)。在每个状态下,根据不同的输入字符转换到不同的状态,并根据输入字符计算浮点数的值。最后根据状态输出相应的结果。注意,该代码没有考虑指数部分。
阅读全文