【编译原理】自下而上的语法分析之LR分析法
来源:互联网 发布:java开源运维监控平台 编辑:程序博客网 时间:2024/05/22 05:09
LR分析器是一种由下而上(bottom-up)的上下文无关语法分析器。LR意指由左(Left)至右处理输入字符串,并以最右边优先派生(Right derivation)的推导顺序(相对于LL分析器)建构语法树。能以此方式分析的语法称为LR语法。而在LR(k)这样的名称中,k代表的是分析时所需前瞻符号(lookahead symbol)的数量,也就是除了目前处理到的输入符号之外,还得再向右引用几个符号之意;省略 (k)时即视为LR(1),而非LR(0)。
由于LR分析器尝试由分析树的叶节点开始,向上一层层通过文法规则的化简,最后规约回到树的根部(起始符号),所以它是一种由下而上的分析方法。许多编程语言使用LR(1)描述文法,因此许多编译器都使用LR分析器分析源代码的文法结构。LR分析的优点如下:
- 众多的编程语言都可以用某种LR分析器(或其变形)分析文法。(C++是个著名的例外)
- LR分析器可以很有效率的建置。
- 对所有“由左而右”扫描源代码的分析器而言,LR分析器可以在最短的时间内侦测到文法错误(这是指文法无法描述的字符串)。
然而LR分析器很难以人工的方式设计,一般使用“分析产生器(parser generator)”或“编译器的编译器(compiler-compiler,产生编译器的工具)”来建构它。LR分析器可根据分析表(parsing table)的建构方式,分类为“简单LR分析器(SLR, Simple LR parser)”、“前瞻LR分析器(LALR, Look-ahead LR parser)”以及“正统LR分析器 (Canonical LR parser)”。这些解析器都可以处理大量的文法规则,其中LALR分析器较SLR分析器强大,而正统LR分析器又比LALR分析器能处理更多的文法。著名的Yacc即是用来产生LALR分析器的工具。
以上内容来自wiki百科:http://zh.wikipedia.org/wiki/LR_%E5%88%86%E6%9E%90%E5%99%A8
================================================================
以下为LR分析法的主要内容, 截图来源于龙书.
1. LR语法分析模型
2. LR分析算法
3. LR(0)项目集构造
4. LR(0)项目集构造与DFA构造实例
5. SLR语法分析表构造算法
6. LR(1)项目集构造
7. LR(1)语法分析表构造
8. LR(1)项目集与分析表实例
9. LALR分析表构造法
- 【编译原理】自下而上的语法分析之LR分析法
- 【编译原理】自上而下的语法分析之预测分析法
- 自下而上的语法分析和算符优先分析法
- 语法分析:自下而上分析
- 编译原理之词法分析和语法分析
- 编译原理之词法分析和语法分析
- 第五章 语法分析-自下而上分析
- 【编译原理】自顶向下的语法分析之递归下降分析法
- 编译原理之语法分析
- 编译原理之LR(0)分析算法的c实现
- 编译原理之词法分析、语法分析、语义分析
- 编译原理之词法分析、语法分析、语义分析
- 编译原理之词法分析、语法分析、语义分析
- LR(1)分析法 ---编译原理-----
- 编译原理LR分析法c++实现
- 编译原理手记07-LR分析法
- 编译原理-LR(0)分析法
- 编译原理学习之语法分析
- Xcode5 运行程序 提示IOS 模拟器未能安装此应用程序
- extern“c”
- Ubuntu下的用户和权限(三)
- NYOJ 47 过河问题
- Android多媒体浅析
- 【编译原理】自下而上的语法分析之LR分析法
- hdu 1087 Super Jumping! Jumping! Jumping!
- 复习:Java回调函数透彻理解
- 日常分析软件漏洞方法(转)
- Android支付接入(一):支付宝
- 第二十周工作日志
- 无限循环小数的循环节
- dxf中的圆与直线
- ios面试题