编译原理复习4
先打一发广告,我这个博客一开始就是用于记录算法的学习过程的,后来干脆想着把课堂笔记也整理整理放上来。想想这学期快结束了,下学期开始又要开始学习算法啦。我是准备从0开始学习的,借助于高中生信息学竞赛的平台。欢迎各位各类同学加进来,笑着问我为什么刷那么慢,或者跟我一起从0开始。欢迎对照对边导航栏,对准“算法向”的“洛谷”查看进度,刷完这个之后会继续刷USACO。
群号是⑥⑥①⑨②2025,这是我设置的一道很低的门槛用来阻止广告的。入群的验证暗号是:我爱编译原理
语法分析——自上而下分析
语法分析器的功能
语法分析的前提
- 对语言的语法结构进行描述
- 采用正规式和有限自动机可以描述和识别语言的单词符号(其实就是上一次复习材料里面的东西)
- 用上下文无关文法来描述语法规则
上下文无关文法
语法分析的任务
分析一个文法的句子结构
语法分析器的功能
按照文法的产生式(语言的语法规则),识别输入符号串是否为一个句子(合式程序)
自上而下分析面临的问题
回溯
左递归
LL(1)分析法
消除左递归
消除左递归,这个以前整理过。
消除回溯
为了消除回溯必须保证:
当对文法的任何非终结符,当要它去匹配输入串时,能够根据它所面临的输入符号准确地指派它的一个候选去执行任务,并且此候选的工作结果应该是确信无疑的。
假设有
令
特别的,若
如果非终结符A的所有候选首符集两两不相交,即A的任何两个不同候选
当要求A输入匹配输入串时,A就能根据它所面临的第一个输入符号a,准确地指派某一个候选前去执行任务。这个候选就是那个终结首符集含a的
为了消除回溯,我们必须提取最左公共子表达式
假设要用非终结符A进行匹配,面临的输入符号为a,A的所有产生式为
- 若
a∈FIRST(αi) ,则指派αi 执行匹配任务; - 若
a 不属于任何一个候选首符集,则“- 若
ϵ 属于某个FIRST(αi) 且a∈FOLLOW(A) ,则让A与ϵ 自动匹配 - 否则,a的出现是一种语法错误
- 若