语法分析实验报告Word下载.docx

上传人:b****3 文档编号:15146483 上传时间:2022-10-28 格式:DOCX 页数:7 大小:38.57KB
下载 相关 举报
语法分析实验报告Word下载.docx_第1页
第1页 / 共7页
语法分析实验报告Word下载.docx_第2页
第2页 / 共7页
语法分析实验报告Word下载.docx_第3页
第3页 / 共7页
语法分析实验报告Word下载.docx_第4页
第4页 / 共7页
语法分析实验报告Word下载.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

语法分析实验报告Word下载.docx

《语法分析实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《语法分析实验报告Word下载.docx(7页珍藏版)》请在冰豆网上搜索。

语法分析实验报告Word下载.docx

*'

('

)'

构成的以'

#'

结束的字符串进行分析)

五、源程序实现

/*LL

(1)分析法源程序,只能在VC++中运行*/

#include<

>

charA[20];

charB[20];

charv1[20]={'

};

/*终结符*/

charv2[20]={'

E'

G'

T'

S'

F'

/*非终结符*/

intj=0,b=0,top=0,l;

/*L为输入串长度*/

typedefstructtype

{

charorigin;

/*大写字符*/

chararray[5];

/*产生式右边字符*/

intlength;

/*字符个数*/

}type;

typee,t,g,g1,s,s1,f,f1;

/*结构体变量*/

typeC[10][10];

/*预测分析表*/

voidprint()/*输出分析栈*/

inta;

/*指针*/

for(a=0;

a<

=top+1;

a++)

printf("

%c"

A[a]);

\t\t"

);

}/*print*/

voidprint1()/*输出剩余串*/

intj;

for(j=0;

j<

b;

j++)/*输出对齐符*/

"

for(j=b;

=l;

j++)

B[j]);

\t\t\t"

}/*print1*/

voidmain()

intm,n,k=0,flag=0,finish=0;

charch,x;

typecha;

/*用来接受C[m][n]*/

/*把文法产生式赋值结构体*/

='

;

strcpy,"

TG"

=2;

FS"

+TG"

=3;

[0]='

^'

=1;

*FS"

(E)"

for(m=0;

m<

=4;

m++)/*初始化分析表*/

for(n=0;

n<

=5;

n++)

C[m][n].origin='

N'

/*全部赋为空*/

/*填充分析表*/

C[0][0]=e;

C[0][3]=e;

C[1][1]=g;

C[1][4]=g1;

C[1][5]=g1;

C[2][0]=t;

C[2][3]=t;

C[3][1]=s1;

C[3][2]=s;

C[3][4]=C[3][5]=s1;

C[4][0]=f1;

C[4][3]=f;

请输入要分析的字符串:

"

do/*读入分析串*/

{

scanf("

&

ch);

if((ch!

='

)&

&

(ch!

)&

))

输入串中有非法字符\n"

exit

(1);

}

B[j]=ch;

j++;

}while(ch!

l=j;

/*分析串长度*/

ch=B[0];

/*当前分析字符*/

A[top]='

A[++top]='

/*'

进栈*/

步骤\t\t分析栈\t\t剩余字符\t\t所用产生式\n"

do

x=A[top--];

/*x为当前栈顶字符*/

%d"

k++);

j++)/*判断是否为终结符*/

if(x==v1[j])

flag=1;

break;

if(flag==1)/*如果是终结符*/

if(x=='

finish=1;

/*结束标记*/

acc!

\n"

/*接受*/

getchar();

}/*if*/

if(x==ch)

print();

print1();

%c匹配\n"

ch);

ch=B[++b];

/*下一个输入字符*/

flag=0;

/*恢复标记*/

else/*出错处理*/

%c出错\n"

/*输出出错终结符*/

}/*else*/

else/*非终结符处理*/

if(x==v2[j])

m=j;

/*行号*/

if(ch==v1[j])

n=j;

/*列号*/

cha=C[m][n];

if!

)/*判断是否为空*/

%c->

;

/*输出产生式*/

[j]);

for(j=;

j>

=0;

j--)/*产生式逆序入栈*/

A[++top]=[j];

if(A[top]=='

)/*为空则不进栈*/

top--;

x);

/*输出出错非终结符*/

}while(finish==0);

}/*main*/

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 其它语言学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1