编译原理报告(3)

编译原理报告(3)

ID:30339139

大小:508.72 KB

页数:20页

时间:2018-12-29

编译原理报告(3)_第1页
编译原理报告(3)_第2页
编译原理报告(3)_第3页
编译原理报告(3)_第4页
编译原理报告(3)_第5页
资源描述:

《编译原理报告(3)》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、课程实验报告课程名称:《编译原理》专业:信息安全院系:计算机科学与技术班级:学号:姓名:指导老师:目录实验一词法分析11.1实验目的11.2实验要求11.3词法分析程序的算法思想21.4词法分析程序的具体设计41.5词法实验结果及结果分析7实验二语法分析82.1实验目的82.2实验要求82.3语法分析程序的算法思想82.4语法分析程序的具体设计112.5语法分析程序的结果和结果分析14总结与感悟16实验一词法分析1.1实验目的设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。1.2实验要求1.2.1

2、、待分析的简单的词法(1)关键字:beginifthenwhiledoend所有的关键字都是小写。(2)运算符和界符::=+-*/<<=<>>>==;()#(3)其他单词是标识符(ID)和整型常数(SUM),通过以下正规式定义:ID=letter(letter

3、digit)*NUM=digitdigit*(4)空格有空白、制表符和换行符组成。空格一般用来分隔ID、SUM、运算符、界符和关键字,词法分析阶段通常被忽略。1.2.2、各种单词符号对应的种别码如表1所示:表1各种单词符号对应的种别码单词符号种别码单词

4、符号种别码begin1:17If2:=18Then3<20wile4<>21do5<=22end6>23lettet(letter

5、digit)*10>=24dightdight*11=25+13;26—14(27*15)28/16#01.2.3、词法分析程序的功能输入:所给文法的源程序字符串。16输出:二元组(syn,token或sum)构成的序列。其中:syn为单词种别码;token为存放的单词自身字符串;sum为整型常数。例如:对源程序beginx:=9:ifx>9thenx:=2*x+1/3;end#

6、的源文件,经过词法分析后输出如下序列:(1,begin)(10,x)(18,:=)(11,9)(26,;)(2,if)……1.1词法分析程序的算法思想算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。1.3.1主程序示意图:主程序示意图如图1.1所示。其中初始包括以下两个方面:开始置初值调用扫描子程序输出单词二元组输入串结束?否结束是图1.1词法分析主程序示意图⑴关键字表的初值。16关键字作为特殊标识符处理,把它们预先安排

7、在一张表格中(称为关键字表),当扫描程序识别出标识符时,查关键字表。如能查到匹配的单词,则该单词为关键字,否则为一般标识符。关键字表为一个字符串数组,其描述如下:Char*rwtab[6]={“begin”,“if”,“then”,“while”,“do”,“end”,};(2)程序中需要用到的主要变量为syn,token和sum。首先设置3个变量:①token用来存放构成单词符号的字符串;②sum用来整型单词;③syn用来存放单词符号的种别码。扫描子程序scaner主要部分流程如图1.2所示。开始变量初始化

8、忽略空格是否文件结束?否返回是拼数拼字符串字母Syn=11关键字?Syn=10否是Syn为对应关键字的种别码对不同符给出相应的syn值报错其他符号运算符界符等符号返回数字图1.2词法分析程序流程161.4词法分析程序的具体设计1.4.1数据结构单词二元组的结构typedefstruct{inttypenum;//用于存储该字符串的种别码;char*word;//用于存储字符串;}在本次实验中,每一个特定的字符串,相应的输出为其单词种别码和该字符串,所以我按书中的要求设计一个特定的结构保存这两个值,便于程序的编

9、写。源程序字符缓冲区:input[255]单词缓冲区:token[255]源程序字符指针:p_input单词缓冲区指针:p_token关键字数组:*rwtab[]={"begin","if","then","while","do","end",_KEY_WORD_END}1.4.2scaner函数的设计1)对数字串和标识符的扫描:设计思想:首先判断第一个输入的字符是否是数字或者是字母,读入下一个字符,判断是否是数字或是字母,如果是连接,并接着读下一个字符,否则回退一个字符,得到的数字串或者标识符,如果是标识符

10、,还需要再进行一次判断,该标识符是否为关节字,最终返回相应的WORD结构。具体的代码实现如下所示:if(letter()){while(letter()

11、

12、digit()){concat();m_getch();}retract();myword->typenum=reserve();myword->word=token;returnmyword;16}elseif(digit()){while(d

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。