资源描述:
《编译原理报告(5)》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、编译原理实验报告课程实验报告课程名称:编译原理:词法和语法分析专业班级:信息安全1302班学号:姓名:指导教师:报告日期:2013年11月4号计算机科学与技术学院33/33编译原理实验报告1、实验目的设计,编制并调试一个词法分析程序,加深对词法分析原理的理解2、实验要求2.1待分析的简单语言的词法(1)关键字:beginifthenwhiledoend所有的关键字都是小写。(2)运算符和界符::=+-*/<<=<>>>==;()#(3)其他单词是标识符(ID)和整型常数(NUM),通过以下正规式定义:
2、ID=letter(letter
3、digit)*NUM=digitdigit*(4)空格由空白、制表符和换行符组成。空格一般用来分隔ID、NUM、运算符、界符和关键字,词法分析阶段通常被忽略。2.2各种单词符号对应的种别码单词符号种别码单词符号种别码begin1:17if2:=18then3<20while4<>21do5<=22end6>23letter(letter
4、digit)*10>=24digitdigit*11=25+13;26-14(27*15)28/16#033/33编译原理实验报告2
5、.3词法分析程序的功能输入:所给文法的源程序字符串。输出:二元组(syn,token或sum)构成的序列。其中:syn为单词种别码;token为存放的单词自身字符串;sum为整型常数例如:对源程序beginx:=9;ifx>0:thenx:=2*x+1/3;end#的源文件,经词法分析后输出如下序列:(1,begin)(10,’x’)(18,:=)(11,9)(26,;)(2,if)……3、词法分析程序的算法思算法的基本任务是字符串表示的源程序中识别处具有独立意义的单词符号,其基本思想是根据扫描到单词
6、符号的第一个字种类,拼出相应的单词符号。3.1主程序示意图主程序示意图如图1所示,其中初值包括如下两个方面。33/33编译原理实验报告(1)关键字表的初值关键字作为特殊标识符处理,把它们预先安排在一张表格中(称为关键字表),当扫描程序识别出标识符时,查关键字表。如能查到匹配的单词,则该单词为关键字,否则为一般标识符。关键字表为一个字符串数组,其描述如下:Char*rwtab[6]={“begin”,”if”,”then”,”while”,”do”,”end”};(2)程序中需要用到的主要变量为syn,
7、token,和sum。3.2扫描子程序的算法思想首先设置3个变量:1.token用来存放构成单词符号的字符串;2.sum用来存放整型单词;3.syn用来存放单词符号的种别码。扫描子程序的主要流程图如图所示:33/33编译原理实验报告4、实验结果1.输入beginx:=9;ifx>0thenx:=2*x+1/3;end#结果如下2.输入begina=9end#结果如下5、实验感想及总结本次实验主要是针对词法进行分析,让我对于词法分析的理论基础有了更深刻的认知。词法分析程序的功能是从左到右扫描源程序字符串
8、,根据语言的词法规则识别出各类单词符号,并以二元组(单词种别,单词自身值)的形式输出。在课程上主要是理解了词法分析的作用以及其工作的原理,对于其具体的实现还不是很清楚,在本次实验中自己对于词法程序的编写是我将理论与实际相结合,对于具体的输入输出都有了很深刻的概念。但是在实验中也存在一些不足,比如,这只是针对其中一组关键字来实现的,如果换一组关键字,则需要重新编写程序。然而,LEX词法生成器能够很方便的实现,对此可以进行改进,“实践是检验真理的唯一标准”,对此我们应该谨记,从而继续对于实验中的不足进行改
9、进。33/33编译原理实验报告6、源代码#include#include#include#defineKEY_WORD_END"waitingforyourexpanding"/*定义关键字结束标识符*/typedefstruct/*单词二元组的结构*/{intsyn;char*word;}WORD;charinput[255];/*输入缓冲区*/chartoken[255]="";/*单词缓冲区*/intp_input;/*输入缓冲区指针*/
10、intp_token;/*单词缓冲区指针*/charch;/*当前读入字符*/constchar*Keyword[]={"begin","if","then","while","do","end",KEY_WORD_END};/*可扩充关键字数组*/charm_getch();voidgetbc();voidconcat();intletter();intdigit();intreserve();voidretract();charm_getch()/*