编译原理学习笔记·语法分析(LL(1)分析法/算符优先分析法OPG)及例子详解
来源:互联网 发布:php项目开发实战入门 编辑:程序博客网 时间:2024/05/23 13:03
语法分析(自顶向下/自底向上)
自顶向下
- 递归下降分析法
这种带回溯的自顶向下的分析方法实际上是一种穷举的不断试探的过程,分析效率极低,在实际的编译程序中极少使用。
- LL(1)分析法
又称预测分析法,是一种不带回溯的非递归自顶向下分析方法。(使用显式栈)
LL(1)的含义是:第一个L表明自顶向下分析是从左向右扫描输入串,第2个L表明分析过程中将使用最左推导,1表明只需向右看一个符号便可决定如何推导,即选择哪个产生式(规则)进行推导。
需要解决的几个问题
1.怎么根据某个文法构造LL(1)分析表First集
【注:first集需要注意的是----产生式右部是以非终结符开始 而且这个非终结符会推出ε,那么first集就得加入下一个的first集】
Follow集
【注:follow集需要注意的是----这种类型的产生式A->αBβ且β->ε的形式 与A->αB同样看待】
2.怎么判断一个上下文无关文法是不是LL(1)文法
自底向上
- 算符优先分析法(OPG)
它只考虑算符(终结符)之间的优先关系,分析扫描每个规约式的算符间优先关系。算符文法:即它的任一产生式的右部都不含两个相继的非终结符的文法。如果G是一个不含空字符的算法文法,那么只要它的任一对终结符都至多只满足>,=,<的关系的其中一种,则称g是一个算符优先文法。
假定G是一个不含空字符产生式的算符文法。对于任何一对终结符a,b,
(1)a=b,当且仅当G中含有形如P->…ab…或P->…aQb…的产生式;
(2)a<b, 当且仅当G中含有形如P->…aR…的产生式,而R-〉b…或R->Qb…;(3)a>b, 当且仅当G中含有形如P->…Rb…的产生式,而R->…a或R->…aQ;【注:a<b不等价于b>a! 这里的等号左右顺序指明的是式子中这两个终结符的左右顺序。
实际上,这里的大小关系就是先后规约的优先级关系】
需要解决的几个问题
- 构造Firstvt以及Lastvt集
- 接着便是构造优先关系表
给几个语法分析的例题
再看一个例子,判断某个上下文无关文法是否是LL(1)分析文法(或者将某个文法改造成LL(1)分析文法[其实,是先将这个文法消除左递归、回溯,这是LL(1)分析文法的基本条件,再应用充要条件判断是否是LL(1)分析文法])
算符优先分析法的例子
再看看下面这个例子(经过这些例题的理解,其实就是这两种语法分析就是在于 first/follow集 以及 firstvt/lastvt集的运算 再加上一点各自方法)
【附:一文一图】
阅读全文
0 0
- 编译原理学习笔记·语法分析(LL(1)分析法/算符优先分析法OPG)及例子详解
- 编译原理实习(应用预测分析法LL(1)实现语法分析)
- 语法分析之LL(1)分析法
- 编译原理实现预测分析法(LL(1))
- 编译原理(六) LL(1)文法分析法-分析过程
- 自上而下的语法分析(递归下降法,LL(1)预测分析法,预测分析表)
- 编译原理实验之语法分析(算符优先分析算法(C语言))
- 预测分析法进行语法分析(编译原理)
- 自下而上的语法分析和算符优先分析法
- 编译原理(八) 算符优先分析法-分析过程
- 从上下文无关文法(CFG)到语法分析树——LL(1)分析法
- 词法分析 与 LL(1)语法分析
- 编译原理:LL(1)文法 语法分析器(预测分析表法)
- 编译原理:LL(1)文法 语法分析器(预测分析表法)
- 【编译原理】自上而下的语法分析之预测分析法
- 【编译原理】自下而上的语法分析之LR分析法
- 编译原理实验3-算符优先分析法
- 编译原理(五) LL(1)文法分析法(预测分析表的构造算法C++实现)
- Java:输出乘法口诀(上三角)
- Cable master(二分查找)
- 轻量级插件sdstorage用于操作localStorage支持过期、批量搜索删除等
- 动态背景页面登录--(软件实训)
- freeCodeCamp-jQuery
- 编译原理学习笔记·语法分析(LL(1)分析法/算符优先分析法OPG)及例子详解
- 【HDU】1542 Atlantis 矩形面积并->线段树
- HDU-整除的尾数
- Java设计模式
- C++实例 静态成员的引入——静态数据成员的定义、调用,静态成员函数的实现、调用。
- 1042. Shuffling Machine (20)
- HDU 2722 Here We Go(relians) Again
- hive-4
- jstl、struts2取值问题