编译器之语法分析

  • 自顶向下
    • 上下文无关文法
    • 语法树
    • NFA→CFG
    • 预测分析法
  • 改写CFG
    • 原因
    • 消除二义性
    • 消除左递归
    • 消除左公因子
    • 消除空产生式
    • 消除回路

自顶向下

上下文无关文法

CFG本质上就是产生式的集合,规定了一个非终结符的形式,规定了它可以长什么样子,比如下图的E→EAE,就表明了E这个语法结构(非终结符),他的基本形式应该是 E 搭配 A 搭配 E。

推导:根据单词序列,从开始符号选择合适的产生式进行替换,比如:输入的单词串时 num - num + num,我们的产生式就是 E→E+E | E-E | digit,根据输入的单词串我们可以知道我们应该先选择第一个产生式,再选择第二个产生式,最后选择第三个产生式(实际情况不能这么做,人眼可以),总之,推导就是用产生式进行替换。

语法树

对应着推导过程

NFA→CFG


预测分析法

预测分析法就是从开始符号开始,依次选择产生式知道匹配到单词串,问题就是怎么选择产生式,每次都要匹配太过麻烦,而且,如果产生式右部的第一个单词也是非终结符会需要不停的向下搜索,直至是终结符,这十分麻烦,所以,我们选择用first集和follow集进行判定.

first集,顾名思义,就是这个非终结符通过一系列产生式(包括继续递归的产生式)能够产生的第一个终结符,所以,根据first集很容易进行产生式的选择,follow集,顾名思义,就是找到该非终结符后面会直接跟随的符号,比如A→Bc,B的follow集就是{c},follow集的作用就是确定ε产生式,选择了这个产生式就意味着这个推导到这里就结束了,结束在类似于非终结符的地方

所以,我们可以知道,我们根据first集和follo集合判断产生式的选择

预测分析表的使用

预测分析表的构造
根据first和follow

改写CFG

原因

我们可以看到,如果采用预测分析法,对于文法的使用有很多要求,比如,如果有两个产生式的first集有交集,那么在产生式的选择上就会有多种选择,如果,A→Ac,这样就会导致无限度的递归,也要消除

消除二义性

只能依靠按照语法的本质更改文法,没有特殊算法。

消除左递归


消除左公因子

消除空产生式

这里面注意回溯

消除回路

编译原理之语法分析(预测分析法)相关推荐

  1. 编译实验 lr c语言代码,编译原理-实验5-LR(1)分析法

    <编译原理-实验5-LR(1)分析法>由会员分享,可在线阅读,更多相关<编译原理-实验5-LR(1)分析法(6页珍藏版)>请在人人文库网上搜索. 1.编译原理实验报告项目名称 ...

  2. 编译原理 词法分析 算符优先分析法

    编译原理 词法分析 算符优先分析法 实验目的 加深对语法分析器工作工程的理解,加强对算符优先分析法实现语法分析程序的掌握:能够采用一种编程语言实现简单的语法分析程序:能够使用自己辨析的分析程序对简单的 ...

  3. 编译原理教程_6 LR分析法

    文章原稿 https://gitee.com/fakerlove/fundamentals-of-compiling 文章目录 6. LR分析法 6.1 简介 (1)LR分析法的优缺点 (2)分析表的 ...

  4. 【编译原理笔记05】语法分析:FIRST集和FOLLOW集的计算,[非]递归的预测分析法,预测分析中的错误处理

    本次笔记内容: 4-4 FIRST集和FOLLOW集 4-5 递归的预测分析法 4-6 非递归的预测分析法 4-7 预测分析法中的错误处理 本节课幻灯片,见于我的 GitHub 仓库:第5讲 语法分析 ...

  5. 编译原理预测分析法c语言,编译原理预测分析法C语言的实验报告.doc

    题目:编写识别由下列文法所定义的表达式的预测分析程序. EàE+T | E-T | T TàT*F | T/F |F Fà(E) | i 输入:每行含一个表达式的文本文件. 输出:分析成功或不成功信息 ...

  6. 语法分析:自上而下分析(递归下降分析法+预测分析法)

    语法分析:自上而下分析 目录 语法分析:自上而下分析 知识背景 递归下降分析法 内容一:根据文法生成子程序 内容二:调用文法开始符号所对应的子程序 预测分析法 内容一:构造预测分析表 内容二:预测分析 ...

  7. 国内外编译原理课程实践教学现状分析

    <自己动手写编译器.链接器> 冯向萍 (新疆农业大学计算机与信息工程学院)   摘 要:本文主要从教材的选择,实践项目的设置以及实践课程占总评成绩的比例等方面分析和比较了国内外多所高校编译 ...

  8. 4.2.5 预测分析法与预测分析表的构造

    4.2.5 预测分析法与预测分析表的构造 预测分析法也称为 LL ( 1 )分析法.这种分析法是确定的自上而下分析的另一种方法,采用这种方法进行语法分析要求描述语言的文法是 LL ( 1 )文法. 一 ...

  9. 预测分析法语法分析器的设计

    文章目录 一.实验目的 二.实验内容 三.实验要求 四.实验设计方案 五.测试方案及测试结果 结语 附录 一.实验目的 根据文法编制预测分析法语法分析程序,以便对输入的符号串进行语法分析.通过编写预测 ...

最新文章

  1. Elasticsearch 如何做到快速检索?
  2. c语言二十四点游戏,C语言解24点游戏程序
  3. 汇编语言 实验10.1 显示字符串
  4. 小米盒子连接不上服务器显示wifi,小米盒子连接不上wifi的原因及解决办法
  5. 3项目里面全局用less变量 cli vue_vue-cli3 如何全局引入less变量
  6. HDFS底层原理系列讲解之fsimage、editslog
  7. 基于遗传算法实现自动组卷
  8. Web前端开发笔记——第二章 HTML语言 第六节 区域标签、列表标签
  9. Ubuntu 12.04安装英汉词典
  10. ActiveX: 如何用.inf和.ocx文件生成cab文件
  11. php 分页 报表 框架,zentaoPHP框架的分页解决方案
  12. 【渝粤教育】广东开放大学 人类行为与社会环境 形成性考核 (56)
  13. Oracle数据库编程:PL/SQL编程基础
  14. ARCore1.2使用入门(一) ------ 将ARCore案例打包成Android/iOS运行测试(unity开发)
  15. 设计MP3网页音乐播放器
  16. 云计算技术基础【11】
  17. c++入门中,一道题展开的东西……继承与派生,多态和重载
  18. java模拟excel排序_Apache-POI在excel中排序行
  19. RHUB(美国)网络会议 合作伙伴反馈
  20. maven 配置 (个人记录向)

热门文章

  1. CC1310的SDK开发之IAR新建工程
  2. Web前端实现一个图片放大镜
  3. 网络扫描与网络侦察一
  4. 一个手机用c网可以打开网站切换到g网就打不开_推荐7个鲜为人知的搜索网站,让人眼前一亮...
  5. 什么是CTG线路?和CN2线路有什么区别差异?
  6. springboot 订单重复提交_防止表单重复提交(springboot,redis)
  7. mac安装kafka
  8. Oracle hang 之sqlplus -prelim方法
  9. 自学C4D 从入门到精通【学习视频教程全集】+【OC渲染】+【素材笔记】
  10. 浅析mssql渗透之XP_dirtree LLMNR/NBT-NS欺骗攻击