(完整word版)编译原理预测分析法实验报告(C语言编写).doc 立即下载
2024-09-09
约2.9千字
约10页
0
78KB
举报 版权申诉
预览加载中,请您耐心等待几秒...

(完整word版)编译原理预测分析法实验报告(C语言编写).doc

(完整word版)编译原理预测分析法实验报告(C语言编写).doc

预览

免费试读已结束,剩余 5 页请下载文档后查看

5 金币

下载文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

(完整word版)编译原理预测分析法实验报告(C语言编写)
(完整word版)编译原理预测分析法实验报告(C语言编写)
(完整word版)编译原理预测分析法实验报告(C语言编写)
编译原理

实
验
报
告


实验名称:预测分析法
姓名:
专业班级:计科
学号:
指导老师:
日期:2011年6月1日


目的要求
构造文法的语法分析程序,要求采用预测分析法对输入的字符串进行语法分析。
加深对预测分析LL(1)分析法的理解和掌握。
实验内容
对文法G进行语法分析,文法G如下所示:
*0.	S→a*/
*1.S→^
*2.	S→(T)
*3.	T→SW*
*4.W→,SW
*5.	W→ε;
并对任给的一个输入串进行语法分析检查。程序要求能对输入串进行预测分析,能判别程序是否符合已知的语法规则,如果不符合(编译出错),则输出错误信息。
程序输入/输出示例:
输入:一个以#结束的符号串:例如:(a,a)#
输出:
步数分析栈输入串所用规则
(1)#S(a,a))#2
源程序:
//LL(1)预测分析控制程序
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
charstr[100];//存储待分析的句子
constcharT[]="a^(),#";//终结符,分析表的列符
constcharNT[]="STW";//非终结符,分析表的行符
/*指向产生式右部符号串*/	
constchar*p[]={	
/*0.	S→a*/	"a",
/*1.S→^	*/"^",
/*2.	S→(T)*/	"(T)",
/*3.	T→SW*/	"SW",
/*4.W→,SW*/	",SW",
/*5.	W→ε;*/	""
};
//设M[i][j]=x,通过p[M[i][j]]=p[x]获取右部符号串。
constintM[][6]={		
/*a^(),#*/
	/*S*/	{0,1,2,-1,-1,-1},
	/*T*/	{3,3,3,-1,-1,-1},
	/*W*/	{-1,-1,-1,5,4,-1}
};
voidinit()//输入待分析的句子
{
	printf("请输入待分析的句子(以$结束):\n");
	scanf("%s",str);
}
intlin(charc);//非终结符转换为行号
intcol(charc);//终结转换为列号
boolisNT(charc);//isNT判断是否是非终结符
boolisT(charc);//isT判断是否是终结符。

voidmain(void)
{	
	inti,j=0;
	intflag=1,flag2=0;
	charA;	//设置指示句子的当前字符
	charstack[20]=	{'#','S'};	//栈赋初值
	inttop=1;	//设置栈顶指针
	charX='';	//存储栈顶字符
	init();
	A=str[0];
	printf("\t步数\t分析栈\t输入串\t所用规则\n");	//在屏幕上输出列表标题
	while(1)
	{					
		printf("\n\t(%d)\t",++j);	//输出当前执行步数		
		for(i=0;i<=top;i++)//输出当前栈的内容(出栈前)
		{			
			printf("%c",stack[i]);			
		}	
		printf("\t");
		for(i=flag-1;str[i]!='$';i++)
		{
			printf("%c",str[i]);			
		}	
		if(flag2==1)
		{
			printf("\t%d",M[lin(X)][col(A)]);
			flag2=0;
		}
		//出栈
		X=stack[top--];		
		if(X=='#')//是结束符
		{								
			if(X==A)//是结束符
			{								
				printf("\tAcc\n");
			}
			elseprintf("\tERROR\n");			
				break;			
		}
		elseif(isT(X))//是终结符
		{				
				A=str[flag++];		
		}
		elseif(isNT(X))//是否是非终结符
		{				
			flag2=1;
				//逆序入栈
				for(i=strlen(p[M[lin(X)][col(A)]])-1;i>=0;i--)
				{
					stack[++top]=*(p[M[lin(X)][col(A)]]+i);
				}			
		}
		else
		{			
			pr
查看更多
单篇购买
VIP会员(1亿+VIP文档免费下)

扫码即表示接受《下载须知》

(完整word版)编译原理预测分析法实验报告(C语言编写)

文档大小:78KB

限时特价:扫码查看

• 请登录后再进行扫码购买
• 使用微信/支付宝扫码注册及付费下载,详阅 用户协议 隐私政策
• 如已在其他页面进行付款,请刷新当前页面重试
• 付费购买成功后,此文档可永久免费下载
全场最划算
12个月
199.0
¥360.0
限时特惠
3个月
69.9
¥90.0
新人专享
1个月
19.9
¥30.0
24个月
398.0
¥720.0
6个月会员
139.9
¥180.0

6亿VIP文档任选,共次下载特权。

已优惠

微信/支付宝扫码完成支付,可开具发票

VIP尽享专属权益

VIP文档免费下载

赠送VIP文档免费下载次数

阅读免打扰

去除文档详情页间广告

专属身份标识

尊贵的VIP专属身份标识

高级客服

一对一高级客服服务

多端互通

电脑端/手机端权益通用