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

  • 13
  • 0
  • 约1.98千字
  • 约 3页
  • 2021-03-22 发布于天津
  • 举报

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

数学与计算机学院编译原理实验报告 年级专业_学号—姓名— 成绩 实验题目 算符优先分析法分析器的设计 实验日期 _ 一、 实验目的: 设计一个算符优先分析器,理解优先分析方法的原理。 二、 实验要求: 设计一个算符优先分析器 三、 实验内容: 使用算符优先分析算法分析下面的文法: E t #E# E t E+T | T T t T*F | F F t Paf | P P t (E) | i 其中i可以看作是一个终结符,无需作词法分析。具体要求如下: 1、 如果输入符号串为正确句子,显示分析步骤,包括分析栈中的内容、优先关系、输入符 号串的变化情况; 2、 如果输入符号串不是正确句子,则指示出错位置。 四、 实验结果及主要代码: 1?主要代码 void operatorp() { char s[100]; char a,Q; int k,j,i,l; stri ng in put,temp; cin?in put; cout步骤\t栈\t优先关 系\t当前符号\t剩 余输 入 串 \t移进或归约endl; k=1;s[k]=#;i=1; do { a=i nput[0]; temp=; for(l=1;li nput.le ngth();l++) temp+=i nput[l]; in put=temp; if(svt(s[k])) j=k; else j=k-1; while (search(s[j],a)==) cout(i)\t; // 步骤 temp=; for(l=1;lk+1;l++) temp+=s[l]; couttemp\t; // 栈 cout\tsetw(10); couta\tsetw(15); coutinput\tsetw(15); i++; for(;;) { Q=s[j]; if(svt(s[j-1])) j=j-1; else j=j-2; if(search(s[j],Q)==) { cout 归约 endl;// 归约 break; } } temp=; for(l=j+1;lk+1;l++) temp+=s[l]; for(l=0;l6;l++) if(temp==key[l]) { k=j+1; s[k]=v[l]; break; } } cout(i)\t; // 步骤 temp=; for(l=1;lk+1;l++) temp+=s[l]; couttemp\t; // 栈 if(search(s[j],a)==) { // 优先关系// 当前符号// // 优先关系 // 当前符号 // 剩余输入串 // 优先关系 // 当前符号 // 剩余输入串 i++; k=k+1;s[k]=a; } //移进 else if(search(s[j],a)==Y) { //优先关系//当前符号 //优先关系 //当前符号 //剩余输入串 i++; } else { //优先关系 //优先关系 //当前符号 //剩余输入串 couta\tsetw(15); couti nput\tsetw(15); cout出错endl; exit(0); }//出错 }while(a!=#); } 2?实验结果 [■ 1 R\201询译原理、偏谭原洼卖盟\口perator_precedence_reductior\operator_precedence_red... I. = | 凹 请输入需要分析的串,以,护结尾,回车结束: i-i# 步骤1 请输入需要分析的串,以,护结尾,回车结束: i-i# 步骤 1 2 Press 优先关系 栈 tt tti an 1/ key to cont inue 当前符号 - 1 剩余输入串 itt 移曙约 ■ F:\2012\涓译原理\编谭原理实盟:\operator_precedence_reducti0r\operartor_precedence_recl... t J I请输入需要分析的串,以,护结尾,回车结束: i+i# 步骤 1 2 3 4 5 ⑹ m Press 优先关系 当前符号 i #i #F #F+ #F+i #F+F #F = ankey to continue 剩余输入串 +i## iff# itttt ## tt a II

文档评论(0)

1亿VIP精品文档

相关文档