用C设计一个表达式语法分析器,要求表达式支持任意标识符和常数;我不要得到结果,只需要输出合不合法即true还是false比如判断xx+y10*(33*a+0.7)-b/523e-2是合法的
时间: 2023-11-28 19:48:29 浏览: 57
好的,我可以给你一个基本的表达式语法分析器的代码示例,它可以识别任意标识符和常数,并判断表达式是否合法,输出 true 或 false。
```c
#include <stdio.h>
#include <ctype.h>
#include <stdbool.h>
#include <string.h>
#define MAX_LEN 100
bool is_valid_expression(char* expr);
int main() {
char expr[MAX_LEN];
printf("请输入一个表达式:");
fgets(expr, MAX_LEN, stdin);
if (is_valid_expression(expr)) {
printf("该表达式合法\n");
} else {
printf("该表达式不合法\n");
}
return 0;
}
bool is_valid_expression(char* expr) {
int len = strlen(expr);
int i = 0;
bool valid = true;
while (i < len && valid) {
// 跳过空格
while (i < len && isspace(expr[i])) {
i++;
}
// 如果到了字符串结尾,退出循环
if (i >= len) {
break;
}
// 判断当前字符是否是数字或者字母
if (isalnum(expr[i])) {
// 继续往下扫描,直到遇到非数字或字母的字符
while (i < len && isalnum(expr[i])) {
i++;
}
} else if (expr[i] == '+' || expr[i] == '-' || expr[i] == '*' || expr[i] == '/') {
// 如果当前字符是加减乘除符号,那么要求其前后都是数字或字母
if (i == 0 || i == len - 1) {
valid = false;
break;
}
if (!isalnum(expr[i-1]) || !isalnum(expr[i+1])) {
valid = false;
break;
}
i++;
} else if (expr[i] == '(' || expr[i] == ')') {
// 如果当前字符是括号,直接跳过
i++;
} else {
// 如果当前字符既不是数字字母,也不是符号或括号,那么表达式非法
valid = false;
break;
}
}
return valid;
}
```
你可以将上面的代码复制到一个 C 语言编辑器中运行,然后输入一个表达式,程序就会输出该表达式是否合法。
相关推荐
![application/x-zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![cpp](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)