第四章 自上而下分析
第四章 词法分析——自上而下分析
4.1语法分析器功能
语法分析是编译过程的核心部分。
它的任务是在词法分析识别出单词符号串的基础上,分析并判定程序的语法结构是否符合语法规则。
自上而下分析面临的问题:
1.文法的左递归问题
2.回溯的不确定性,浪费时间
3.虚假匹配的问题
4.不能准确地确定输入串中出错的位置
5.效率低
解决方案:
- 文法的左递归问题:
例如文法:p => p a,在没有识别任何输入符号的情况下,就会产生无限匹配p的情况造成死循环。
- 回溯的不确定性,要求我们将已经完成工作推倒从来。
每次遇到错误匹配,就要回溯到最后一次正确的位置。
- 虚假匹配的问题
- 不能准确地确定输入串中出错的位置
函数只能判断匹配是否出错,不能判断具体出错的位置。
- 效率低
上述方案实际上是穷举法,效率极低。
4.3 LL(1) 分析法
1.通过替换消除左递归,间接左递归的情况:经过若干表达式带入之后会递归到本身
2.
一、求FIRST集
1、右部首个字符是终结符则加入左部字符的FIRST集中,比如对形如U->a…的产生式(其中a是终结符),把a收入到FIRST(U)中。
2、右部首个字符是非终结符,若此非终结符能推出空字符,则把它的FIRST集传送到左部字符的FIRST集中,*
若此非终结符后是终结符,则把此终结符加入到左部字符的FIRST集中,同时推导结束;
若此非终结符后是非终结符,则回到(*)。
若此非终结符不能推出空字符,则把它的FIRST集传送到左部字符的FIRST集中,同时推导结束。
二、求FOLLOW集
1、FOLLOW集合是从开始符号S开始推导,把#加入FOLLOW(S)中。
2、左部是S的产生式,右部末尾是非终结符,则把#加入此非终结符的FOLLOW集中。
3、右部中若某非终结符的后面是终结符,则把此终结符加入到非终结符的FOLLOW集中。
4、右部中若某非终结符的后面是非终结符,
若后非终结符能推出空字符,则把后非终结符的FIRST集(去掉空字符)传送到前非终结符的FOLLOW集中,同时把左部非终结符的FOLLOW集传送到后非终结符的FOLLOW集中。
若后非终结符不能推出空字符,则把后非终结符的FIRST集传送到前非终结符的FOLLOW集中。
习题:
转载于:https://www.cnblogs.com/wuwangchuxin0924/p/8961597.html
第四章 自上而下分析相关推荐
- arcgis重心迁移分析_Arcgis第四章 空间分析.ppt
Arcgis第四章 空间分析 第4章 空间分析 空间分析概述 矢量数据分析方法 栅格数据分析 DTM与三维分析 空间分析建模 复习思考题 实验 不同的学者对此有着不同的看法 陈述彭 .黄杏元 .Hai ...
- 第四章 如何分析电路故障的原因
第四章 如何分析电路故障的原因 4.1 电阻损坏的特点与判别 常看见许多初学者在检修电路时在电阻上折腾,又是拆又是焊的,其实修得多了,你只要了解了电阻的损坏特点,就不必大费周章. 电阻是电器设备中数量 ...
- 软件工程---第四章---形式化分析
文章目录 非形式化 形式化 应用形式化的准则 有穷状态机 Perl网 加入禁止线 按形式化程度,可以将软件工程使用的方法分为: 非形式化 用自然语言书写的缺点:矛盾,二义性,含糊性,不完整性 矛盾-一 ...
- 第四章css总结,第四章CSS层叠样式表分析.doc
第四章CSS层叠样式表分析 第章CSS层叠样式表CSS的" " color=" ">这样的标签以及与标签搭配的显示属性(如"background ...
- 第五章 语法分析——自上而下分析
一.知识总结 本章介绍自下而上语法分析方法.所谓自下而上分析法就是从输入串开始,逐步进行"归约",直至鬼月到文法的开始符号.或者说,从语法树的末端开始,步步向上"归约&q ...
- 大学“电路分析基础”试题合集第四章
大学"电路分析基础"试题合集第一章 大学"电路分析基础"试题合集第二章 大学"电路分析基础"试题合集第三章 "电路分析基础&quo ...
- 使用ArchR分析单细胞ATAC-seq数据(第十四章)
本文首发于我的个人博客, http://xuzhougeng.top/ 往期回顾: 使用ArchR分析单细胞ATAC-seq数据(第一章) 使用ArchR分析单细胞ATAC-seq数据(第二章) 使用 ...
- 第四章 权限提升分析及防御
查询系统信息systeminfo 如果要查看特定的信息,可以使用systeminfo | findstr /B /C:"OS名称" /C:"OS版本" 主机名H ...
- 【数分书单】分析思维《一本小小的蓝色逻辑书》第四章小结
第四章 如何进行论述分析 学习一些基本的论述结构有助于提升我们的逻辑思维能力 1 什么是论述(法则20) 论据+关键假设=论点.关键假设的价值在于,它能把论据和论点联结起来 关键假设:作者或演讲者认 ...
最新文章
- 深入学习jQuery描述文本内容的3个方法
- java 反射 注解 运用_Java注解与反射的使用
- java 程序编译和运行的过程
- python 排序统计滤波器_马尔可夫链+贝叶斯滤波器的Python展示
- 北京内推 | 微软亚洲研究院机器学习组招聘AI for Health实习生
- 插图 引用 同一行两个插图_提出食物主题中的插图
- ubuntu start
- spring框架结构介绍
- php任务分配思路_PHP执行定时任务的几种方法思路
- P3275 [SCOI2011]糖果
- 【LeetCode】面试题 03. 数组中重复的数字
- 安全验证框架使用笔记001---Shiro简介
- mysql数据库优化课程---12、mysql嵌套和链接查询(查询user表中存在的所有班级的信息?)...
- C# KeyUp事件中MessageBox的回车(Enter)键问题
- 12306 官网硬卧下铺的选择
- 东欧小哥打造超全Python速查表登上GitHub热榜,标星4600+
- 关于locahost:8080一直在等待却不报错
- 使用硕正插件在strtus2框架下返回数据问题
- 网红直播天水人间主播大秀
- 嵌入式开发学习(5)S5PV210开发板刷系统那点破事儿之一
热门文章
- nb模块不能接收公网消息_物联网连接技术之NB-IOT无线技术介绍
- mysql 唯一索引_面试官:谈谈你对mysql索引的认识?
- java随机生成n位数字_java随机生成n个不相同的整数
- sql server 2005管理员手册_执行一条sql语句都经历了什么?
- c语言计算24游戏,C语言解24点游戏程序
- 表格图片预览_Mac预览工具使用技巧,Mac预览功能实用技巧大全
- rust蓝卡怎么开_Rust娘个人资料简介,角色作品介绍
- 插件代码_我们开源了一款 SonarQube iOS 代码扫描插件
- werkzeug.local
- hadoop 配置文件