编译原理实验三.docx_第1页
编译原理实验三.docx_第2页
编译原理实验三.docx_第3页
编译原理实验三.docx_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验三 语法分析程序设计二姓名: 胡俊波 学号: 6100411222 专业班级: 航天111班 一、实验目的通过设计、编制、调试一个典型的语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,进一步掌握常用的语法分析中算符优先分析方法,并加深对语法制导翻译原理的理解。二、实验内容设计一个文法的算符优先分析程序,判断特定表达式的正确性,并结合语法制导翻译原理,构造相应语义规则,将语法分析所识别的正确的表达式翻译计算出结果。三、实验要求1、给出文法如下: S-#E# E-T|E+T; T-F|T*F; F-i|(E);2、计算机中表示上述优先关系,优先关系的机内存放方式有两种1)直接存放,2)为优先关系建立优先函数,这里由学生自己选择一种方式;四、实验环境PC微机DOS操作系统或 Windows 操作系统Turbo C 程序集成环境或 Visual C+ 程序集成环境五、实验步骤1、分析文法中终结符号的优先关系;根据文法可以构造算符优先表如下:+*()i#+*( )i#2、利用算符优先分析的算法编写分析程序;本实验程序还是在实验二的程序框架上稍作修改,只是将表达式判断算法做了修改:程序流程图程序清单:/ 算符优先关系表private static char table=, , , , , , , , , , =, , , , , , , , , , , , , , , , , , = ;/ 判断表达式正确否private static boolean judge(String expr) char array = expr.toCharArray();int k = 0;/ 用一个数组链表做分析栈ArrayList stack = new ArrayList();/ 表达式以;结尾stack.add(;);/ 栈顶字符和输入串当前字符Character currentChar = ;Character charInStack = ;Character Q = ;int index = 0, j;while (!currentChar.equals(;) charInStack = stack.get(k);currentChar = arrayindex+;/ 把下一个输入符号读进来if (isVT(charInStack)j = k;elsej = k - 1;while (judgeRelation(stack.get(j), currentChar) = ) do Q = stack.get(j);if (isVT(stack.get(j - 1) j -= 1; else j -= 2; while (judgeRelation(stack.get(j), Q) != 0) char ch1 = stack.get(j + 1);char ch2 = stack.get(k);if (ch1 != ch2) if(ch1 = N| ch2=N|judgeRelation(ch1,ch2) != =)return false;/ 把stackj+1.stackk规约for (int i = stack.size() - 1; i = j + 1; i-) stack.remove(i);k = j + 1;stack.add(k, N);if (judgeRelation(stack.get(j), currentChar) = ) k = k + 1;stack.add(k, currentChar); else if (judgeRelation(stack.get(j), currentChar) = =) if (judgeRelation(stack.get(j), ;) = =) break;/ 接受 else k = k + 1;stack.add(k, currentChar); else / 错误return false;return true;3、测试程序Scanner scan = new Scanner(in);Scanner scan1 = new Scanner(in1);while (scan.hasNext() String expr = scan.nextLine();String line = scan1.nextLine();try out.write(line + + judge(expr).getBytes();out.write(n.getBytes(); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();scan.close();六、测试数据 输入数据: 输出数据:七、实验总结本实验用另外一种方式(自下而上分析法)对表达式做语法分析,都能达到同样的结果,实验二中构造了预测分析表在适当时候拿文法产生式的右部替换

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论