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


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

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(语法分析生成器)==的工作原理,它们的源程序基本结构、工作原理、使用方法等。
  • 其他种类的编译器编写工具。
posted on   JAVA开发区  阅读(81)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示