编译器之语法分析

  • 自底向上
    • 基本概念
    • 算符优先
    • 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. go linux环境搭建,Linux 下 Go 环境搭建以及 Gin 安装
  2. assistant字体_如何使用Google Assistant设置和致电家庭联系人
  3. C++ 类的行为 | 行为像值的类、行为像指针的类、swap函数处理自赋值
  4. sockets php,PHP: Sockets - Manual
  5. 图文排版html,超漂亮的网页图文排版欣赏
  6. c语言出现源文件未编译,dev运行C语言出问题
  7. iic上拉电阻的阻值计算方法与特性
  8. Scipy之图片降噪
  9. GlusterFs安装部署文档
  10. vue 中 mixins 的使用
  11. ios dat 文件读写_iOS数据恢复前沿探索
  12. Codeforces Round #776 (Div. 3)-D. Twist the Permutation
  13. DateEdit仅显示和选择年份
  14. CSS:精灵图 字体图标
  15. Arduino UNO通过SPI串行方式驱动LCD12864液晶屏
  16. 如何加快Mac启动时间?Mac启动缓慢问题如何解决?
  17. 现代移动通信,究竟是如何崛起的?
  18. 2、[python]编辑器
  19. k8s标签(label)的使用
  20. APP开发中的UI设计

热门文章

  1. OpenCV是什么?它的作用是什么?
  2. python 中文显示乱码如何处理
  3. 命令win7 64安装mysql_Win7 64位安装MySQL及配置使用教程
  4. Oracle完全卸载
  5. vs2008 创建对话框MFC应用程序调试c++代码
  6. 最常见的 SQL 查询错误 - 第二章节
  7. 电影资源站python爬虫源码
  8. Android app开发入门复习一(1-2章)
  9. PotPlayer直播源推荐
  10. plsql导入dmp文件后服务器无数据,使用plsql导入dmp文件缺少imp*.exe