




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、编译原理综合性实验报告实验学期 2016 至 2017 学年 第学期专业计算机科学与技术班级 1403学生姓名 黄世增 学号 1411640305任课教师赵嘎实验成绩16编译原理课程综合性实验报告开课实验室:C2102016年 12月 6日实验题目词法分析器的设计一、实验目的通过设计、编制、调试一个具体的词法分析程序,实现对高级程序设计语言源 程序进行扫描,并将其分解为各种单词的词法分析方法;加深对课堂教学的理解;提高词法分析方法的实践能力。二、实验要求任选一种高级程序设计语言编程完成词法分析器。词法分析器应以教材所述 分词原理为依据,使用恰当的数据结构和方法,结构清晰、高效。编制一个读单词过
2、程,源程序保存在文本文件中(也可键盘输入),读取该文 件,识别出各个具有独立意义的单词,即关键字、标识符、常数、运算符、分界符 五大类。依次输出各个单词的内部单词种别及单词符号自身值,遇到错误时可显示“Eorror”,然后跳过错误部分继续显示。二、实验设备与环境1 .硬件:PC机 Pentium100 以上。2 .软件:Win10, VS2010三、实验内容1 .正规文法< 关键字 >-> int |for| while | do | return | break | continue< 运算符和界符 >-> |+ | - | * | /1=| < |
3、 <= |!= | > | >= | , | ; | ( | ) | |市识符 >-> letter (letter | digit)*< 整型常数 >-> digit digit*2 .算法思想算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号, 其基本思想是根据扫描到单词符号的第一个字符的种类,拼接出相应的单词符号。2.1 主程序图1词法分析主程序示意图其中初始包括关键字、运算符、界限符的置初值。2.2 扫描子程序的算法思想:在词法分析中,先以只读方式读取一个文件,自文件头开始扫描文本,滤去开头的空格、回车符、换行符等。读取的
4、字符送入word。扫描第一个字符,看匹配的类型,并进行相应的类型分析,满足判断类型时,输出其种别码和值。四、实验步骤编写程序时,先定义几个全局变量,key口事先存放7个关键字,words口用 来存放识别出来的单词二元组,text用来存放从文件读取的内容,word用于存放 识别出来的单词,length存放字符个数,k存放识别出来的单词个数。首先,将文本内容读取到text中,文本内容最后一个字符是空白符,然后调 用scan方法,逐个扫描每个字符,如果 word的第一个字符是字母,则进行拼字 符串,再判断是关键字还是标识符;如果 word的第一个字符是数字,则在 word 清空之前判断是否有识别出非
5、数字字符,若有,则出错,若没有,则识别出来的 字符串是常数;若word第一个字符是运算符或界限符,则各自存到 words口中。最后扫描结束后输出 五、实验结果及分析IMTT7 JTTnZS KA4 . f_*.JIIVY L-.r LtTTm n o = o Jr<lz- hl Q nb » 3 - 1 - b = 3 + 2 - a + 1 E5.1,¥用2"2,鸳&5?2?露2?鸳3?工2?4,工53工 h"*-* -1 1a六、实验小结和思考通过这次实验,我对词法分析器有了进一步的了解,而且对词法分析和语法 分析在实践中的应用有了深入
6、的掌握,让我对高级语言的学习有了更深的认识 了解得更透彻。七、源程序清单#includ e<stdio.h>#includ e<stdlib.h>#includ e<string> using namespace std;#define MAX 10000struct WordString string Word; / 单词 int category; / 类别 ;char *key7 = "int" ,"for" , "while" , "do", "return&q
7、uot; , "break" , "continue" ;/ 关键字 WordString wordsMAX;/创建一个单词符号串string text;/读入的文本存入text中string word;分割出的单词用 word表示int length;/字符个数int k;/总单词个数void scan() int i,j;k=0;word=""for(i=0;i<=length-1;i+) if (word!= "")if(word0>= 'A)&&(word0<= &
8、#39;Z')|(word0>= 'a')&&(word0<= 'z') 首字符是字母 if(texti>= 'A')&&(texti<= 'Z')|(texti>= 'a')&&(texti<= 'z')|(texti>=48)&&(texti <=57) word+=texti; else wordsk.Word=word; for(j=0;j<7;j+) if(word
9、sk.Word=keyj) wordsk.category=1; /break;)else if(j=6) wordsk.category=2; /表土标识符 ) k+;word="" i-;)elseif(word0= ','|word0= ''|word0= ''|word0= ''|word0= '('|word0= ')')/首字符是界限符wordsk.Word=word;wordsk.category=5; / 表示界限符k+;word=""i-;e
10、lseif(word0= '+'|word0= '-' |word0= '*'|word0= '/' |word0= '=' |word0= '>' | word0= '<' |word0= '!')/首字符是运算符 if(texti= '=') word+=texti;wordsk.Word=word;wordsk.category=4; / 表示运算符 k+;word="" else wordsk.Word=word
11、;wordsk.category=4; / 表示运算符 k+;word="" i-; else if(word0>=48&&word0<=57)/ 首字符是数字if(texti>=48&&texti<=57) word+=texti;else if(texti>= A'&&texti<= 'Z')|(texti>= 'a'&&texti<= 'z') word+=texti;wordsk.category=6
12、; /表示出错,标识符以数字开头 else wordsk.Word=word;if (wordsk.category!=6)wordsk.category=3; / 表示常数 k+;word=""; i-;elseif(texti!=10&&texti!=32&&texti!=9)word+=texti; int main() FILE *fp;/文件指针fp=fopen( "text.txt" ,"r");/ 打开文件if(fp=NULL) printf( "Can't open t
13、his fil e!n"); exit(0); int i=0; while (!feof(fp)/判断是否到文件结尾 text+=fgetc(fp); i+;length=i; /text最后一个字符是空字符fclose(fp);/ 关闭文件scan();for(i=0;i<k;i+)/ 输出 if (wordsi.category=6)printf( "%s Eorrorn" ,wordsi.Word.c_str(); elseprintf( "(%d, %s)n" ,wordsi.category,wordsi.Word.c_str
14、(); getchar();return 0;开课实验室:C2102016年 12月 8日实验题目语法分析 LL(1)语法分析方法的实现一、实验目的通过设计、开发一个高级语言的LL (1)语法分析程序,实现对源程序的语法 检查和结构分析,加深对相关课堂教学内容(包括自顶向下语法分析、First集、Follow集、Select集、判断LL (1)文法的方法、文法等价变换、LL分析表的构 造、对某一输入用的分析过程的理解,提高语法分析方法的实践能力。、实验要求消除直接左递归前的文法G E: E- E+TE-TT - T*FT-FF -(E)|i消除直接左递归后的等价文法G' E E- TE
15、'E' 一+TE' | £T - FT'T' 一*FT' | £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 以上。
16、2,软件:Win10, VS2010三、实验内容给定一个上下文无关文法 G,在LL(1)语法分析方法中,必须先求出Select集 通过Select集判断是否是LL(1)文法,若是,则构造预测分析表。求出预测分析表 之后,键盘输入一个字符串,依据LL(1)分析表单步输出字符串的分析过程。四、实验步骤五、实验结果及分析所用产生式DTE 卜沂F->i丁->艺E' ->+TE'I-/FT'F->iT'冲FT'垢第 f P,1J -L- LU. + l*+,d_ 1 / 1 ! 士口4L - lz吊s.E £->->如
17、成* i i+1+11*"£i # #Fir T r T T TrTTTTTTT HyE eeeeeeeebefefef #"# 4 #*#A-鬟亭D 0 12 3 4 5 6 r 1 £ E5 8 7 CO O 二-1 -二 -:iI5§e-sKu a nq 二 hi zer qU es ktu埠n 14U3 -141 "I黄世鲁-L1后去:君析口 ebu q_L I 由-均忻,e«£六、头验小结和思考本实验加深了我对LL(1)分析法的算法和思想的理解。七、源程序清单#include <string.h&g
18、t;#include <stdio.h>#include <stdlib.h>#include <conio.h>/*1:E->TE' 2:E'->+TE' 3:E'->£ ? 4:T->FT' 5T->*FT 6:T'->7:F->(E) 8:F->i*/int ll156=1,0,0,1,0,0,0,2,0,0,3,3,4,0,0,4,0,0,0,6,5,0,6,6,8,0,0,7,0,0;/ 表示 LL(1)分析表内容int main()char
19、ch10='#','E' ;/用于存放符号栈内容char str10;/存放输入出char str110;/用于存放最初输入的字符串char cha;/分析字符int i,j,m,n;/j :终结符所代表数字;m:非终结符所代表数字;n :产生式右部大小intl=1;/符号栈大小intk=1;/分析输入用的第几个字符inthow;/利用哪个产生式intstep=1;/步骤intlength=0;printf("请输入一用字符串,以#结尾:");doscanf( "%c” ,&cha);strlength=cha;str1le
20、ngth=cha;length+; while (cha!= '#');printf("步骤t符号栈tt 输入用tt 所用产生式n"); docha=str1k-1;printf( "%dt" ,step);for (i=0;i<=l;i+)printf( "%c" ,chi);/ 输出符号栈printf( "tt");for (i=k-1;i<length;i+)printf( "%c" ,stri);printf( "tt");switch (
21、cha) case 'i' j=0; break ; case '+': j=1; break ; case '*' j=2; break ; case '(' j=3; break ; case ')' j=4; break ; case '#': j=5; break ; defult: j=-1; break ; if(j!=-1)/正确的字符if (chl!=cha) if (chl!=39) switch (chl) case 'E': m=0;break ; case &
22、#39;T': m=2;break ; case 'F': m=4;break ; default m=-1; break ; else switch (chl-1) case 'E': m=1;break ; case 'T': m=3;break ; default : m=-1; break ; if (m!=-1) if (chl!=cha) how=ll1mj; if (how=1) printf( "E->TE'n"); n=3;l=l+n-1; chl= 'T' chl-1=
23、39; chl-2='E'step=step+1;else if (how=2)printf( "E'->+TE'n");n=4;l=l+n-2;chl= '+'chl-1='T'chl-2=39;chl-3='E'step=step+1;else if (how=3)printf( "E'-> £ ?n");l=l-2;step=step+1;else if (how=4)printf( "T->FT'n");n=3;l=l+n-1;chl= 'F'chl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物业服务合作协议模板
- 小学五年级英语语法重点解析
- 会计基础工作规范化管理方案
- 知识产权合作框架协议
- 跨境数据流通监管趋势-洞察及研究
- 北京安全员考试题库试卷及答案解析
- 小学数学除法教学反思与改进措施
- 质量控制与智能制造系统集成-洞察及研究
- 虚拟私有网络在企业中的应用研究-洞察及研究
- 妇科分级护理规范与操作流程
- 辽宁省名校联盟2024-2025学年高三上学期10月联考数学试卷
- 《传播学概论(第四版)》全套教学课件
- 生物安全培训课件
- 大学语文智慧树知到期末考试答案章节答案2024年南昌大学
- 04SG518-3-门式刚架轻型房屋钢结构(有吊车)
- 第1章 数的整除全章复习与测试(教师版)
- 护理学导论第三章 护理相关理论与模式课件
- 病房管理知识汇总
- 师德师风考核表
- 快递客服知识讲座
- 噬血细胞综合征课件护理查房
评论
0/150
提交评论