计算机编译原理---语法分析预测分析法 .doc
《计算机编译原理---语法分析预测分析法 .doc》由会员分享,可在线阅读,更多相关《计算机编译原理---语法分析预测分析法 .doc(45页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、编译原理实验报告-语法分析2预测分析法目录1.摘要:32、实验目的:33、任务概述34、实验依据的原理35、程序设计思想56、实验结果分析97、总结188、程序代码181.摘要:用CC+实现并运用预测分析法对Pascal的子集程序设计语言进行语法识别程序,并对语言进行判断,找出错误。 2、实验目的:通过预测分析法进行设计、编程、调试出一个语法分析程序,加深对预测分析法的语法分析原理的理解,掌握其设计方法。3、任务概述1)将源程序转换成内码流,然后用预测分析法进行分析。2)构造预测分析表,并利用分析表和一个栈来实现对Pascal的子集程序设计语言的分析程序。4、实验依据的原理4.1Pascal的
2、子集程序设计语言的文法Pascal的子集程序设计语言的文法如下:。PROGRAM标识符; CONST |标识符=无符号整数, |VAR |标识符:;,标识符 | |INTEGER | LONG;|PROCEDURE标识符;(标识符: )|;|标识符:=|()|IFTHENWHILEDO READ(标识符)WRITE(),|BEGINEND;|ODD+|-|e标识符|无符号整数|()+|-*|/ =|=4.2内码对照表1-1 终结符的内部码对照表内码单词内码单词内码单词内码单词1PROGRAM2CONST3VAR4INTEGER5LONG6PROCEDURE7IF8THEN9WHILE10DO1
3、1READ12WRITE13BEGIN14END15ODD16+17-18*19/20=21222325=26.27,28;29:30:=31(32)33无符号整数34标识符35#表1-2 非终结符和内码对照表内码非 终 结 符内码非 终 结 符内码非 终 结 符128程序129程序首部130分程序131常量说明部分132常量定义133常量定义后缀134变量说明部分135变量定义136变量定义后缀137类型138过程说明部分139过程首部140141语句142赋值或调用语句143后缀144条件语句145当型循环语句146读语句147标识符后缀148写语句149表达式后缀150复合语句151语句
4、后缀152条件153表达式154项后缀155项156因子后缀157因子158参数部分159加型运算符160乘型运算符161关系运算符5、程序设计思想5.1文法转化将上述文法转换成内码:128 129 130 26 0 129 1 34 28 0 130131 134 138 150 0131 2 132 133 28 0 1310 13234 20 33 013327 132 133 0 1330 1343 135 136 01340 13534 147 29 137 28 0 136135 136 01360 1374 0 1375 0138139 130 28 140 0 1380 139
5、 6 34 158 28 0140139 130 28 140 0 1400 141142 0141144 0 141145 0 141146 0141148 0 141150 0 141014234 143 0 14330 153 0 14331 153 32 01430 1447 152 8 141 0 1459 152 10 141 014611 31 34 147 32 0 14727 34 147 0 147014812 31 153 149 32 0 14927 153 149 0 149015013 141 151 14 0 15128 141 151 0 1510152153
6、161 153 0 15215 153 0 15316 155 154 015317 155 154 0 153155 154 0 154159 155 154 01540 155157 156 0 156160 157 156 01560 15734 0 157 33 015731 153 32 0 15831 34 29 137 32 0 158015916 0 15917 0 16018 016019 0 16120 0 16121 016122 0 16123 0 16124 016125 05.2求非终结符的First集的方法:1.直接收取:若Ua(其中a是终结符),把a收入到Fir
7、st(U)中;2.反复传送:若UP(其中P是非终结符),应把First(P)中的全部内容传送到First(U)中。5.3求非终结符的Follow集的方法(Follow集是从开始符号S开始推导,初始定义Follow(S)=#):1.直接收取:若MUa,把a直接收入到Follow(U)中;2.直接收取:若MUP(P是非终结符),把First(P)除去后直接收入到Follow(U)中;3.反复传送:若PU(U是非终结符),把Follow(P)中的全部内容传送到Follow(U)中。5.4求产生式的First集的方法: 若MU1U2U3Un1. 若非终结符U1的First集含,则First(U1)除去
8、后直接收入到该产生式的First集,再依次判断U2(方法类似U1);2. 若非终结符U1的First集不含,则First(U1) 直接收入到该产生式的First集;3. 若U1为终结符,则将U1直接收入到该产生式的First集。5.5预测分析表的构造:对于文法中的每一个产生式A -,执行以下2步:1.for aFIRST(),将A -填入MA,a;2.if(FIRST()) aFOLLOW(A),将A -填入MA,a。5.6预测分析法分析对于任何(X,a),总控程序每次都执行下述三种可能的动作之一: (1)若X = a =#,则宣布分析成功,停止分析过程。 (2)若X = a#,则把X从STA
9、CK栈顶弹出,让a指向下一个输入符号。 (3)若X是一个非终结符,则查看预测分析表M。若MX,a中存放着关于X的一个产生式,那么,首先把X弹出STACK栈顶,然后,把产生式的右部符号串按反序一一弹出STACK栈(若右部符号为,则不推什么东西进STACK栈)。若MX,a中存放着的数值表示出错,则表示该程序有错。5.7错误情况在预测分析表中引入同步符后,程序出错分一下三种情况: (1)若X为终结符,但Xa,表示X前缺少符号; (2)若X为非终结符,但MX,a=-1(-1表示不存在对应产生式),表示X多余; (3)若X为非终结符,但MX,a=-2(-2表示同步符),表示X前缺少符号。program
10、helloworld;begin write(1); a:=2end.5.8程序流程图是否计算每个产生式右部的FIRST集计算所有非终结符号的FOLLOW集根据FIRST集和FOLLOW集生成预测分析表读取文件中的程序根据预测分析表对程序进行分析词法分析是否正确语法分析正确提醒程序错误、错误的位置在哪里程序结束计算所有非终结符号的FIRST集语法分析是否正确程序入口语法分析失败是否6、实验结果分析6.1文件内容:6.2程序运行结果如下:6.2.1所有非终结符的First集6.2.2所有非终结符的Follow集6.2.3所有产生式的First集 6.2.4预测分析表6.2.5源程序显示6.2.6
11、词法分析结果(1)若词法分析无误,则显示如下图所示并进行语法分析:(2)若词法分析有误,则显示如下图所示,即指出错误之处,但不能进行语法分析。text内容:结果如下:6.2.7语法分析结果(1)若语法分析无误,则显示如下图所示:(2)若语法分析有误,则显示如下图所示,即指出错误之处:i)栈中终结符与输入串中终结符不相匹配时的情况:text内容:结果显示:ii)栈中非终结符与输入串中终结符所对应的预测分析表中的数值为同步符时的情况:text内容:结果显示:iii)栈中非终结符与输入串中终结符所对应的预测分析表中的数值为不存在时的情况:text内容:结果显示:7、总结(1)本次实验完成了语法分析器
12、-预测分析法的算法分析到实现的全部过程,结果满足设计要求,验证无误。通过本次实验让我了解了如何设计、编制并调试预测分析法的语法分析程序,在设计、实现、调试自己的语法分析器的同时,加深了我对语法分析器原理的理解;熟悉了预测分析法构造语法分析器的方法和相关原理,并能基本使用C语言直接编写语法分析器。(2)通过这次实验使我懂得了理论与实际相结合的重要性,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,才能更好地理解、消化、掌握所学知识,同时也可以提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到很多问题,可以说是困难重重,毕竟很多问题是无法预料和避免的,所以难免会遇到过各种各
13、样的问题,同时在设计的过程中发现了自己的不足之处,对课程所学的知识理解得不够深刻,掌握得不够牢固等等。(3)在本实验中,我锻炼了自己的上机操作能力及编程能力,并对理论知识有了进一步的了解。程序的难点是分析表的构造,解决实验中遇到的问题也花费了一部分的时间,增长了处理程序错误的能力。虽然这个程序还有许许多多的不足和欠缺,但它包含了我的想法和努力。总的来说,和成员一次完成这个语法分析器的设计很有意义。8、程序代码#include#include#include#include#includeusing namespace std;#define MAX_1 1000#define MAX_2 10
14、0000/产生式的左右部以及右部的长度typedef struct productionint left;int rightMAX_1;int length;PRO;/程序每个字符的对应内码以及所在行数typedef struct characterstring ch;int code;int row;CHAR;/词法分析时发现的错误typedef struct errorchar ch;int row;ERR;/集合结构typedef struct aggregateint strMAX_1;int len;AGG;PRO *p=new PROMAX_1;/产生式CHAR charaMAX_
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机编译原理-语法分析预测分析法 计算机 编译 原理 语法分析 预测 分析
限制150内