编译原理算符优先算法语法分析实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数学与计算机学院编译原理实验报告

年级专业学号姓名成绩

实验题目算符优先分析法分析器的设计实验日期

一、实验目的:

设计一个算符优先分析器,理解优先分析方法的原理。

二、实验要求:

设计一个算符优先分析器

三、实验内容:

使用算符优先分析算法分析下面的文法:

E’→#E#

E →E+T | T

T →T*F | F

F →P^F | P

P →(E) | i

其中i可以看作是一个终结符,无需作词法分析。具体要求如下:

1、如果输入符号串为正确句子,显示分析步骤,包括分析栈中的内容、优先关系、输入符号串的变化情况;

2、如果输入符号串不是正确句子,则指示出错位置。

四、实验结果及主要代码:

1.主要代码

void operatorp()

{

char s[100];

char a,Q;

int k,j,i,l;

string input,temp;

cin>>input;

cout<<"步骤"<<'\t'<<"栈"<<'\t'<<"优先关系"<<'\t'<<"当前符号"<<'\t'<<"剩余输入串"<<'\t'<<"移进或归约"<

k=1;s[k]='#';i=1;

do

{

a=input[0];

temp="";

for(l=1;l

temp+=input[l];

input=temp;

if(svt(s[k])) j=k;

else j=k-1;

while (search(s[j],a)=='>')

{

cout<<'('<

temp="";

for(l=1;l

temp+=s[l];

cout<

cout<<'>'<<'\t'<

cout<

cout<

for(;;)

{

Q=s[j];

if(svt(s[j-1])) j=j-1;

else j=j-2;

if(search(s[j],Q)=='<')

{

cout<<"归约"<

break;

}

}

temp="";

for(l=j+1;l

temp+=s[l];

for(l=0;l<6;l++)

if(temp==key[l])

{

k=j+1;

s[k]=v[l];

break;

}

}

cout<<'('<

temp="";

for(l=1;l

temp+=s[l];

cout<

if(search(s[j],a)=='<')

{

cout<<'<'<<'\t'<

cout<

cout<

i++;

k=k+1;s[k]=a;

} //移进

else if(search(s[j],a)=='Y')

{

cout<<'='<<'\t'<

cout<

cout<

cout<<"接受"<

i++;

}

else

{

cout<<'?'<<'\t'<

cout<

cout<

cout<<"出错"<

exit(0);

}//出错

}while(a!='#');

}

2.实验结果

相关文档
最新文档