编译原理预测分析程序的实现.doc
《编译原理预测分析程序的实现.doc》由会员分享,可在线阅读,更多相关《编译原理预测分析程序的实现.doc(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、实验二 预测分析表一、实验目的预测分析表的实现二、实验内容设有文法G:ETEE +TE|TFTT *FT| F(E)|i;根据文法编写预测表分析总控程序,分析句子是否为该文法的句型。当输入字符串: +i时,分析字符串是否为文法的句型三、实验步骤(详细的实验步骤)(1)文法ETEE +TE|TFTT *FT| F(E)|i;(2)FIRST集 FIRST(E)=(,i; FIRST(E)=+, ;FIRST(T)=(,i;FIRST(T)= *, ;FIRST(F)=(,i;(3)FALLOW集FOLLOW(E)=),#; FOLLOW(E)=),#;FOLLOW(T)=+,),#;FOLLOW
2、(T)=+,),#;FOLLOW(F)=*,+,),#;(4)预测分析表i+*()#EE-TEE-TEEE-+TEE-E-TT-FTT-FTTT-T-*FTT-T-FF-iF-(E)(5)分析过程步骤符号栈输入串应用句型0#Ei1*i2+i3#1 #ETi1*i2+i3#E-TE2 #ETFi1*i2+i3#E-TE3 #ETii1*i2+i3#F-i4 # ETi1*i2+i3#5 # ETF* *i2+i3#T-*FT6 # ETF *i2+i3#7 # ETi i2+i3#F-i8 # ET i2+i3#9 #E +i3#T-10 # ET+ +i3#E-+TE11 #ET +i3#12
3、 # ETF i3#T-FT13 # ETi i3#F-i14 # ET i3#15 # E #T-16# #E-(6)程序伪代码BEGIN 首先把#然后把文法开始符号推进STACK栈; 把第一个输入符号读进a; FLAG:=TRUE; WHILE FLAG DO BEGIN 把STACK栈顶符号托出去并放在X中; IF X属于VT THEN IF X=a THEN 把下一输入符号读进a; ELSE ERROR; ELSE IF X=# THEN IF X=a THEN FLAG:=FALSE ELSE ERROR; ELSE IF MA,a=X-X1X2Xk THEN 把Xk,X(k-1),
4、X1一一推进栈 ELSE ERROR; END OF WHILE STOP END(7)运行结果截图注:为了将E与E区分开,所以就有e来表示E,因为在处理中E会被当成两个字符来处理,所以就简化的表示了。对于T是同样的道理,用t来表示。四、总结此次的实验是对预测分析表程序的实现,先通过给定文法写出FIRST集FOLLOW集以及预测分析表,根据预测分析表,编写程序分析句子。此次的实验之中,存储非终结符使用的是栈来存储,存储输入串则用到的是数组来存储。对于分析表,用函数的形式来存储相应的产生式。本次的实验加强了对预测分析程序的知识应用,对于预测分析程序的运行机制有了更进一步的认识与掌握。最重要的是通
5、过本次的实验对书本的知识进一步的掌握了。五、源程序/ analyze.cpp : 定义控制台应用程序的入口点。/程序可以运行 VS2015里能完全运行。#include stdafx.h#include#include using namespace std;/typedef struct /char *base;/char *top;/int size;/SqStack; /定义栈char stack13;int base = 0;int top = 1;char VT5 = i,+,*,(,) ; /*用来存放5个终结符*/char inputString13; /*用来存储用户输入的字符
6、串,最长为20个字符*/char chanShengShi13; /*用来存放预测分析表MA,a中的一条产生式*/int firstCharIntex = 0; /*如果a匹配产生式,则每次firstCharIntex 自增 1 */ /*firstCharIntex用来存放用户输入串的第一个元素的下标*/int M(char A, char a); /* 若预测分析表MA,a中存在产生式, 则将该产生式赋给字符数组chanShengShi10,并返回 1。若MA,a中无定义产生式则返回 0 */int yuCeFenXi();/预测分析主函数void printStack(); /*打印栈内
7、元素 */void printinputString(); /*打印用户输入串 */void init() int i;for (i = 0; i12) cout 栈溢出! ; /*栈空间溢出*/return 0;else stacktop = ch; /*给栈顶空间赋值*/top+;return 1;int M(char A, char a) /*该函数模拟预测分析表中的二维数组 */if (A = E& a = i) strcpy_s(&chanShengShi0, 4, Te$);cout TE;return 1;if (A = E& a = () strcpy_s(&chanSheng
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 预测 分析 程序 实现
限制150内