




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、华北水利水电学院 编译原理实验报告201220退学年第一学期 2011 级计算机科学与技术专业班级:2011179 学号:2011179 姓名:_一、实验题目:语法分析(算符优先分析程序)(1)选择最有代表性的语法分析方法算符优先法;(2)选择对各种常见程序语言都用的语法结构,如赋值语句(尤指表达式)作为分析对象,并且与所选语法分析方法要比较贴切。二、实验内容(1)根据给定文法,先求出 FirstVt和LastVt集合,构造算符优先关系表(要求算符优先 关系表输出到屏幕或者输出到文件);(2)根据算法和优先关系表分析给定表达式是否是该文法识别的正确的算术表达式(要求输出归约过程)(3)给定表达
2、式文法为:G(E' ): E' 一#E#E E+T | TT-T*F |FF 一 (E)|i(4)分析的句子为:(i+i)*i 和 i+i)*i三、程序源代#include<stdlib.h>#include<stdio.h>#include<string.h>#include<iostream.h>#define SIZE 128char priority66;/算符优先关系表数组char inputSIZE;/存放输入的要进行分析的句子char remainSIZE;存放剩余用char AnalyseStackSIZE; 分析
3、栈void analyse。;int testchar(char x); /判断字符X在算符优先关系表中的位置void remainString();/移进时处理剩余字符串,即去掉剩余字符串第一个字符int k;void init()构造算符优先关系表,并将其存入数组中priority10='>'priority11='>'priority12='<'priority13='<'priority14='>'priority15='>'priority20='
4、;>'priority21='>'priority22='$'/ 无优先关系的用$表示priority23='$'priority24='>'priority25='>'priority30='<'priority31='<'priority32='<'priority33='<'priority34='='priority35='$'priority40='
5、;>'priority41='>'priority42='$'priority43='$'priority44='>'priority45='>'priority50='<'priority51='<'priority52='<'priority53='<'priority54='$'priority55='=')void analyse。/对所输入的句子进行算符优
6、先分析过程的函数(int i,j,f,z,z1,n,n1,z2,n2;int count=0;/操作的步骤数char a; /佣于存放正在分析的字符char p,Q,p1,p2;f=strlen(input); /测出数组的长度for(i=0;i<=f;i+)(a=inputi;if(i=0)remainString();if(AnalyseStackk='+'|AnalyseStackk='*'|AnalyseStackk='i'|Analys eStackk='('|AnalyseStackk=')'|A
7、nalyseStackk='#')j=k;elsej=k-1;z=testchar(AnalyseStackj);/从优先关系表中查出sj和a的优先关系 if(a='+'|a='*'|a='i'|a='('|a=')'|a='#')n=testchar(a);else侬口果句子含有不是终结符集合里的其它字符,不合法(printf("错误!该句子不是该文法的合法句子!n");break;)p=priorityzn;if(p='$')(printf(&
8、quot; 错误!该句子不是该文法的合法句子!n");return;if(p='>') for( ; ; )Q=AnalyseStackj;if(AnalyseStackj-1='+'|AnalyseStackj-1='*'|AnalyseStackj-1='i'|Ana lyseStackj-1='('|AnalyseStackj-1=')'|AnalyseStackj-1='#')j=j-1;elsej=j-2;z1=testchar(AnalyseStackj)
9、;n1=testchar(Q);p1=priorityz1n1;if(p1='<') /把 AnalyseStackj+1AnalyseStackk归约为 Ncount+;printf("(%d)%st%10ct%5c%17st 归 约n",count,AnalyseStack,p,a,remain);k=j+1;i-;AnalyseStackk='N'int r,r1;r=strlen(AnalyseStack);for(r1=k+1;r1<r;r1+)AnalyseStackr1='0'break;elseco
10、ntinue;elseif(p='<') /表示移进count+;printf("(%d)%st%10ct%5c%17st 移 进n",count,AnalyseStack,p,a,remain); k=k+1;AnalyseStackk=a;remainString(); elseif(p='=')z2=testchar(AnalyseStackj);n2=testchar('#');p2=priorityz2n2;if(p2='=') count+;printf("(%d)%st%10ct%
11、5c%17st接 受n",count,AnalyseStack,p,a,remain);printf(" 该句子是该文法的合法句子。n");break; elsecount+;printf("(%d) %st%10ct%5c%17st 移 进 n",count,AnalyseStack,p,a,remain);k=k+1;AnalyseStackk=a;remainString();elsen");printf(" 错误!该句子不是该文法的合法句子! break;int testchar(char x)int m;if(x=
12、'+')m=0;if(x='*')m=1;if(x='i')m=2;if(x='(')m=3;if(x=')')m=4;if(x='#')m=5;return m;void remainString()int i,j;i=strlen(remain);for(j=0;j<i;j+)remainj=remainj+1;remaini-1='0'void main()init();printf(" 文法为:n");printf("(0)E'-&
13、gt;#E#n");printf("(1)E->E+Tn");printf("(2)E->Tn");printf("(3)T->T*Fn");printf("(4)T->Fn");printf("(5)F->(E)n");printf("(6)F->in");printf("n");printf("算符优先关系表n");printf("+*i()#n");printf(&
14、quot; +><<<>>n");printf(" *>><<>>n");printf(" i>>>>n");printf(" (<<<<=n");printf(" )>>>>n");printf(" #<<<<=n");printf("-n");printf(" 请输入要进行分析的句子(以
15、#号结束输入):n");gets(input);/#输入的字符串存到数组中剩余输入串printf(" 步骤栈优先关系当前符号移进或归约n");k=0;AnalyseStackk='#'AnalyseStackk+1='0'int length,i; /初始化剩余字符串数组为输入串length=strlen(input);/for(i=0;i<length;i+)remaini=inputi;remaini='0'analyse。;/对所输入的句子进行算符优先分析过程的函数四、测试结果算符优先关系表* i <
16、;优先关系当前符号tt<N tt<N+ #<N+i tt<N+N tt<H tt<N>UN ttN* HN«i HNmN UN-1剩余输入串+i5*itt i>*i#>*iB*i#i#iB约J3期进进SW进金进约鹭 进归归接ress ahu key t o cont inue输入用(i+i)*i的算符优先分析过程文祛为:目a ?£->£+1£2E-yi<3>T->T»F<5>F-XE>算符优先关系表+*i<><<<青输入要进行分析的句子(以口号绍束输入);装骤 筏优先关系当前符号tt<i<5>C4>(2>Press4fi+州<+#N+<iItN+i>>UNiN)该句子不是该文书的合法句子!any key to continue剩余输入串?*itt*itl约臼视进电进约约 进箫归 移输入用i+i)*i的算符优先分析过程
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 租用电源安全协议书
- 美容公司保密协议书
- 装修材料保证协议书
- 科技服务材料采购合同
- 研发合作合同履约金约定
- 零售业投资合同
- 2025年服务行业工会工作计划
- 绿色停车服务协议
- 2025年商业物业管理下半年工作计划
- 科技公司年度创新研发工作计划
- 献血法知识试题及答案
- 2025年北京市租赁合同模板
- 高通量透析与血液透析滤过介绍
- 2024年甘肃省临潭县事业单位公开招聘医疗卫生岗笔试题带答案
- 宁波2025年宁波海洋经济发展示范区象山县高层次紧缺人才选聘笔试历年参考题库附带答案详解
- T-WSJD 21-2022 内镜储存干燥柜卫生要求
- 23G409先张法预应力混凝土管桩
- MOOC 国情分析与商业设计-暨南大学 中国大学慕课答案
- 第十二讲 建设社会主义生态文明PPT习概论2023优化版教学课件
- 常用生物化学检验技术
- 提高钢管桩接头焊接质量图文
评论
0/150
提交评论