编译原理实验三

编译原理实验三

ID:40883645

大小:66.33 KB

页数:4页

时间:2019-08-09

编译原理实验三_第1页
编译原理实验三_第2页
编译原理实验三_第3页
编译原理实验三_第4页
资源描述:

《编译原理实验三》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、实验三语法分析程序设计二姓名:胡俊波学号:6100411222专业班级:航天111班一、实验目的通过设计、编制、调试一个典型的语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,进一步掌握常用的语法分析中算符优先分析方法,并加深对语法制导翻译原理的理解。 二、实验内容设计一个文法的算符优先分析程序,判断特定表达式的正确性,并结合语法制导翻译原理,构造相应语义规则,将语法分析所识别的正确的表达式翻译计算出结果。三、实验要求1、给出文法如下:S->#E#E->T

2、E+T;T->F

3、T*F;F->i

4、(E);2、计算机中表示上述优先关系,优先关系的机内存放方式有两种1

5、)直接存放,2)为优先关系建立优先函数,这里由学生自己选择一种方式; 四、实验环境PC微机DOS操作系统或Windows操作系统TurboC程序集成环境或VisualC++程序集成环境 五、实验步骤1、分析文法中终结符号的优先关系;根据文法可以构造算符优先表如下:+*()i#+*()i#2、利用算符优先分析的算法编写分析程序;本实验程序还是在实验二的程序框架上稍作修改,只是将表达式判断算法做了修改:程序流程图程序清单://算符优先关系表privatestaticchar[][]table={{'>','<','<','>','<','>'},{'>','>','<','>','<'

6、,'>'},{'<','<','<','=','<',''},{'>','>','','>','','>'},{'>','>','','>','','>'},{'<','<','<','','<','='}};//判断表达式正确否privatestaticbooleanjudge(Stringexpr){char[]array=expr.toCharArray();intk=0;//用一个数组链表做分析栈ArrayListstack=newArrayList();//表达式以;结尾stack.add(';');//栈顶字符和输入串当前字符

7、CharactercurrentChar='';CharactercharInStack='';CharacterQ='';intindex=0,j;while(!currentChar.equals(';')){charInStack=stack.get(k);currentChar=array[index++];//把下一个输入符号读进来if(isVT(charInStack))j=k;elsej=k-1;while(judgeRelation(stack.get(j),currentChar)=='>'){do{Q=stack.get(j);if(isVT(stack.get

8、(j-1))){j-=1;}else{j-=2;}}while(judgeRelation(stack.get(j),Q)!='<');//判断是否为可规约串if(k-(j+1)>0){charch1=stack.get(j+1);charch2=stack.get(k);if(ch1!=ch2){if(ch1=='N'

9、

10、ch2=='N'

11、

12、judgeRelation(ch1,ch2)!='=')returnfalse;}}//把stack[j+1]...stack[k]规约for(inti=stack.size()-1;i>=j+1;i--){stack.remove(i);}

13、k=j+1;stack.add(k,'N');}if(judgeRelation(stack.get(j),currentChar)=='<'){k=k+1;stack.add(k,currentChar);}elseif(judgeRelation(stack.get(j),currentChar)=='='){if(judgeRelation(stack.get(j),';')=='='){break;//接受}else{k=k+1;stack.add(k,currentChar);}}else{//错误returnfalse;}}returntrue;}3、测试程序Scann

14、erscan=newScanner(in);Scannerscan1=newScanner(in1);while(scan.hasNext()){Stringexpr=scan.nextLine();Stringline=scan1.nextLine();try{out.write((line+""+judge(expr)).getBytes());out.write("".getBytes());}catch(IOExceptione){//TODOAuto-g

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

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

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