Compiler-4_LR分析
# LR 分析
2021-11-05
Tags: #Compiler #Course
- 在自底向上语法分析中, 如何寻找句柄是关键问题
# 总结
我们从 LR (0) 分析方法开始, 了解了移位归约分析方法的基本要点, 进一步将"前瞻"的思想加入到自底向上分析的过程中去, 最终构建了更加强大的 SLR (1) 分析器和 LR (1) 分析器.
相比 SLR (1) 分析器, LR (1) 分析将前瞻的思想融合到了 DFA 等价类的构建中去, 最大程度上地利用了栈内的已知信息, 避免了无效的归约, 减少了冲突, 有着最强大的表达能力.
LALR (1) 是对 LR (1) 的合理简化, 它在保留 LR (1) 的大部分能力的同时极大地减小了复杂度.
编译器是对"计算"的等价变换, 那么语法分析这一步其实相当于"重构/解释"思维过程.
编译器将更抽象形式的计算解释为计算机能够理解的低级形成, 而这让我们能够在更高层面上去思考解决问题的方法, 用更精炼的语言来表达解决这个问题所需要的计算步骤
词法, 语法分析就是在根据规则重构一个句子的组成(重构语法树). 我们拿到一个问题, 不断思考, 修改 最终得到一个完整的程序, 那么语法分析就是重现我们"推导这个程序的过程", 即解决问题的过程, 思维的过程.
后面的部分笔记还没有, 先把思考写在这里:
语义分析其实还有检查错误地功能, 那么编译器其实还有一个功能是负责"清洗", 检查错误
其实"解释成更低级的运算"这一步大部分是中间代码/目标代码生成这一步在做
编译器的主要责任/职责: 解释(计算步骤), 检查(代码错误), 优化(代码性能)