- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理实验4算符优先算法
一、实验目的与任务
算术表达式和赋值语句的文法可以是(你可以根据需要适当改变):
S→i=E
E→E+E|E-E|E*E|E/E|(E)|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)输出:(=,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|E-E|E*E|E/E|(E)|i
// 其中i为无符号整数
//
//例:
//输入:10;
//输出:正确
//输入:1+2;
//输出:正确
//输入:(1+2)/3+4-(5+6/7);
//输出:正确
//输入:((1-2)/3+4;
//输出:错误
//
//输入测试数据保存在同目录的文本文件testin.txt中,保存格式:
// 表达式行;
// 表达式行;
// .....
//预期的输出保存在同目录的文本文件testout.txt中,保存格式:
// 表达式行;
// 正确/错误
// 表达式行;
// 正确/错误
// .....
/////////////////////////////////////////////////////////////////
#include stdio.h
#include stdlib.h
#define TRUE 1
#define FALSE 0
//文件信息:
#define TESTIN_FILENAME testin.txt
#define TESTOUT_FILENAME testout.txt
FILE * fTestIn;
FILE * fTestOut; //打开文件后的柄
//运算符定义:
#define O_NUMBER 8 //,+-*/()i#
#define O_PLUS 0 // +
#define O_MINUS 1 // 减-
#define O_TIMES 2 // 乘*
#define O_SLASH 3 // 除/
#define O_L_PAREN 4 //左括号(parenthesis)
#define O_R_PAREN 5 //右括号
#define O_IDENT 6 //标识符
#define O_NUL 7 //语法界符#
//表达式缓冲区:(ReadFormula(),GetChar())
#define BUFFER_SIZE 1000 //
char Buffer[BUFFER_SIZE]; //表达式缓冲区,\0表示结束
int ipBuffer = 0; //表达式缓冲区当前位置序号
//算符优先关系表:
char O_Table[O_NUMBER][O_NUMBER] = {
{,,,,,,,},
{,,,,,,,},
{,,,,,,,},
{,,,,,,,},
{,,,,,=,,-},
{,,,,-,,-,},
{,,,,-,,-,},
{,,,,,-,,=}
}; //优先关系表:+-*/()i#,其中-表示出错
//文法:
#define OG_NUMBER 6 //
char OG[OG_NUMBER][4] = {E+E,E-E,E*E,E/E,(E),i}; //文法右部
//单词序列存放格式定义:
#define TOKEN_MAX_LENTH 100 //最大的单词长度+1
typedef struct
{
char ch; //存放字符:+-*/()i#E
int No; //存放算符优先关系表中的序号
//double Value; //当ch==i时,且为数值时,存放值的大小
} SToken;
#define MAX_TOKEN_NUMBER 1000 //在一个表达式中允许最大的单词个数
SToken Token[MAX_TOKEN_NUMBER]; //单
您可能关注的文档
- 统计学课件 第四章 参数估计.ppt
- 综制车间小容量全自动灯检机.doc
- 综合代维资质评定企业申请说明.doc
- 综合利用自备电站项目智能电度表技术规范书.doc
- 综合医院中感染性疾病综合楼的建筑设计和实例.docx
- 统一版黑龙江农业互助保险模式介绍.ppt
- 综合自动化系统技术规范.doc
- 综合预警.doc
- 绿色包装材料国家地方联合工程实验室项目可行性申报书.doc
- 绿色包装材料国家地方联合工程实验室项目投资计划方案.doc
- 2023年陕西省商洛市柞水县两河乡招聘社区工作者真题参考答案详解.docx
- 2023年陕西省延安市宝塔区青化砭镇招聘社区工作者真题参考答案详解.docx
- 2023年陕西省汉中市西乡县罗镇乡招聘社区工作者真题及参考答案详解.docx
- 2023年陕西省延安市洛川县永乡招聘社区工作者真题及答案详解1套.docx
- 2023年陕西省商洛市商州区三岔河乡招聘社区工作者真题及参考答案详解一套.docx
- 2023年陕西省宝鸡市陇县八渡镇招聘社区工作者真题及参考答案详解一套.docx
- 2023年陕西省延安市洛川县石泉乡招聘社区工作者真题及参考答案详解一套.docx
- 2023年陕西省商洛市商州区沙河子镇招聘社区工作者真题附答案详解.docx
- 2023年陕西省咸阳市礼泉县赵镇招聘社区工作者真题及参考答案详解1套.docx
- 2023年陕西省商洛市丹凤县留仙坪乡招聘社区工作者真题及参考答案详解一套.docx
文档评论(0)