编译原理实验报告 - 词法分析器和LL(1)文法
更新时间:2024-04-16 19:23:01 阅读量: 综合文库 文档下载
- 编译原理实验报告心得体会推荐度:
- 相关推荐
《编译原理》综合性
实 验 报 告
实验学期 2016 至 2017 学年 第 1 学期 专业 计算机科学与技术 班级 1403 学生姓名 黄世增 学号 1411640305 任课教师 赵曦 实验成绩
1
《编译原理》课程综合性实验报告
开课实验室:C210 2016年 12月 6日 实验题目 词法分析器的设计 一、实验目的 通过设计、编制、调试一个具体的词法分析程序,实现对高级程序设计语言源程序进行扫描, 并将其分解为各种单词的词法分析方法;加深对课堂教学的理解;提高词法分析方法的实践能力。 二、实验要求 任选一种高级程序设计语言编程完成词法分析器。词法分析器应以教材所述分词原理为依据,使用恰当的数据结构和方法,结构清晰、高效。 编制一个读单词过程,源程序保存在文本文件中(也可键盘输入),读取该文件,识别出各个具有独立意义的单词,即关键字、标识符、常数、运算符、分界符五大类。依次输出各个单词的内部单词种别及单词符号自身值,遇到错误时可显示“Eorror”,然后跳过错误部分继续显示。 二、实验设备与环境 1.硬件:PC机Pentium100以上。 2.软件:Win10,VS2010。 三、实验内容 1.正规文法 <关键字>-> int |for| while | do | return | break | continue <运算符和界符>-> |+ | - | * | / |==| < | <= |!= | > | >= | , | ; | ( | ) | {|} <标识符>-> letter (letter | digit)* <整型常数>-> digit digit* 2.算法思想 算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼接出相应的单词符号。 2.1 主程序
2
置初值 调用扫描子程序 将结果存入结构体 否 输入串结束 是 输出单词二元组 结束 图1 词法分析主程序示意图 其中初始包括关键字、运算符、界限符的置初值。 2.2 扫描子程序的算法思想: 在词法分析中,先以只读方式读取一个文件,自文件头开始扫描文本,滤去开头的空格、回车符、换行符等。读取的字符送入word。扫描第一个字符,看匹配的类型,并进行相应的类型分析,满足判断类型时,输出其种别码和值。
3
忽略空格 是 是 text是否扫描结束 返回 否 字母 数字 其他 拼字符串 运算符、 符号 界符等符号 拼数 是否关键字? 否 (4/5,单词自身值) 报错 是 单词自身值) (2, (1,单词自身值) (3,单词自身值) 返回 图 2 扫描子程序 四、实验步骤 编写程序时,先定义几个全局变量,key[]事先存放7个关键字,words[]用来存放识别出来的单词二元组,text用来存放从文件读取的内容,word用于存放识别出来的单词,length存放字符个数,k存放识别出来的单词个数。 首先,将文本内容读取到text中,文本内容最后一个字符是空白符,然后调用scan方法,逐个扫描每个字符,如果word的第一个字符是字母,则进行拼字符串,再判断是关键字还是标识符;如果word的第一个字符是数字,则在word清空之前判断是否有识别出非数字字符,若有,则出错,若没有,则识别出来的字符串是常数;若word第一个字符是运算符或界限符,则各自存到words[]中。
4
最后扫描结束后输出。 五、实验结果及分析 六、实验小结和思考 通过这次实验,我对词法分析器有了进一步的了解,而且对词法分析和语法分析在实践中的应用有了深入的掌握, 让我对高级语言的学习有了更深的认识 ,了解得更透彻。 七、源程序清单
5
#include
6
break; } else if(j==6) words[k].category=2;//表示标识符 } k++; word=\; i--; } } else if(word[0]==','||word[0]==';'||word[0]=='{'||word[0]=='}'||word[0]=='('||word[0]==')')//首字符是界限符 { words[k].Word=word; words[k].category=5;//表示界限符 k++; word=\; i--; } else if(word[0]=='+'||word[0]=='-'||word[0]=='*'||word[0]=='/'||word[0]=='='||word[0]=='>'||word[0]=='<'||word[0]=='!')//首字符是运算符 { if(text[i]=='=') { word+=text[i]; words[k].Word=word; words[k].category=4;//表示运算符 k++; word=\; } else { words[k].Word=word; words[k].category=4;//表示运算符 k++; word=\; i--; } } else if(word[0]>=48&&word[0]<=57)//首字符是数字 { if(text[i]>=48&&text[i]<=57)
7
{ word+=text[i]; } else if((text[i]>='A'&&text[i]<='Z')||(text[i]>='a'&&text[i]<='z')) { word+=text[i]; words[k].category=6;//表示出错,标识符以数字开头 } else { words[k].Word=word; if(words[k].category!=6) words[k].category=3;//表示常数 k++; word=\; i--; } } } else { if(text[i]!=10&&text[i]!=32&&text[i]!=9) { word+=text[i]; } } } } int main() { FILE *fp; //文件指针 fp=fopen(\,\); //打开文件 if(fp==NULL) { printf(\e!\\n\); exit(0); } int i=0; while(!feof(fp)) //判断是否到文件结尾 { text+=fgetc(fp); i++;
8
} } length=i;//text最后一个字符是空字符 fclose(fp); //关闭文件 scan(); for(i=0;i 9 开课实验室:C210 2016年 12月 8日 实验题目 语法分析——LL(1)语法分析方法的实现 一、实验目的 通过设计、开发一个高级语言的LL(1)语法分析程序,实现对源程序的语法检查和结构分析,加深对相关课堂教学内容(包括自顶向下语法分析、First集、Follow集、Select集、判断LL(1)文法的方法、文法等价变换、LL(1)分析表的构造、对某一输入串的分析过程的理解,提高语法分析方法的实践能力。 二、实验要求 消除直接左递归前的文法 消除直接左递归后的等价文法 G [E]:E→E+T G’[E]: E→TE’ E→T E’→+TE’|ε T→T*F T→FT’ T→F T’→*FT’|ε F→(E)|i F→(E)|i 根据文法建立LL(1)分析表,并对输入串i+i*i进行语法分析,判断其是否是合法的句子,给出句子的分析过程。 具体要求如下: 1、理解语法分析在编译程序中的作用; 2、理解LL(1)语法分析方法对文法的要求(必须是LL(1)文法); 3、理解LL(1)分析器模型; 4、熟练掌握文法变换方法(消除直接左递归和提取左公共因子)。 5、熟练掌握Select集合的求解方法和LL(1)分析表的构造方法; 二、实验设备与环境 1.硬件:PC机Pentium100以上。 2.软件:Win10,VS2010。 三、实验内容 给定一个上下文无关文法G,在LL(1)语法分析方法中,必须先求出Select集,通过Select集判断是否是LL(1)文法,若是,则构造预测分析表。求出预测分析表之后,键盘输入一个字符串,依据LL(1)分析表单步输出字符串的分析过程。 四、实验步骤 10 输入字符串 和初始符号栈 符号栈大小 N 大于等于0? Y Y N 待分析字符 栈顶字符是否为合法字 Y N 符? 是否为合法字符? 待分析字符是 N Y 否和符号栈栈 对照分析表判断采用产生式 顶字符相等? 待分析字符 Y 为空? 弹出栈顶符号,不压入栈 和栈顶字符同时为“#” 分析成功 Y N 产生式右部 匹配分析字符分析下一个字符 N 五、实验结果及分析 弹出栈顶符号,产生式右部逆序入栈 修改栈大小 修改栈大小 11 六、实验小结和思考 本实验加深了我对 LL(1)分析法的算法和思想的理解。 七、源程序清单 #include 12 int l=1; //符号栈大小 int k=1; //分析输入串的第几个字符 int how; //利用哪个产生式 int step=1; //步骤 int length=0; printf(\请输入一串字符串,以#结尾:\); do { scanf(\,&cha); str[length]=cha; str1[length]=cha; length++; }while(cha!='#'); printf(\步骤\\t符号栈\\t\\t输入串\\t\\t所用产生式\\n\); do { cha=str1[k-1]; printf(\,step); for(i=0;i<=l;i++) printf(\,ch[i]); //输出符号栈 printf(\); for(i=k-1;i if(ch[l]!=cha) { if(ch[l]!=39) { switch(ch[l]) { case 'E': m=0;break; case 'T': m=2;break; case 'F': m=4;break; default: m=-1;break; } } else { switch(ch[l-1]) { case 'E': m=1;break; case 'T': m=3;break; default: m=-1;break; } } } if(m!=-1) { if(ch[l]!=cha) { how=ll1[m][j]; if(how==1) { printf(\); n=3; l=l+n-1; ch[l]='T'; ch[l-1]=39; ch[l-2]='E'; step=step+1; } 14 else if(how==2) { printf(\); n=4; l=l+n-2; ch[l]='+'; ch[l-1]='T'; ch[l-2]=39; ch[l-3]='E'; step=step+1; } else if(how==3) { printf(\ε?\\n\); l=l-2; step=step+1; } else if(how==4) { printf(\); n=3; l=l+n-1; ch[l]='F'; ch[l-1]=39; ch[l-2]='T'; step=step+1; } else if(how==5) { printf(\); n=4; l=l+n-2; ch[l]='*'; ch[l-1]='F'; ch[l-2]=39; ch[l-3]='T'; step=step+1; } else if(how==6) { printf(\ε?\\n\); l=l-2; step=step+1; } 15 else if(how==7) { printf(\); n=3; l=l+n-1; ch[l]='('; ch[l-1]='E'; ch[l-2]=')'; step=step+1; } else if(how==8) { printf(\); n=1; l=l+n-1; ch[l]='i'; step=step+1; } else { printf(\错误!\\n\); break; } } else { if(cha=='#' && ch[l]=='#') { printf(\成功!\\n\); break; } else { printf(\); l=l-1; k=k+1; step=step+1; } } } else { printf(\错洙?误ó!\); break; 16 } } } else //错误的字符 { printf(\错误的字符!\); break; } }while(l>=0); getch(); return 0; 17
正在阅读:
路面基层级配碎石试验检测与施工控制12-30
人教版小学三年级数学下册教案全册及计划06-12
中小企业财务风险的防范与控制研究06-01
最全面的孕妇能吃和不能吃的食物05-24
浙江天童国家森林公园鸟类区系和群落特征08-30
学生个人孙丽美事迹学习心得体会范文08-03
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 词法
- 分析器
- 文法
- 编译
- 原理
- 实验
- 报告
- LL
- 税收理论与实务在线作业一 满分答案
- 用友u8中常用数据库表及主要字段
- 粤教版五年级下册科学实验操作题
- 阳极保护硫酸酸冷器技术要求协议
- 金属组织控制原理
- 范琨:创建重庆两江发展银行
- 关于进一步加强路基质量控制管理的通知
- 民政业务知识竞赛题
- 团体心理辅导活动方案(减压)
- 张中丞传后叙
- 2018年科研工作总结范文4篇
- 2009年山东省济南市中考英语试题(含答案)
- 苏教版七下地理复习提纲
- 企业人力资源管理师一级范文
- 中国加油站网络市场发展研究及投资前景报告(目录) - 图文
- 海水高压泵IPO上市咨询(2014年最新政策+募投可研+细分市场调查
- 特殊儿童言语治疗学后感
- 石塘水库除险加固工程初步设计报告
- 有答案 数列综合练习(错位相减法、裂项相消法)
- XML实验报告 - 定义编写XML文档