编译原理之语法分析(自底向上)(包含源码)
编译器之语法分析
- 自底向上
- 基本概念
- 算符优先
- SLR
- 规范LR
- LALR
自底向上
基本概念
自底向上形成语法树的过程就是及逆行归约,将一堆单词串放在一起,形成某个产生式的样子,然后规约成某个产生式,所以关键就是什么时候进行产生式的归约。
算符优先
这里要注意的就是优先级的比较,比如a<b一定式意味着a会先出现在b的前面,而前后体现在树上就是a一定在b的左边,不管是树的左上方还是左下方,所以,我们对于一棵树的遍历也应该知道,一定是先左后右。
而且,两个终结符(不局限于运算符)比较的时候不代表中间没有别的终结符中间可以有很多终结符,但是他们最后可以不断规约为一个非终结符,使得两个符号碰在一起,所以,能不能碰到一起这个判定一定式通过文法自行判定的。
句柄的寻找就是在两个终结符中间的一串,当我们遇到栈顶的符号优先级大于输入缓冲区中的符号的时候,我们需要在栈中寻找,找到优先级小于当前栈顶符号的符号,找到之后,真正的符号串应该是不包含找到的这个符号,从这个符号开始,知道当前栈中的所有字符,也就是意味着,栈中的字符不仅仅式非终结符,还应该包括终结符
SLR
这里面的goto函数对应的都是移进的动作,如果某个状态包含.在最后的,就对应着归约动作,归约写在产生式左部非终结符的follow集列中
规范LR
规范LR的SLR的区别就是规范LR明确的规定了规约动作应该在什么时候出现,而不仅仅是在follow集合之后
这个末尾的字符的产生就是后面的first集合,这个是只有在.后面的是非终结符会产生新的产生式,这个时候,新产生式的末尾跟的就是原本这个非终结符后面的first集合
LALR
LALR在原本的基础上增加了同心的概念,在LR(1)项目集中,如果一个项目中的所有产生式都一样,只是产生式后面的搜索符不一样的话,可以将二者合并。
编译原理之语法分析(自底向上)(包含源码)相关推荐
- HanLP自然语言处理包开源(包含源码)
HanLP自然语言处理包开源(包含源码) 支持中文分词(N-最短路分词.CRF分词.索引分词.用户自定义词典.词性标注),命名实体识别(中国人名.音译人名.日本人名.地名.实体机构名识别),关键词提取 ...
- 【2021软件创新实验室暑假集训】SpringMVC框架(设计原理、简单使用、源码探究)
系列文章目录 20级 Java篇 [2021软件创新实验室暑假集训]计算机的起源与大致原理 [2021软件创新实验室暑假集训]Java基础(一) [2021软件创新实验室暑假集训]Java基础(二) ...
- maven 上传jar 包含源码
2019独角兽企业重金招聘Python工程师标准>>> maven 上传jar 包含源码 1.pom配置如下 <build><plugins><!-- ...
- 单元测试Struts2Spring项目的Action和Service(包含源码)
最近,认真实践了单元测试Struts2.Spring等Java项目,今天特意写的是单元测试Struts2Spring项目的Action和Service. 由于已经写过不少Web开发框架单元测试的代码, ...
- java编译使用androidsdk,详解Android源码的编译
本文将为大家介绍的是如何设置Android源码的编译环境,包括Linux下的配置.主要基于Android 1.0环境,希望对大家了解Android开发有所帮助. 本次编译过程主要参考官方文档(http ...
- vs+cmake完美编译RTS游戏,类似魔兽争霸源码
网上的一个RTS游戏,网上的代码比较老,不能直接编译.这个仓库是我整理编译通过的.代码版权归于原作者. 源码下载 vs+cmake完美编译RTS游戏,类似魔兽争霸源码下载-其他文档类资源-CSDN文库 ...
- H5音乐播放器(包含源码与示例)
H5音乐播放器(包含源码与示例) 基于Angular+ionic的H5音乐播放器,源码:https://gitee.com/CrimsonHu/h5-music-player 示例地址 建议使用原版c ...
- 实时编译、动态执行C/C++源码函数
实时编译.动态执行C/C++源码函数 语法格式:fileCLASS *pObj = <file.cpp> 该语法获得源代码file.cpp的函数接口对象指针pObj,通过pObj调用fil ...
- 北大青鸟java y2_北大青鸟Y2Java3个月分结业测试题 包含源码
[实例简介] 北大青鸟Y2Java方向结业测试题,包含源码 [实例截图] [核心代码] 3道题 └── 新建文件夹 ├── 1 │ ├── 2013-1-13 6.0Y2Java 机试.rar │ ...
- ubuntu 14.04.5 编译Android 4.4.4 r1源码(最新)
本文博客链接:http://blog.csdn.net/qq1084283172/article/details/54426189 吐槽:ubuntu系统真是让人又爱又恨,也有可能是VMware Wo ...
最新文章
- go linux环境搭建,Linux 下 Go 环境搭建以及 Gin 安装
- assistant字体_如何使用Google Assistant设置和致电家庭联系人
- C++ 类的行为 | 行为像值的类、行为像指针的类、swap函数处理自赋值
- sockets php,PHP: Sockets - Manual
- 图文排版html,超漂亮的网页图文排版欣赏
- c语言出现源文件未编译,dev运行C语言出问题
- iic上拉电阻的阻值计算方法与特性
- Scipy之图片降噪
- GlusterFs安装部署文档
- vue 中 mixins 的使用
- ios dat 文件读写_iOS数据恢复前沿探索
- Codeforces Round #776 (Div. 3)-D. Twist the Permutation
- DateEdit仅显示和选择年份
- CSS:精灵图 字体图标
- Arduino UNO通过SPI串行方式驱动LCD12864液晶屏
- 如何加快Mac启动时间?Mac启动缓慢问题如何解决?
- 现代移动通信,究竟是如何崛起的?
- 2、[python]编辑器
- k8s标签(label)的使用
- APP开发中的UI设计