编译原理笔记(三)之语法分析总结


语法分析:定义语法规则,执行语法规则

1. 程序设计语言与文法

  • 正规式与正规文法:正规式与正规文法用于描述线性结构,如构成句子的记号(终结符);识别正规语言的自动机是有限自动机,他们的特征是没有记忆功能
  • 上下文无关文法(CFG):CFG用于描述层次结构,如构成程序的句子;识别CFL的自动机是下推自动机,它在有限自动机的基础上增加了一个下推栈,从而有了简单的记忆功能。
  • 文法的分类:0型、1型、2型和3型文法。

2. 有关推导的基本概念

  • CFG产生语言的基本方法——推导:推导的基本思想是从文法的开始符号开始,反复地用产生式的右部替换句型中的非终结符。所涉及的基本概念包括:句子、直接推导、最左推导、左句型、最右推导、右句型等。
  • 分析树与语法树:分析树和语法树都反映了语言结构,同时分析树还记录了分析的过程。
  • 二义性与二义性的消除:二义性的本质是在文法中缺少对文法符号优先级和结合性的限制,从而使得一个句子可以推导出多余一颗的分析树。二义性的消除有两种方法:1. 改写二义文法为非二义文法;2. 对文法符号施加优先级和结合性的限制,使得在分析过程中每一步均有唯一选择。

3. 自上而下分析

  • 采用推导 的方法进行分析,从上到下构造分析树,是一种试探的过程。
  • 为避免回溯,要求文法没有公共左因子和左递归。
  • 递归下降子程序方法:为每一个非终结符构造一个子程序,子程序体中是对产生式右部文法符号的展开,遇到终结符就匹配,遇到非终结符就调用相应的子程序。
  • 预测分析表方法:用一个栈和一个预测分析表模拟递归子程序,它的基本工作模式是下推自动机,以格局的变化反映预测分析器的分析过程。
  • 预测分析表的构造:计算FIRST集合与FOLLOW集合,在此基础上构造预测分析表。
  • LL(1)文法及其判别:预测分析表中若没有多重定义条目,则文法、语言与分析器分别被称为LL(1)的文法、语言和分析器。

4. 自下而上分析

  • 归约的方法进行分析,从叶子到根构造分析树。
  • 基本概念:短语、直接短语、句柄、归约、规范归约。
  • 基本方法:用移进——归约方法实现剪句柄。关键问题是如何确定栈顶已经形成句柄;当句柄形成时,如何判定采用哪个产生式进行归约。
  • 构造识别活前缀的DFA:活前缀、LR(0)项目、LR(0)项目集、LR(0)项目集族、拓广文法与子集法。
  • DFA如何分析输入序列:有效项目、可移进项、可归约项、移进/归约冲突、归约/归约冲突。
  • 移进——归约分析表的构成:动作表、转移表。
  • SLR(1)文法简单向前看一个终结符即可解决冲突的方法,对应的分析表称为SLR(1)分析表,文法称为SLR(1)文法
  • LR与LALR分析向前看符号的引入,它的作用和计算方法;基于LR(1)项目集识别活前缀DFA中的状态数,LR(0)和LR(1)的折中——LALR(1)。

5. 编译器编写工具

  • ==LEX(词法分析生成器)YACC(语法分析生成器)==的工作原理,它们的源程序基本结构、工作原理、使用方法等。
  • 其他种类的编译器编写工具。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JAVA开发区

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值