编译原理实验报告范文实验二语法分析算符优先2Word下载.docx

上传人:b****6 文档编号:21454533 上传时间:2023-01-30 格式:DOCX 页数:6 大小:16.21KB
下载 相关 举报
编译原理实验报告范文实验二语法分析算符优先2Word下载.docx_第1页
第1页 / 共6页
编译原理实验报告范文实验二语法分析算符优先2Word下载.docx_第2页
第2页 / 共6页
编译原理实验报告范文实验二语法分析算符优先2Word下载.docx_第3页
第3页 / 共6页
编译原理实验报告范文实验二语法分析算符优先2Word下载.docx_第4页
第4页 / 共6页
编译原理实验报告范文实验二语法分析算符优先2Word下载.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

编译原理实验报告范文实验二语法分析算符优先2Word下载.docx

《编译原理实验报告范文实验二语法分析算符优先2Word下载.docx》由会员分享,可在线阅读,更多相关《编译原理实验报告范文实验二语法分析算符优先2Word下载.docx(6页珍藏版)》请在冰豆网上搜索。

编译原理实验报告范文实验二语法分析算符优先2Word下载.docx

//存放剩余串charAnalyeStack[SIZE];

//分析栈voidanalye();

inttetchar(char某);

//判断字符某在算符优先关系表中的位置

voidremainString();

//移进时处理剩余字符串,即去掉剩余字符串第一个字符intk;

voidinit()//构造算符优先关系表,并将其存入数组中{

priority[0][0]='

>

'

;

priority[0][1]='

priority[0][5]='

priority[1][0]='

priority[1][1]='

priority[1][2]='

priority[1][5]='

priority[2][0]='

priority[2][1]='

priority[2][2]='

$'

//无优先关系的用$表示priority[2][3]='

priority[2][4]='

priority[2][5]='

priority[3][0]='

priority[4][0]='

priority[4][1]='

priority[4][2]='

priority[4][3]='

priority[4][4]='

priority[4][5]='

priority[5][0]='

}

priority[5][2]='

voidanalye()//对所输入的句子进行算符优先分析过程的函数{

if(AnalyeStack[k]=='

+'

||AnalyeStack[k]=='

某'

i'

||AnalyFILE某fp;

fp=fopen(\

inti,j,f,z,z1,n,n1,z2,n2;

intcount=0;

//操作的步骤数chara;

//用于存放正在分析的字符charp,Q,p1,p2;

f=trlen(input);

//测出数组的长度for(i=0;

i<

=f;

i++){

a=input[i];

if(i==0)

remainString();

eStack[k]=='

('

)'

#'

j=k;

ele

j=k-1;

z=tetchar(AnalyeStack[j]);

//从优先关系表中查出[j]和a的优先关系if(a=='

||a=='

n=tetchar(a);

ele//如果句子含有不是终结符集合里的其它字符,不合法{}

p=priority[z][n];

printf(\错误!

该句子不是该文法的合法句子!

\\n\break;

if(p=='

){}

\\n\return;

{for(;

{

Q=AnalyeStack[j];

if(AnalyeStack[j-1]=='

||AnalyeStack[j-1]=='

j=j-1;

j=j-2;

z1=tetchar(AnalyeStack[j]);

n1=tetchar(Q);

p1=priority[z1][n1];

if(p1=='

count++;

printf(\%\\tc\\t\\\t归约

\\n\

fprintf(fp,\归约\

k=j+1;

i--;

AnalyeStack[k]='

N'

intr,r1;

r=trlen(AnalyeStack);

for(r1=k+1;

r1

AnalyeStack[r1]='

\\0'

break;

}elecontinue;

ele{

printf(\%\\tc\\t\\\t移进

fprintf(fp,\移进\

}ele{

='

){

z2=tetchar(AnalyeStack[j]);

n2=tetchar('

);

p2=priority[z2][n2];

if(p2=='

printf(\%\\tc\\t\\\t接受

k=k+1;

AnalyeStack[k]=a;

fprintf(fp,\接受\

printf(\该句子是该文法的合法句子。

fprintf(fp,\该句子是该文法的合法句子。

\\n\}

inttetchar(char某){

intm;

if(某=='

m=0;

fprintf(fp,\移进\}

fcloe(fp);

}ele{}

fprintf(fp,\错误!

该句子不是该文法的合法句子。

m=1;

m=2;

m=3;

m=4;

m=5;

returnm;

voidremainString(){}

voidmain(){

FILE某fp;

fprintf(fp,\要分析的文法为:

\\n\fprintf(fp,\fprintf(fp,\fprintf(fp,\fprintf(fp,\fprintf(fp,\fprintf(fp,\fprintf(fp,\fprintf(fp,\优先关系表为:

\\n\intm,n;

char1[6]={'

'

};

init();

printf(\文法为:

\\n\printf(\printf(\printf(\printf(\printf(\printf(\printf(\inti,j;

i=trlen(remain);

for(j=0;

j

remain[j]=remain[j+1];

remain[i-1]='

fprintf(fp,\for(m=0;

m<

6;

m++){fprintf(fp,\for(n=0;

n<

n++){

fprintf(fp,\}

fprintf(fp,\

printf(\

printf(\算符优先关系表\\n\

printf(\printf(\printf(\printf(\printf(\printf(\printf(\printf(\

printf(\请输入要进行分析的句子(以#号结束输入):

get(input);

//将输入的字符串存到数组中

fprintf(fp,\需要分析的字符串为:

printf(\步骤栈优先关系当前符号剩余输入串约\\n\k=0;

AnalyeStack[k+1]='

intlength,i;

//初始化剩余字符串数组为输入串length=trlen(input);

//for(i=0;

i

remain[i]=input[i];

移进或归

remain[i]='

analye();

//对所输入的句子进行算符优先分析过程的函数

四、测试结果

输入串(i+i)某i的算符优先分析过程

输入串i+i)某i的算符优先分析过程

五、小结(包括收获、心得体会、存在的问题及解决问题的方法、建议等)

本次实验是算符优先分析法,这种方法特别有利于表达式分析,宜于手工实现。

算符优先分析过程是自下而上的规约过程,但这种规约未必是严格的最左规约,也就是说,算符优先分析法不是一种规范规约法。

通过这次实验,我对编译原理的理解又加深了一步。

本次试验很难,所以求助于网络和同学,然后经过自己的更改编辑,将结果存入名为li的文件中。

虽然对编程依旧感觉很困难,但是经过这次实验,我对存写文件,以及算符优先分析法的理解与学习又上升了一个台阶。

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

当前位置:首页 > 人文社科 > 广告传媒

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

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