编译原理实验报告词法分析器和LL1文法.doc
《编译原理实验报告词法分析器和LL1文法.doc》由会员分享,可在线阅读,更多相关《编译原理实验报告词法分析器和LL1文法.doc(25页珍藏版)》请在课桌文档上搜索。
1、-编译原理课程综合性实验报告开课实验室: 实验题目词法分析器的设计一、实验目的通过设计、编制、调试一个具体的词法分析程序,实现对高级程序设计语言源程序进展扫描, 并将其分解为各种单词的词法分析法;加深对课堂教学的理解;提高词法分析法的实践能力。二、实验要求任选一种高级程序设计语言编程完成词法分析器。词法分析器应以教材所述分词原理为依据,使用恰当的数据构造和法,构造清晰、高效。编制一个读单词过程,源程序保存在文本文件中也可键盘输入,读取该文件,识别出各个具有独立意义的单词,即关键字、标识符、常数、运算符、分界符五大类。依次输出各个单词的部单词种别及单词符号自身值,遇到错误时可显示“Eorror,
2、然后跳过错误局部继续显示。二、实验设备与环境1硬件:PC机Pentium100以上。2软件:Win10,VS2010。三、实验容1正规文法- int |for| while | do | return | break | continue-|+ | - | * | / |=| | | = |,| ; | ( | ) |- letter (letter | digit)*- digit digit*2算法思想算法的根本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其根本思想是根据扫描到单词符号的第一个字符的种类,拼接出相应的单词符号。2.1 主程序置初值调用扫描子程序将结果存入构造体
3、输入串完毕 否 是 输出单词二元组完毕图1词法分析主程序示意图其中初始包括关键字、运算符、界限符的置初值。 2.2 扫描子程序的算法思想:在词法分析中,先以只读式读取一个文件,自文件头开场扫描文本,滤去开头的空格、回车符、换行符等。读取的字符送入word。扫描第一个字符,看匹配的类型,并进展相应的类型分析,满足判断类型时,输出其种别码和值。忽略空格te*t是否扫描完毕 返回 是 是否字母拼字符串 数字 其他运算符、 符号界符等符号是否关键字.返回拼数 否4/5,单词自身值报错2,单词自身值 是1,单词自身值3,单词自身值图 2 扫描子程序四、实验步骤编写程序时,先定义几个全局变量,key事先存
4、放7个关键字,words用来存放识别出来的单词二元组,te*t用来存放从文件读取的容,word用于存放识别出来的单词,length存放字符个数,k存放识别出来的单词个数。首先,将文本容读取到te*t中,文本容最后一个字符是空白符,然后调用scan法,逐个扫描每个字符,如果word的第一个字符是字母,则进展拼字符串,再判断是关键字还是标识符;如果word的第一个字符是数字,则在word清空之前判断是否有识别出非数字字符,假设有,则出错,假设没有,则识别出来的字符串是常数;假设word第一个字符是运算符或界限符,则各自存到words中。最后扫描完毕后输出。五、实验结果及分析六、实验小结和思考通过这
5、次实验,我对词法分析器有了进一步的了解,而且对词法分析和语法分析在实践中的应用有了深入的掌握, 让我对高级语言的学习有了更深的认识 ,了解得更透彻。七、源程序清单*include*include*includeusingnamespace std;*define MA* 10000struct WordString string Word;/单词int category;/类别 ;char *key7 = int,for, while, do, return, break, continue;/关键字 WordString wordsMA*; /创立一个单词符号串 string te*t; /
6、读入的文本存入te*t中 string word; /分割出的单词用word表示int length; /字符个数int k; /总单词个数void scan() int i,j; k=0; word=;for(i=0;i=A)&(word0=a)&(word0=A)&(te*ti=a)&(te*ti=48)&(te*ti=57) word+=te*ti; else wordsk.Word=word;for(j=0;j|word0=48&word0=48&te*ti=A&te*ti=a&te*ti=z) word+=te*ti; wordsk.category=6;/表示出错,标识符以数字开头
7、 else wordsk.Word=word;if(wordsk.category!=6) wordsk.category=3;/表示常数 k+; word=; i-; elseif(te*ti!=10&te*ti!=32&te*ti!=9)word+=te*ti; int main() FILE *fp; /文件指针 fp=fopen(te*t.t*t,r); /翻开文件if(fp=NULL) printf(Cant open this file!n); e*it(0); int i=0;while(!feof(fp) /判断是否到文件结尾 te*t+=fgetc(fp); i+; leng
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 实验 报告 词法 分析器 LL1 文法

链接地址:https://www.desk33.com/p-19203.html