没有合适的资源?快使用搜索试试~ 我知道了~
编译原理LL(1)语法分析实验报告
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 3 下载量 94 浏览量
2022-05-10
11:18:56
上传
评论 1
收藏 535KB DOC 举报
温馨提示
试读
11页
编译原理LL(1)语法分析实验报告
资源详情
资源评论
资源推荐
学号 专业 软件工程 姓名
实验日期 2013 教师签字 成绩
实 验 报 告
【实验名称】 LL(1)语法分析
【实验目的】
通过完成预测分析法的语法分析程序,了解预测分析法和递归子程序法的区别和联系。
使了解语法分析的功能,掌握语法分析程序设计的原理和构造方法,训练掌握开发应用程
序的基本方法。
【实验内容】
根据某一文法编制调试 LL ( 1 )分析程序,以便对任意输入的符号串进行分析。
构造预测分析表,并利用分析表和一个栈来实现对上述程序设计语言的分析程序。
分析法的功能是利用 LL(1)控制程序根据显示栈栈顶内容、向前看符号以及
LL(1)分析表,对输入符号串自上而下的分析过程。
【设计思想】
(1)、 LL(1)文法的定义
LL(1)分析法属于确定的自顶向下分析方法。LL(1)的含义是:第一个 L 表明自顶向下
分析是从左向右扫描输入串,第 2 个 L 表明分析过程中将使用最左推导,1 表明只需向右
看一个符号便可决定如何推导,即选择哪个产生式(规则)进行推导。
LL(1)文法的判别需要依次计算 FIRST 集、FOLLOW 集和 SELLECT 集,然后判断是否
为 LL(1)文法,最后再进行句子分析。
需要预测分析器对所给句型进行识别。即在 LL(1)分析法中,每当在符号栈的栈顶出
现非终极符时,要预测用哪个产生式的右部去替换该非终极符;当出现终结符时,判断其
与剩余输入串的第一个字符是否匹配,如果匹配,则继续分析,否则报错。LL(1)分析方法
要求文法满足如下条件:对于任一非终极符 A 的两个不同产生式 A,A,都要满足下
面条件:SELECT(A)∩SELECT(A)=
(2)、预测分析表构造
LL(1)分析表的作用是对当前非终极符和输入符号确定应该选择用哪个产生式进行推导。
它的行对应文法的非终极符,列对应终极符,表中的值有两种:一是产生式的右部的字符
串,一是 null。若用 M 表示 LL(1)分析表,则 M 可表示如下:
M: VN×VTP∪{Error}
M(A, t) = Aα,当 tselect(Aα) ,否则
M(A, t) = Error
其中 P 表示所有产生式的集合。
(3)、语法分析程序构造
LL(1)分析中 X 为符号栈栈顶元素,a 为输入流当前字符,E 为给定测试数据的开始符
号,#为句子括号即输入串的括号。分析表用一个二位数组 M 表示,数组元素 M[A,a]中
的下标 A 表示非终结符,a 为终结符或句子括号‘#’,二维数组中存放的是一条关于 A 的产
生式,表明当非终结符 A 向下推导时,面临输入符 a 时,所采用的候选产生式,当元素内
容无产生式时,则表明用 A 的左部向下推导时出现了不该出现的符号,因此元素内容转向
出错处理的信息。
LL(1)分析过程主要包括以下四个动作:
替换:当 XVN 时选相应产生式的右部去替换 X。此时 X 出栈,逆序入栈。
匹配:当 XVT 时它与 a 进行匹配,其结果可能成功,也可能失败,如果成功则符号
栈中将 X 退栈并将输入流指针向前移动一位,否则报错。
接受:当格局为(#,空#)时报告分析成功。
报错:出错后,停止分析。并给出相应的错误提示信息。
【实验要求】
1、编程时注意编程风格:空行的使用、注释的使用、缩进的使用等。
2、如果遇到错误的表达式,应输出错误提示信息。
【流程图】
1. 总体思路分析及流程图
给定一个正规文法 G,在 LL(1)预测分析中,必须先求出 First 集和 Follow 集,然后
求出 Select 集,通过 Select 集判断是否是 LL1 文法,如果是的话,构造预测分析表。求
出预测分析表之后,再输入一个字符串,依据 LL1 分析表单步输出字符串的分析过程。
功能模块分解图
(1)主程序流程图
1
(2)核心算法流程图
1.计算非终结符的 First 集的算法及流程:
First 集合的构造算法:
(1)若 X∈VT,则 First(X)={X}。
(2)若 X∈VN,且有产生式 X→a……,则把 a 加入到 First (X)中;若 X→ε 也是一
条产生式,则把 ε 也加到 First (X)中。
(3)若 X→Y……是一个产生式且 Y∈VN,则把 First (Y)中的所有非 ε-元素都加到
First (X)中;若 X→Y1Y2…Yk 是一个产生式,Y1,…,Yi-1 都是非终结符,而且,对于
任何 j,1≤j≤i-1,First (Yj)都含有 ε(即 Y1…Yi-1* ε),则把 First (Yj)中的所有非 ε-
元素都加到 First (X)中;特别是,若所有的 First (Yj)均含有 ε,j=1,2,…,k,则把 ε 加
到 First (X)中。
连续使用上面的规则,直至每个集合 First 不再增大为止。
2
剩余10页未读,继续阅读
文档优选
- 粉丝: 88
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 青岛大学人工智能实验二 利用α-β搜索的博弈树算法编写一字棋游戏
- ### 1、项目介绍 本项目Scrapy进行数据爬取,并使用Django框架+PyEcharts实现可视化大屏 效果如下:
- # 微信小程序-健康菜谱 基于微信小程序的一个查找检索菜谱的应用 ### 效果 !动态图(./res/gif/demo
- zabbix-get命令包资源
- 289ssm-mysql-jsp 计算机课程实验管理系统.zip(可运行源码+数据库文件+文档)
- 毕业设计,基于PyQt5实现的可视化界面的Python车牌自动识别系统源码
- 20-天天果园项目.rar
- 26-朴素贝叶斯分类.rar
- 没有安Matlab 也可以 生成FIR抽头系数工具.py
- 自助购药小程序源代码含文档
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论13