编译原理语法分析器实验报告(共6页).doc
《编译原理语法分析器实验报告(共6页).doc》由会员分享,可在线阅读,更多相关《编译原理语法分析器实验报告(共6页).doc(7页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上西安邮电大学编译原理实验报告学院名称:计算机学院学生姓名:高宏伟实验名称:语法分析器的设计与实现班 级:计科1405班学号:时间:2017年5月12日 一 实验目的1. 熟悉语法分析的过程2. 理解相关文法分析的步骤3. 熟悉First集和Follow集的生成二 实验要求对于给定的文法,试编写调试一个语法分析程序:要求和提示: 1) 可选择一种你感兴趣的语法分析方法(LL(1)、算符优先、递归下降、 SLR(1)等)作为编制语法分析程序的依据。 2) 对于所选定的分析方法,如有需要,应选择一种合适的数据结构,以构造 所给文法的机内表示。 3) 能进行分析过程模拟。如输
2、入一个句子,能输出与句子对应的语法树,能 对语法树生成过程进行模拟;能够输出分析过程每一步符号栈的变化情况。 设计一个由给定文法生成First集和Follow集并进行简化的算法动态模拟三 实验内容1. 文法: E-TE E-+TE|T-FT T-*FT|F-(E)|i: 2. 程序描述(LL(1)文法) 本程序是基于已构建好的某一个语法的预测分析表来对用户的输入字符串进行分析,判断输入的字符串是否属于该文法的句子。 基本实现思想:接收用户输入的字符串(字符串以“#”表示结束)后,对用做分析栈的一维数组和存放分析表的二维数组进行初始化。然后取出分析栈的栈顶字符,判断是否为终结符,若为终结符则判断
3、是否为“#”且与当前输入符号一样,若是则语法分析结束,输入的字符串为文法的一个句子,否则出错若不为“#”且与当前输入符号一样则将栈顶符号出栈,当前输入符号从输入字符串中除去,进入下一个字符的分析。若不为“#”且不与当前输入符号一样,则出错。3. 判断是否LL(1)文法 要判断是否为LL(1)文法,需要输入的文法G有如下要求: 具有相同左部的规则的SELECT集两两不相交,即: SELECT(A?) SELECT(A?)= ? 如果输入的文法都符合以上的要求,则该文法可以用LL(1)方法分析。 算法描述如下: 把第一条产生式的SELECT(0)集放到一个临时数组temp中 for(i=1;i=产
4、生式总数-1;i+) 求temp的长度length if i指向的当前产生式的左部等于上一条产生式的左部 then 把SELECT(i)并入到temp数组中 If temp的长度小于length加上SELECT (i)的长度 返回0 else 把temp清空 把SELECT (i)存放到temp中 结果返回1;4. 构建好的预测分析表5. 语法分析流程图四 实验结果正确运行结果:错误运行结果:五 设计技巧和心得体会这次实验编写了一个语法分析方法的程序,但是在LL(1)分析器的编写中我只达到了最低要求,就是自己手动输入的select集,first集,follow集然后通过程序将预测分析表构造出来
5、,然后自己编写总控程序根据分析表进行分析。通过本次试验,我能够设计一个简单的语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,进一步掌握常用的语法分析方法。还能选择最有代表性的语法分析方法,如LL(1) 语法分析程序、算符优先分析程序和LR分析分析程序。六 源代码package com.LL1;import java.util.ArrayDeque;import java.util.Deque;/* * LL1文法分析器,已经构建好预测分析表,采用Deque实现 * Created by HongWeiPC on 2017/5/12. */public class LL1
6、_Deque /预测分析表 private String analysisTable = new String TE, , , TE, , , , +TE, , , , , FT, , , FT, , , , , *FT, , , , i, , , (E), , ; /终结符 private String VT = new Stringi, +, *, (, ), #; /非终结符 private String VN = new StringE, E, T, T, F; /输入串strToken private StringBuilder strToken = new StringBuilde
7、r(i*i+i); /分析栈stack private Deque stack = new ArrayDeque(); /shuru1保存从输入串中读取的一个输入符号,当前符号 private String shuru1 = null; /X中保存stack栈顶符号 private String X = null; /flag标志预测分析是否成功 private boolean flag = true; /记录输入串中当前字符的位置 private int cur = 0; /记录步数 private int count = 0; public static void main(String
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 语法 分析器 实验 报告
限制150内