编译原理报告(九)

上传人:奇异 文档编号:250336520 上传时间:2022-02-07 格式:DOCX 页数:27 大小:230.24KB
返回 下载 相关 举报
编译原理报告(九)_第1页
第1页 / 共27页
编译原理报告(九)_第2页
第2页 / 共27页
编译原理报告(九)_第3页
第3页 / 共27页
编译原理报告(九)_第4页
第4页 / 共27页
编译原理报告(九)_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《编译原理报告(九)》由会员分享,可在线阅读,更多相关《编译原理报告(九)(27页珍藏版)》请在金锄头文库上搜索。

1、孝中科技火学课程实验报告课程名称:编译原理专业班级:信息安全1302班学 号:姓 名:指导老师:报告日期:2015年11月11日计算机科学与技术学院目录实验一词法分析11 .实验目的12 .实验要求13 .算法思想24 .具体实现45 .结果分析56 .实验总结6实验二语法分析71 .实验目的72 .实验要求73 .算法思想84 .具体实现105 .结果分析126 .实验总结12附录源程序137 法分析138 法分析18实验一词法分析1 .实验目的设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。2 .实验要求2.1 待分析的简单的词法(1)关键字:begin、if、then、whi

2、le、do、end 所有的关键字都是小写。(2)运算符和界符:= + -*/= = = ;()#(3)其他单词是标识符(ID)和整型常数(SUM),通过以下正规式定义:ID = letter (letter | digit)*NUM = digit digit*(4)空格有空白、制表符和换行符组成。空格一般用来分隔ID、SUM、运算符、界符和关键字,词法分析阶段通常被忽略。2.2 各单词符号的种别码各种单词符号所对应的种别码如表1所示。2.3 词法分析程序的功能:输入:所给文法的源程序字符串。输出:二元组(syn, token或sum)构成的序列。其中:syn为单词种别码;token为存放的单

3、词自身字符串;sum为整型常数。例如,对源程序 begin x:=9: if x9 then x:=2*x+1/3; end # 的源文件,经过词法分析后输 出如下序列:(1, begin) (10, x) (18,:=) (11, 9) (26,;) (2, if)表1各种单词符号对应的种别码单词符号种别码单词符号种别码begin1:17If2:=18Then320wile421do523letter (letter | digit) *10=24dight dight*11=25+1326一14(27*15)28/16#03 .算法思想算法的基本任务是从字符串表示的源程序中识别出具有独立意

4、义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。3.1 主程序框图主程序框图如图1-3-1所示。其中初始包括以下两个方面:(1)关键字表的初值。关键字作为特殊标识符处理,把它们预先安排在一张表格中(称为关键字表),当扫描程序识别出标识符时,查关键字表。如能查到匹配的单词,则该单词为关键字,否则为一般标识符。关键字表为一个字符串数组,其描述如下:Char *rwtab6 = begin , if ,then , while , do ,end” ,;(2)程序中需要用到的主要变量为syn, token和sum。3.2 扫描子程序的算法思想首先设置3个变量:to

5、ken用来存放构成单词符号的字符串;sum用来整型单词;syn用来存放单词符号的种别码。扫描子程序主要部分流程如图1-3-2所示。置初值图1-3-1词法分析主程序框图图1-3-2词法分析程序扫描子程序框图34.具体实现char *rwtab6 = begin, if, then, while, do, end;/ 关键字表/*自选函数*/char m_getch()/从输入源读一个字符到 CH中ch = progp+;return ch;void getbc() 去掉空白字符while (ch = | ch= 10)ch = progp+;void concat() / 拼接单词tokenm+

6、 = ch;tokenm = 0;int letter()/判断是否是字母if(ch=a&ch=A&ch= 0 & ch = 9) return 1;else return 0;int reserve()检索关键字表格int i;for(i=0; i9 then x:=2*x+1/3; end #后经词法分析输出如下序列:(1, begin) (10, x) (18,:=) (11, 9) (26,;)(2, if)如图1-5-1所示:Please input strins (end of t):in y:=9: ii then :+ I/3: nd itbeg in).x),二二) .8)

7、,J if),),9) then) .x)1:),2) .未),I).3).Jend)图1-5-1词法分析实验结果6.实验总结词法分析的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。 通过本试验的完成,更加加深了对词法分析原理的理解。7实验二语法分析1 .实验目的编制一个递归下降分析程序,实现对词法分析程序所提供的单词序列的语法检查和结构 分析。2 .实验要求利用c语言编制递归下降分析程序,并对简单语言进行语法分析。2.1 待分析的简单语言的语法用扩充的BNF表不如下:(1) 程序: 巾69所语句串end(2

8、) 语句串:=语句; 语句(3) 语句 :=赋值语句(4) 赋值语句:=ID :=表达式(5) 表达式:=项+ 项 |-项(6) 项 :=因子*因子 | /因子(7) 因子:=ID | NUM |(表达式)2.2 实验要求说明输入单词串,以“#结束,如果是文法正确的句子,则输出成功信息,打印succesS,否则输出“ error”。例如:输入 begin a:=9; x:=2*3; b:=a+x end #输出 success!输入 x:=a+b*c end #输出 error3 .算法思想(1)主程序示意图如图 2-3-1所示。图2-3-1语法分析主程序框图(2)递归下降分析程序示意图如图2

9、-3-2所示。(3)语句串分析过程示意图如图2-3-3所示。图2-3-2递归下降分析程序示意图8(4) statement语句分析程序流程如图2-3-4、2-3-5、2-3-6、2-3-7所示。图2-3-7 factor函数示意图9图2-3-4 statement函数示意图 图2-3-5 expression函数示意图4.具体实现void factor()if(syn=10 | syn=11) scaner();else if(syn = 27)scaner();/读下一个单词符号expression。;调用函数 statement。if(syn = 28) scaner();/ 读下一个单词

10、符号elseprintf(The error is on ).n);kk = 1;elseprintf(The expression is error!n);kk = 1; return;void term()factor。;调用函数 factor()while(syn=15 | syn=16) scaner();/读下一个单词符号factor。;调用函数 factor() return;void expression()term();调用函数 term()while(syn=13 | syn=14)scaner();/读下一个单词符号term();调用函数 term() return;voi

11、d statement()if(syn=10)scaner();/读下一个单词符号if(syn=18)scaner();/读下一个单词符号10expression。;调用函数statement。25elseprintf(the symbol := is error!n);kk=1;elseprintf(The sentence is error!n);kk=1; return;void yucu()statement。;/ 调用函数 statement。while(syn = 26)scaner();/读下一个单词符号if(syn != 6)statement。;调用函数 statement。 re

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号