编译原理(清华大学版)第四、六章
重点:
掌握递归下降LL(1)分析法和表驱动LL(1)分析法
- 语法分析是编译程序的核心。作用是识别由此法分析给出的单词符号串是否是给定文法的正确句子,即是否可以通过语法树得到
-
语法分析程序的输入
Token(单词)序列:词法分析产生的输出,是各个单词都正确的源程序,是一个有限序列
-
语法分析程序的功能
根据文法的规则构造与Token序列相匹配的语法树或说寻找与Token序列相匹配的推导或归约。
-
语法分析程序的输出
语法树或某种表示
符号表管理信息:查找
错误处理信息:定位、报错、恢复、继续编译
自顶向下的语法分析方法
确定的自顶向下分析思想
关键
- 首先要解决从文法的识别符号出发,如何根据当前的输入符号(面对的单词)唯一地确定选用哪条规则替换相应非终结符以便往下推导
一些非常重要的概念
- 首符号集合(FIRST集)定义
设
- 后跟符号集合(FOLLOW集)定义
或者
如何解决自顶向下分析的关键问题,即判断是否为确定的自定向下分析,引入
产生式的选择符号集(SELECT集)定义
- 给定上下文无关文法的产生式
- 若
,则 - 若
,则
- 若
一个上下文无关文法是LL(1)文法的充分必要条件
- 对每一个非终结符
的两个不同产生式, , ,满足其中 , 不能同时 。
LL(1)文法
-
LL(1)文法的含义是:
-
第一个L表明自顶向下分析是从左向右扫描输入串
-
第二个L表明分析过程总用最左推导;
-
1表明只需向后看一个符号就可决定如何推导,即选择哪个产生式(规则)进行推导。
-
本文作者:Graffiti404
本文链接:https://www.cnblogs.com/graffiticode/p/18225342
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步