《编译原理》语法分析器实验报告模板-课程设计-信安.docx

上传人:h**** 文档编号:26896729 上传时间:2022-07-20 格式:DOCX 页数:9 大小:13.30KB
返回 下载 相关 举报
《编译原理》语法分析器实验报告模板-课程设计-信安.docx_第1页
第1页 / 共9页
《编译原理》语法分析器实验报告模板-课程设计-信安.docx_第2页
第2页 / 共9页
点击查看更多>>
资源描述

《《编译原理》语法分析器实验报告模板-课程设计-信安.docx》由会员分享,可在线阅读,更多相关《《编译原理》语法分析器实验报告模板-课程设计-信安.docx(9页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、编译原理语法分析器实验报告模板-课程设计-信安 课程设计报告 课程名称编译原理 实验项目设计与实现一个词法分析器 实验仪器PC机 北京信息科技大学 信息管理学院 (课程上机)实验报告 实验名称设计与实现一个语法分析器实验地点信管机房204 实验时间2022.12.20 1.实验目的: 结合讲授内容,进一步培养学生编译器设计的思想,加深对编译原理和应用程序的理解,针对编译过程的重点和难点内容进行编程,独立完成有一定工作量的语法分析程序设计任务,同时强调好的程序设计风格。 2.实验内容: 对输入的文法判定是否为LL(1)文法,若是LL(1)文法,则构造LL(1)分析表,输入一个句子,依据LL(1)

2、分析表输出与句子对应的语法树。 设计LL(1)文法的词法分析器。 3.实验要求: (1)输入一个文法G(如:测试数据1); (2)编写求FIRST集的算法;输出文法G的First集; (3)编写求FOLLOW集的算法;输出文法G的FOLLOW集; (4)编写求SELECT的算法,输出文法G的SELECT集; (5)判定是否为LL(1)文法,若是,则编写构造LL(1)分析表的算法,并输出预测分析表 (6)编写表驱动的预测分析算法; (7)给出输入一个句子(如:测试数据2)的预测分析步骤; (8)输出依据句子构对应的语法树的过程; (9)构造文法G的递归子程序;(选作) 测试数据1:(若用其它测试

3、数据,请替换下面内容) 输入文法G: S-aH H-aMd|d M-Ab| A-aM|e 测试数据2: 输入句子:aaabd# 4.实验准备: 5.实验过程: #include #include #include /*/ int count=0; /*分解的产生式的个数*/ int number; /*所有终结符和非终结符的总数*/ char start; /*开始符号*/ char termin50; /*终结符号*/ char non_ter50; /*非终结符号*/ char v50; /*所有符号*/ char left50; /*左部*/ char right5050; /*右部*/

4、 char first5050,follow5050; /*各产生式右部的FIRST和左部的FOLLOW集合*/ char first15050; /*所有单个符号的FIRST集合*/ char select5050; /*各单个产生式的SELECT集合*/ char f50,F50; /*记录各符号的FIRST和FOLLOW是否已求过*/ char empty20; /*记录可直接推出的符号*/ char TEMP50; /*求FOLLOW时存放某一符号串的FIRST集合*/ int validity=1; /*表示输入文法是否有效*/ int ll=1; /*表示输入文法是否为LL(1)文

5、法*/ int M2020; /*分析表*/ char choose; /*用户输入时使用*/ char empt20; /*求_emp()时使用*/ char fo20; /*求FOLLOW集合时使用*/ /* 判断一个字符是否在指定字符串中 */ int in(char c,char *p) int i; if(strlen(p)=0) return(0); for(i=0;i+) if(pi=c) return(1); /*若在,返回1*/ if(i=strlen(p) return(0); /*若不在,返回0*/ /* 得到一个不是非终结符的符号 */ char c() char c=

6、A; while(in(c,non_ter)=1) c+; return(c); /* 分解含有左递归的产生式 */ void recur(char *point) /*完整的产生式在point中*/ int j,m=0,n=3,k; char temp20,ch; ch=c(); /*得到一个非终结符*/ k=strlen(non_ter); non_terk=ch; non_terk+1=0; for(j=0;j) printf(ninput error!); validity=0; return(0); /*检测输入错误*/ for(k=0;kB B- return(1); else i

7、f(j=1&in(righti0,termin)=1&lefti+1!=c)/A-a ,A-sB ,S- ,B- return(0); else if(j=1&in(righti0,termin)=1&lefti+1=c) continue; else for(k=0;kA mark=1; if(mark=1) continue; else for(k=0;kS ,S- ,B!- 找下一个做不为的-C continue; else if(result=1&i或者A-a temp0=rightj0; temp1=0; merge(first1i,temp,1); else if(in(right

8、j0,non_ter)=1) /左部非终结符并且右部为非终结符 if(rightj0=c)/A-A.寻找下一个A continue; for(k=0;k+) /A-B。无限循环,找到B的位置 if(vk=rightj0) break; if(fk=0) first2(k);/M-A. 此时找出A的位置在M 之后,而A 的first 没有求过,所以要返回求 fk=1; merge(first1i,first1k,2);/A-B 则将B对应符号表位置找出,然后将B first1 复制给A for(k=0;kAB A- 则找到B的位置,求B的first break; if(fm=0) first2(m); fm=1; merge(first1i,first1m,2); else if(_emp(rightjk)=1&k=strlen(rightj)-1) temp0=; temp1=0; merge(first1i,temp,1); else break;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 策划方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com