编译器之语法分析

  • 自底向上
    • 基本概念
    • 算符优先
    • SLR
    • 规范LR
    • LALR

自底向上

基本概念

自底向上形成语法树的过程就是及逆行归约,将一堆单词串放在一起,形成某个产生式的样子,然后规约成某个产生式,所以关键就是什么时候进行产生式的归约。

算符优先


这里要注意的就是优先级的比较,比如a<b一定式意味着a会先出现在b的前面,而前后体现在树上就是a一定在b的左边,不管是树的左上方还是左下方,所以,我们对于一棵树的遍历也应该知道,一定是先左后右。

而且,两个终结符(不局限于运算符)比较的时候不代表中间没有别的终结符中间可以有很多终结符,但是他们最后可以不断规约为一个非终结符,使得两个符号碰在一起,所以,能不能碰到一起这个判定一定式通过文法自行判定的。

句柄的寻找就是在两个终结符中间的一串,当我们遇到栈顶的符号优先级大于输入缓冲区中的符号的时候,我们需要在栈中寻找,找到优先级小于当前栈顶符号的符号,找到之后,真正的符号串应该是不包含找到的这个符号,从这个符号开始,知道当前栈中的所有字符,也就是意味着,栈中的字符不仅仅式非终结符,还应该包括终结符

SLR





这里面的goto函数对应的都是移进的动作,如果某个状态包含.在最后的,就对应着归约动作,归约写在产生式左部非终结符的follow集列中

规范LR

规范LR的SLR的区别就是规范LR明确的规定了规约动作应该在什么时候出现,而不仅仅是在follow集合之后

这个末尾的字符的产生就是后面的first集合,这个是只有在.后面的是非终结符会产生新的产生式,这个时候,新产生式的末尾跟的就是原本这个非终结符后面的first集合

LALR

LALR在原本的基础上增加了同心的概念,在LR(1)项目集中,如果一个项目中的所有产生式都一样,只是产生式后面的搜索符不一样的话,可以将二者合并。

编译原理之语法分析(自底向上)(包含源码)相关推荐

  1. HanLP自然语言处理包开源(包含源码)

    HanLP自然语言处理包开源(包含源码) 支持中文分词(N-最短路分词.CRF分词.索引分词.用户自定义词典.词性标注),命名实体识别(中国人名.音译人名.日本人名.地名.实体机构名识别),关键词提取 ...

  2. 【2021软件创新实验室暑假集训】SpringMVC框架(设计原理、简单使用、源码探究)

    系列文章目录 20级 Java篇 [2021软件创新实验室暑假集训]计算机的起源与大致原理 [2021软件创新实验室暑假集训]Java基础(一) [2021软件创新实验室暑假集训]Java基础(二) ...

  3. maven 上传jar 包含源码

    2019独角兽企业重金招聘Python工程师标准>>> maven 上传jar 包含源码 1.pom配置如下 <build><plugins><!-- ...

  4. 单元测试Struts2Spring项目的Action和Service(包含源码)

    最近,认真实践了单元测试Struts2.Spring等Java项目,今天特意写的是单元测试Struts2Spring项目的Action和Service. 由于已经写过不少Web开发框架单元测试的代码, ...

  5. java编译使用androidsdk,详解Android源码的编译

    本文将为大家介绍的是如何设置Android源码的编译环境,包括Linux下的配置.主要基于Android 1.0环境,希望对大家了解Android开发有所帮助. 本次编译过程主要参考官方文档(http ...

  6. vs+cmake完美编译RTS游戏,类似魔兽争霸源码

    网上的一个RTS游戏,网上的代码比较老,不能直接编译.这个仓库是我整理编译通过的.代码版权归于原作者. 源码下载 vs+cmake完美编译RTS游戏,类似魔兽争霸源码下载-其他文档类资源-CSDN文库 ...

  7. H5音乐播放器(包含源码与示例)

    H5音乐播放器(包含源码与示例) 基于Angular+ionic的H5音乐播放器,源码:https://gitee.com/CrimsonHu/h5-music-player 示例地址 建议使用原版c ...

  8. 实时编译、动态执行C/C++源码函数

    实时编译.动态执行C/C++源码函数 语法格式:fileCLASS *pObj = <file.cpp> 该语法获得源代码file.cpp的函数接口对象指针pObj,通过pObj调用fil ...

  9. 北大青鸟java y2_北大青鸟Y2Java3个月分结业测试题 包含源码

    [实例简介] 北大青鸟Y2Java方向结业测试题,包含源码 [实例截图] [核心代码] 3道题 └── 新建文件夹 ├── 1 │   ├── 2013-1-13 6.0Y2Java 机试.rar │ ...

  10. ubuntu 14.04.5 编译Android 4.4.4 r1源码(最新)

    本文博客链接:http://blog.csdn.net/qq1084283172/article/details/54426189 吐槽:ubuntu系统真是让人又爱又恨,也有可能是VMware Wo ...

最新文章

  1. Windows 服务全攻略(1)
  2. 让串口可以自动分辨一帧数据
  3. 全球及中国沼气发电行业现状及项目发展动态调研报告2021年版
  4. Yahoo! 的数据仓库: 世界上最大最忙
  5. SAP Spartacus auto focus Directive响应模型变化的一些触发时机例子
  6. java pdf中文乱码_java转pdf(html转为pdf),解决中文乱码,标签不规范等问题
  7. 设计模式笔记--委派
  8. 关于如何理解链表结构体指针引用LinkNode * L的问题
  9. django xadmin 安装和使用
  10. PC微信多开源代码-消息钩子+ZwQuerySystemInformation
  11. 动态IP和静态IP有什么区别
  12. 微信支付 H5 版本 PHP
  13. 怎么用python骂人_人生苦短我用Python,本文助你快速入门
  14. mysql存储过程和mysql函数
  15. PDFBox实现图片转PDF --JAVA
  16. origin双y轴数据散点图显示
  17. NLP机器翻译任务中,如何用Bleu score评价翻译质量(学习心得)
  18. 【Linux】文件与路径
  19. 微生物实验室布局设计宗旨
  20. 使用01字典树解决最大异或问题

热门文章

  1. Yum工具详解(二)-----Yum配置阿里源
  2. 分布式爬虫系统设计、实现与实战
  3. Apipost让您轻松完成接口测试及接口文档,告别加班
  4. 操作系统(五)I/O设备
  5. 【总结】56个JavaScript 实用工具函数助你提升开发效率!
  6. notepad 语言等常用设置
  7. DB、DBS、DBMS、RDBMS的概念跟区别
  8. IC卡电表及用电信息管理系统
  9. 分享篇:第十届“泰迪杯”数据挖掘挑战赛-农田害虫图像识别(特等奖)
  10. PLSQL中 commit 和 rollback 的区别