一个Yacc程序,把输入的算术表达式翻译成对应的后缀表达式输出。 要求转换正确,同时对于简单错误能够识别。
2021-12-06 19:43:39 1KB 编译原理 flex yacc 中缀
1
1.3 编程基础之算术表达式与顺序执行 10 计算并联电阻的阻值.rar
2021-12-05 10:02:46 34KB NOI题库 C++ python
完整课程设计(部分代码): /* Note:Your choice is C IDE */ #define STACK_INIT_SIZE 100 /*栈的存储空间初始分配量*/ #define MAX 100 /*字符存储空间分配量*/ #define DEBUG #define NULL 0 #define TURE 1 #define ERROR -1 #define STACKSIZE 20 typedef int Status; typedef int SElemType; //元素类型 /* 定义字符类型栈 */ typedef struct{ char stackname[20]; char *base; char *top; } Stack; /* ----------------- 全局变量--------------- */ Stack OPTR, OPND; /* 定义前个运算符栈,后个操作数栈 */ char expr[255] = ""; /* 存放表达式串 */ char *ptr = expr; int step = 0; /* 计算的步次 */ int InitStack(Stack *s, char *name) { s->base=(char *)malloc(STACKSIZE*sizeof(char)); if(!s->base) exit (ERROR); strcpy(s->stackname, name); s->top=s->base; return 1; }
2021-11-22 21:36:23 734KB 课程设计 算术表达式求值 数据结构
1
数据结构课程实验报告 算术表达式 + 源代码
2021-11-22 20:32:58 1.41MB 实验二 算术表达式
1
编译原理课程设计, 算符优先文法分析算术表达式是否正确
2021-11-21 18:07:36 186KB 编译原理
1
实验目的:算术表达式的文法(你可以根据需要适当改变): E→E+E|E-E|E*E|E/E|(E)|i 根据算符优先分析法,将表达式进行语法分析,判断一个表达式是否正确。 程序要求: 程序输入/输出示例: 如参考C语言的运算符。输入如下表达式(以#为结束)和输出结果: (1)10# 输出:正确
2021-11-21 17:57:03 2KB 算符优先文法处理算术表达式
1
数据结构的算术表达式求值演示 源代码。 数据结构的算术表达式求值演示 源代码。
2021-11-20 21:47:22 37KB VC C++ 算术表达式求值演示 源代码
1
此算术表达式求值是利用c语言实现,网上有很多这样的程序,但是他们所说的思路与实现全都不一样。本例的思想方法是利用栈进行操作,设有两个栈,一个符号,一个数字栈!用户输入算术表达式后,对其进行解析,经将数字入数字栈,符号入符号,若要入栈的优先级第低于栈顶的元素的符号,则将栈顶符号出栈,经数字栈出两个数字进栈,将所得的结果入数字栈。这样知道算术表达式扫描完,并且当符号栈中没有算术运算符号时,则数字栈中的值就是这个算术表式的值。本例也考虑到了加括号的方式
2021-11-20 21:42:54 7KB 表达式求值
1
1.3 编程基础之算术表达式与顺序执行 python版.rar
2021-11-20 11:03:10 6KB python 信奥
一、实验目的 通过上机实习,加深对语法制导翻译原理的理解,掌握将语法分析所识别的语法成分变换为中间代码的语义翻译方法。 二、实验要求 采用递归下降语法制导翻译法,对算术表达式、赋值语句进行语义分析并生成四元式序列。 三、实验的结果验证 1.输入是语法分析后提供的正确的单词串,输出为三地址指令形式的四元式序列。 给出语句串: begin_a:=2+3*4; _x:=(a+b)/c_end# 输出如下三地址指令: (1) t1=3*4 (2) t2=2+t1 (3) a=t2 (4) t3=a+b (5) t4=t3/c (6) x=t4 2.自己任意给出一语句串,输出四元式序列。 要求:将上述2个语句串的执行结果显示保留在实验报告中(拷屏)。 四、算法思想 1、设置语义过程。 (1)emit(char *result,char *ag1,char *op,char *ag2) 该函数的功能是生成一个三地址语句送到四元式表中。 四元式表的结构如下: struct{char result[8]; char ag1[8]; char op[8]; char ag2[8]; }quad[20]; (2) char *newtemp() 该函数回送一个新的临时变量名,临时变量名产生的顺序为T1,T2,… char *newtemp(void) {char *p; char m[8]; p=(char *)malloc(8); k++; itoa(k,m,10); strcpy(p+1,m); p[0]=’t’; return(p); } 2、函数lrparser 在原来语法分析的基础上插入相应的语义动作:将输入串翻译成四元式序列。在实验中我们只对表达式、赋值语句进行翻译。 五、语义分析程序的C程序。 #include #include #include #include struct {char result[12]; char ag1[12]; char op[12]; char ag2[12]; }quad; char prog[80],token[12]; char ch; int syn,p,m=0,n,sum=0,kk; //p是缓冲区prog的指针,m是token的指针 char *rwtab[6]={"begin","if","then","while","do","end"}; void scaner(); char *factor(void); char *term(void); char *expression(void); int yucu(); void emit(char *result,char *ag1,char *op,char *ag2); char *newtemp(); int statement(); int k=0; void emit(char *result,char *ag1,char *op,char *ag2) { strcpy(quad.result,result); strcpy(参数设置); strcpy(quad.op,op); strcpy(quad.ag2,ag2); cout<
1