北方工业大学编译原理实验2报告语法分析

北方工业大学编译原理实验2报告语法分析

ID:39065659

大小:77.22 KB

页数:17页

时间:2019-06-24

北方工业大学编译原理实验2报告语法分析_第1页
北方工业大学编译原理实验2报告语法分析_第2页
北方工业大学编译原理实验2报告语法分析_第3页
北方工业大学编译原理实验2报告语法分析_第4页
北方工业大学编译原理实验2报告语法分析_第5页
资源描述:

《北方工业大学编译原理实验2报告语法分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、编译原理实验报告实验题目:语法分析器构造指导教师:杨健姓名:杨先宇班级:计13-4学号:15901020402实验成绩:实验题目实验二语法分析器构造实验目的和要求借助于词法分析程序提供的分析结果,编写一个算符优先语法分析程序,程序能进行语法结构分析和错误检查,并产生相应的归约信息。同时给出出错信息和错误类型,从而加深对语法分析的理解。说明提示:1.本实验的优先表可以手工先设计好。2.本实验要求中提出的“产出相应的归约信息”意指在语法分析的过程中,一旦产生归约,在程序上产生并最终输出归约产生式序号。3.出错类型的产生可预先

2、对应优先表中出错栏列表说明其出错类型,并分别编序,当分析中产生错误时以字符串输出相应表中错误信息。设计思想与框架功能描述:LL(1)分析法是一种不带回溯的非递归的自上而下的分析法.其基本思想是根据输入串的当前输入符号来唯一确定选用某条规则来进行推倒,当这个输入符号与推倒的第一个符号相同时再取输入串的下一个符号,继续确定下一个推倒应选的规则,如此下去,直到推倒出被分析的输入串为止.1.首先,手工制作一个算符优先表(也可以编程序实现)。2.将词法分析所得到的预处理文件作为该程序的输入文件,并根据相应的算法提取出算术表达式并转

3、换为输入串,将其保存在strings这个字符数组中,并把表达式中相应常量用字符‘i’来表示,以便规约(以#结束输入串)。3.其次,初始化符号栈。将输入串里的字符读进a里(a用于表示当前的输入字符),将栈顶元素与a(当前字符)相比较,如果栈顶元素的优先级比a的低或等于则进栈;如果栈顶元素的优先级比a的高则将栈顶指针下移,直到找到一个字符串的优先级比它上一个字符串的优先级低的字符串(该过程为寻找最左素短语),然后将这两个字符中间的符号串寻找匹配的产生式后进行规约,并将其弹出站定,将规约得到的非终结符入栈;栈顶元素的下一个元素

4、优先级低于或等于当前输入的字符串就移进,否则就出错。然后重复c过程,直到输入串结束(遇见#)。(输出相应的移近——规约过程)。4.重复b和c过程,直到该预处理文件结束(遇见#)。核心算法voidprocess(char*temp){intk=1,j,w,l,m,t=0,p,q,v,yu=0;stack[0]='';stack[k]='#';dangqianfuhao='';panduanshengyuzifuchuan(yu);step=0;shuchu(0,-1);//这是对#号的处理//-1代表<0代表=1代表>ch

5、arQ;inti=0;do{dangqianfuhao=temp[i];//取符号intflag=0;//对终结符号的善意假设for(w=0;w<8;w++)//查找运算符表,谁与stack[k]匹配{if(stack[k]==word[w])flag=1;}if(flag==1)j=k;//j指向终极符了elsej=k-1;//j指向stack中最后一个非终结符for(w=0;w<8;w++)//找出s[j]和当前字符在优先表里的位置{if(stack[j]==word[w])l=w;//l记录了当前字符的终结符类型i

6、f(dangqianfuhao==word[w])m=w;//终结符的处理}while(M[l][m]=='>'){do{Q=stack[j];intflag=0;//再次做出善意假设终结符for(w=0;w<8;w++){if(stack[j-1]==word[w])flag=1;}if(flag==1)j=j-1;elsej=j-2;for(w=0;w<8;w++)//找出s[j]和Q对应优先表里的位置,对决{if(stack[j]==word[w])p=w;//p记录员,代理人if(Q==word[w])q=w;/

7、/q记录员,代理人}}while(M[p][q]!='<');//当然所有前提是,可行的情况下,但是为了做出最初的判断,使用了do-whilestack[j+1]='N';//N的诞生,非终结符代替for(w=j+2;w<=k;w++)//符号栈出栈,向前走一步,找到另一个非终结符stack[w]='';//以绝后患,置''k=j+1;shuchu(1,1);//规约之break;}if(M[l][m]=='<')//剩下的事情就是根据M判断,规约之{k=k+1;stack[k]=dangqianfuhao;yu

8、++;panduanshengyuzifuchuan(yu);shuchu(0,-1);i++;}elseif(M[l][m]=='='){k=k+1;stack[k]=dangqianfuhao;yu++;panduanshengyuzifuchuan(yu);shuchu(0,0);i++;}else{if(M[

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。