用c语言编写程序加上注释·并且输入——表达式;输出——表达式语法是否正确。要求 1算术表达式和赋值语句的文法是: S→i=E E→E+EE-EEEEEEi2根据算符优先分析法将赋值语句进行语法分析翻译成等价的一组基本操作每一基本操作用四元式表示
。
#include <stdio.h> #include <ctype.h>
#define MAXLEN 100 // 定义输入字符的最大长度 #define ERROR 0 // 定义错误常量 #define OK 1 // 定义正确常量
char input[MAXLEN]; // 存储输入的字符 int pos = 0; // 当前读取字符的位置
int S(); // 定义S函数 int E(); // 定义E函数
int main() { printf("请输入表达式:"); scanf("%s", input);
if (S() && pos == strlen(input)) { // 如果S函数返回值为真且已经读取完所有字符
printf("表达式语法正确\n");
// TODO: 输出四元式
} else {
printf("表达式语法错误\n");
}
return 0;
}
int S() { if (isalpha(input[pos])) { // 如果当前字符是字母 pos++; // 读取下一个字符 if (input[pos] == '=') { // 如果下一个字符是等号 pos++; // 读取下一个字符 if (E()) { // 如果E函数返回值为真 return OK; // 返回正确常量 } else { return ERROR; // 返回错误常量 } } else { return ERROR; } } else { return ERROR; } }
int E() { if (input[pos] == '(') { // 如果当前字符是左括号 pos++; // 读取下一个字符 if (E()) { // 如果E函数返回值为真 if (input[pos] == ')') { // 如果当前字符是右括号 pos++; // 读取下一个字符 return OK; // 返回正确常量 } else { return ERROR; // 返回错误常量 } } else { return ERROR; } } else if (isalpha(input[pos])) { // 如果当前字符是字母 pos++; // 读取下一个字符 return OK; // 返回正确常量 } else { return ERROR; }
原文地址: https://www.cveoy.top/t/topic/gPfp 著作权归作者所有。请勿转载和采集!