编译原理实验4算符优先算法

编译原理实验4算符优先算法

ID:41110312

大小:60.50 KB

页数:16页

时间:2019-08-16

编译原理实验4算符优先算法_第1页
编译原理实验4算符优先算法_第2页
编译原理实验4算符优先算法_第3页
编译原理实验4算符优先算法_第4页
编译原理实验4算符优先算法_第5页
资源描述:

《编译原理实验4算符优先算法》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、一、实验目的与任务算术表达式和赋值语句的文法可以是(你可以根据需要适当改变):S→i=EE→E+E

2、E-E

3、E*E

4、E/E

5、(E)

6、i根据算符优先分析法,将赋值语句进行语法分析,翻译成等价的一组基本操作,每一基本操作用四元式表示。二、实验涉及的相关知识点算符的优先顺序。三、实验内容与过程如参考C语言的运算符。输入如下表达式(以分号为结束):(1)a=10;(2)b=a+20;注:此例可以进行优化后输出(不作要求):(+,b,a,20)(3)c=(1+2)/3+4-(5+6/7);四、实验结果及分析(1)输出:(=,a,10,-)(2)输出:(

7、=,r1,20,-)(+,r2,a,r1)(=,b,r2,-)(3)输出:(+,r1,1,2)(/,r2,r1,3)(/,r3,6,7)(+,r4,5,r3,)(+,r5,r2,4)(-,r6,r5,r4)(=,c,r6,-)五、实验有关附件(如程序、附图、参考资料,等)//程序功能://根据算符优先分析法,将表达式进行语法分析,判断一个表达式是否正确。//文法:E→E+E

8、E-E

9、E*E

10、E/E

11、(E)

12、i//其中i为无符号整数////例://输入:10;//输出:正确//输入:1+2;//输出:正确//输入:(1+2)/3+4-(5+6/

13、7);//输出:正确//输入:((1-2)/3+4;//输出:错误////输入测试数据保存在同目录的文本文件testin.txt中,保存格式://表达式行;//表达式行;//.....//预期的输出保存在同目录的文本文件testout.txt中,保存格式://表达式行;//正确/错误//表达式行;//正确/错误//...../////////////////////////////////////////////////////////////////#include"stdio.h"#include"stdlib.h"#defineTRUE

14、1#defineFALSE0//文件信息:#defineTESTIN_FILENAME"testin.txt"#defineTESTOUT_FILENAME"testout.txt"FILE*fTestIn;FILE*fTestOut;//打开文件后的柄//运算符定义:#defineO_NUMBER8//运算符个数,+-*/()i##defineO_PLUS0//加+#defineO_MINUS1//减-#defineO_TIMES2//乘*#defineO_SLASH3//除/#defineO_L_PAREN4//左括号(parenthes

15、is)#defineO_R_PAREN5//右括号#defineO_IDENT6//标识符#defineO_NUL7//语法界符#//表达式缓冲区:由专门函数操作(ReadFormula(),GetChar())#defineBUFFER_SIZE1000//表达式缓冲区大小charBuffer[BUFFER_SIZE];//表达式缓冲区,以''表示结束intipBuffer=0;//表达式缓冲区当前位置序号//算符优先关系表:charO_Table[O_NUMBER][O_NUMBER]={{'>','>','<','<','<','>

16、','<','>'},{'>','>','<','<','<','>','<','>'},{'>','>','>','>','<','>','<','>'},{'>','>','>','>','<','>','<','>'},{'<','<','<','<','<','=','<','-'},{'>','>','>','>','-','>','-','>'},{'>','>','>','>','-','>','-','>'},{'<','<','<','<','<','-','<','='}};//优先关系表:八个字符分别是+-*/()i#,

17、其中'-'表示出错//文法:#defineOG_NUMBER6//文法个数charOG[OG_NUMBER][4]={"E+E","E-E","E*E","E/E","(E)","i"};//文法右部//单词序列存放格式定义:#defineTOKEN_MAX_LENTH100//最大的单词长度+1typedefstruct{charch;//存放字符:+-*/()i#EintNo;//存放算符优先关系表中的序号//doubleValue;//当ch==i时,且为数值时,存放值的大小}SToken;#defineMAX_TOKEN_NUMBER

18、1000//在一个表达式中允许最大的单词个数STokenToken[MAX_TOKEN_NUMBER];//单词序列,最后一个以“#”结束intTokenNumbe

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。