编译原理算符优先算法语法分析实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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'<