编译原算符优先分析实验报告 (2)
更新时间:2024-05-03 23:59:01 阅读量: 综合文库 文档下载
- 算符优先分析过程推荐度:
- 相关推荐
编译原理实验报告
——算符优先文法分析
指导教师:师智斌 学号:1006034137
姓名:张越
【实验名称】 算符优先文法分析
【实验目的】
掌握算符优先分析法的原理,利用算符优先分析法将赋值语句进行语法分析,翻译成等价的四元式表示。
【实验内容】
1.算术表达式的文法可以是: (1)S->#E# (2)E->E+T (3)E->T (4)T->T*F (5)T->F
2.根据算符优先分析法,将表达式进行语法分析,判断一个表达式是否正确。
(6)F->P^F (7)F->P (8)P->(E) (9)P->i
【设计思想】
(1)定义部分:定义常量、变量、数据结构。
(2)初始化:设立算符优先关系表、初始化变量空间(包括堆栈、结构体、数组、临时变量等);
(3)控制部分:从键盘输入一个表达式符号串;
(4)利用算符优先文法分析算法进行表达式处理:根据优先关系表对表达式符号串进行堆栈(或其他)操作,输出分析结果,如果遇到错误则显示错误信息。
【流程图】
1
【源码】
#include
char vn; char vt; char s[10];
}MAP[20];//存储分析预测表每个位置对应的终结符,非终结符,产生式 int k;
//用R代表E',W代表T',e代表空
1
char G[10][10]={\存储文法中的产生式
char VN[6]={'E','R','T','W','F'};//存储非终结符 char VT[6]={'i','+','*','(',')','#'};//存储终结符
char SELECT[10][10]={\存储文法中每个产生式对应的SELECT集
char Right[10][8]={\stack
int i,la=strlen(a),j,lb=strlen(b); for(i=0;i if(a[i]==b[j]) return 1; } return 0; } char *Find(char vn,char vt) { int i; for(i=0;i if(MAP[i].vn==vn && MAP[i].vt==vt) return MAP[i].s; } return \} char * Analyse(char * word) 2 { char p,action[10],output[10]; int i=1,j,l=strlen(word),k=0,l_act,m; while(!stak.empty()) stak.pop(); stak.push('#'); stak.push('E'); printf(\_______\\n\ printf(\ 对符号串%s的分析过程\\n\ printf(\ 步骤 栈顶元素 剩余输入串 推到所用产生式或匹配\\n\ p=stak.top(); while(p!='#') { printf(\ \ p=stak.top(); stak.pop(); printf(\ \ for(j=k,m=0;j if(p=='#') { printf(\ 接受\\n\ return \ 3 } printf(\ “%c”匹配\\n\ k++; } else { strcpy(action,Find(p,word[k])); if(strcmp(action,\ { printf(\ 没有可用的产生式\\n\ return \ } printf(\ %c%s\\n\ int l_act=strlen(action); if(action[l_act-1]=='e') continue; for(j=l_act-1;j>1;j--) stak.push(action[j]); } } if(strcmp(output,\ return \} int main () { freopen(\ //freopen(\ char source[100]; int i,j,flag,l,m; printf(\为了方便编写程序,用R代表E',W代表T',e代表空\\n\\n\ 4 printf(\该文法的产生式如下:\\n\ for(i=0;i<8;i++) printf(\ %s\\n\ printf(\该文法的SELECT集如下:\\n\ for(i=0;i<8;i++) { printf(\ SELECT(%s) = { %s }\\n\ } //判断是否是LL(1)文法 flag=1; for(i=0;i<8;i++) { for(j=i+1;j<8;j++) { if(G[i][0]==G[j][0]) { if(compare(SELECT[i],SELECT[j])) { flag=0;break; } } } if(j!=8) break; } if(flag) printf(\有相同左部产生式的SELECT集合的交集为空,所以文法是LL(1)文法。\\n\ 5 else printf(\有相同左部产生式的SELECT集合的交集不为空,所以文法不是LL(1)文法。\\n\ //预测分析表 for(i=0,k=0;i<8;i++) { l=strlen(SELECT[i]); for(j=0;j MAP[k].vn=G[i][0]; MAP[k].vt=SELECT[i][j]; strcpy(MAP[k].s,Right[i]); k++; } } printf(\表达式文法的预测分析表如下:\\n\\n\ printf(\ \ for(i=0;i<6;i++) printf(\ printf(\ for(i=0;i<5;i++) { printf(\ for(j=0;j<6;j++) { for(m=0;m if(VN[i]==MAP[m].vn && VT[j]==MAP[m].vt) { printf(\ 6 break; } } if(m==k) printf(\ \ } printf(\ } /*预测分析程序 Analyse函数*/ //输入源文件串 while(cin>>source) { printf(\分析结果:%s\\n\\n\ } while(1); return 0; } 【运行结果】 7 8
正在阅读:
编译原算符优先分析实验报告 (2)05-03
优秀教师年度考核评语(优秀6篇)03-23
美丽的海滩作文600字07-02
华南理工大学网络教育学院:《工程数学》作业之01(答案)03-09
县委国土资源管理工作总结及下一年工作总结08-04
描写老师外貌的小片段摘抄11-20
初三 二模 优秀作文05-21
可爱的柚子作文300字06-29
塑料排水板的堆载预压法处理地基06-28
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 算符
- 编译
- 优先
- 实验
- 报告
- 分析
- 银行员工晨会游戏方案集锦
- 双套管传热实验讲义
- 浙江工贸职业技术学院课程思政实施方案(讨论稿) (2)
- 2018年中国残疾人车行业深度评估研究报告目录
- 中国 德阳 西部国际商贸城招商方案 - 图文
- 资料整理范本填写(续)
- 2018年中国实木复合地板发展现状与市场前景分析(目录) - 图文
- 南京工业大学毕业设计(投标)
- 黄源深English Book4册6课8课
- 遵义南城体育馆网架工程施工组织设计 - 图文
- 微机原理与接口技术实验指导书 - 图文
- 006 深挖路基施工细则 - 图文
- 安卓系统音乐播放器 - 图文
- 2010宁夏海南黑龙江文综卷
- 班主任工作手册电子版(敬文)
- PICC导管维护的标准化流程对导管相关性感染的影响
- 纪念建党90周年红色经典诗文
- 铁运〔2006〕26号信号防雷细则 - 图文
- 遗传学各章试题及答案
- 德国HSW狼牌工业光学内窥镜行业剖析