第四章 词法分析——自上而下分析

4.1语法分析器功能

语法分析是编译过程的核心部分。

它的任务是在词法分析识别出单词符号串的基础上,分析并判定程序的语法结构是否符合语法规则。

自上而下分析面临的问题:

1.文法的左递归问题

2.回溯的不确定性,浪费时间

3.虚假匹配的问题

4.不能准确地确定输入串中出错的位置

5.效率低

解决方案:

  1. 文法的左递归问题:

例如文法:p => p a,在没有识别任何输入符号的情况下,就会产生无限匹配p的情况造成死循环。

  1. 回溯的不确定性,要求我们将已经完成工作推倒从来。

每次遇到错误匹配,就要回溯到最后一次正确的位置。

  1. 虚假匹配的问题
  2. 不能准确地确定输入串中出错的位置

函数只能判断匹配是否出错,不能判断具体出错的位置。

  1. 效率低

上述方案实际上是穷举法,效率极低。

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

第四章 自上而下分析相关推荐

  1. arcgis重心迁移分析_Arcgis第四章 空间分析.ppt

    Arcgis第四章 空间分析 第4章 空间分析 空间分析概述 矢量数据分析方法 栅格数据分析 DTM与三维分析 空间分析建模 复习思考题 实验 不同的学者对此有着不同的看法 陈述彭 .黄杏元 .Hai ...

  2. 第四章 如何分析电路故障的原因

    第四章 如何分析电路故障的原因 4.1 电阻损坏的特点与判别 常看见许多初学者在检修电路时在电阻上折腾,又是拆又是焊的,其实修得多了,你只要了解了电阻的损坏特点,就不必大费周章. 电阻是电器设备中数量 ...

  3. 软件工程---第四章---形式化分析

    文章目录 非形式化 形式化 应用形式化的准则 有穷状态机 Perl网 加入禁止线 按形式化程度,可以将软件工程使用的方法分为: 非形式化 用自然语言书写的缺点:矛盾,二义性,含糊性,不完整性 矛盾-一 ...

  4. 第四章css总结,第四章CSS层叠样式表分析.doc

    第四章CSS层叠样式表分析 第章CSS层叠样式表CSS的" " color=" ">这样的标签以及与标签搭配的显示属性(如"background ...

  5. 第五章 语法分析——自上而下分析

    一.知识总结 本章介绍自下而上语法分析方法.所谓自下而上分析法就是从输入串开始,逐步进行"归约",直至鬼月到文法的开始符号.或者说,从语法树的末端开始,步步向上"归约&q ...

  6. 大学“电路分析基础”试题合集第四章

    大学"电路分析基础"试题合集第一章 大学"电路分析基础"试题合集第二章 大学"电路分析基础"试题合集第三章 "电路分析基础&quo ...

  7. 使用ArchR分析单细胞ATAC-seq数据(第十四章)

    本文首发于我的个人博客, http://xuzhougeng.top/ 往期回顾: 使用ArchR分析单细胞ATAC-seq数据(第一章) 使用ArchR分析单细胞ATAC-seq数据(第二章) 使用 ...

  8. 第四章 权限提升分析及防御

    查询系统信息systeminfo 如果要查看特定的信息,可以使用systeminfo | findstr /B /C:"OS名称" /C:"OS版本" 主机名H ...

  9. 【数分书单】分析思维《一本小小的蓝色逻辑书》第四章小结

     第四章 如何进行论述分析 学习一些基本的论述结构有助于提升我们的逻辑思维能力 1 什么是论述(法则20) 论据+关键假设=论点.关键假设的价值在于,它能把论据和论点联结起来 关键假设:作者或演讲者认 ...

最新文章

  1. 深入学习jQuery描述文本内容的3个方法
  2. java 反射 注解 运用_Java注解与反射的使用
  3. java 程序编译和运行的过程
  4. python 排序统计滤波器_马尔可夫链+贝叶斯滤波器的Python展示
  5. 北京内推 | 微软亚洲研究院机器学习组招聘AI for Health实习生
  6. 插图 引用 同一行两个插图_提出食物主题中的插图
  7. ubuntu start
  8. spring框架结构介绍
  9. php任务分配思路_PHP执行定时任务的几种方法思路
  10. P3275 [SCOI2011]糖果
  11. 【LeetCode】面试题 03. 数组中重复的数字
  12. 安全验证框架使用笔记001---Shiro简介
  13. mysql数据库优化课程---12、mysql嵌套和链接查询(查询user表中存在的所有班级的信息?)...
  14. C# KeyUp事件中MessageBox的回车(Enter)键问题
  15. 12306 官网硬卧下铺的选择
  16. 东欧小哥打造超全Python速查表登上GitHub热榜,标星4600+
  17. 关于locahost:8080一直在等待却不报错
  18. 使用硕正插件在strtus2框架下返回数据问题
  19. 网红直播天水人间主播大秀
  20. 嵌入式开发学习(5)S5PV210开发板刷系统那点破事儿之一

热门文章

  1. nb模块不能接收公网消息_物联网连接技术之NB-IOT无线技术介绍
  2. mysql 唯一索引_面试官:谈谈你对mysql索引的认识?
  3. java随机生成n位数字_java随机生成n个不相同的整数
  4. sql server 2005管理员手册_执行一条sql语句都经历了什么?
  5. c语言计算24游戏,C语言解24点游戏程序
  6. 表格图片预览_Mac预览工具使用技巧,Mac预览功能实用技巧大全
  7. rust蓝卡怎么开_Rust娘个人资料简介,角色作品介绍
  8. 插件代码_我们开源了一款 SonarQube iOS 代码扫描插件
  9. werkzeug.local
  10. hadoop 配置文件