语法分析:定义语法规则,执行语法规则
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(语法分析生成器)==的工作原理,它们的源程序基本结构、工作原理、使用方法等。
- 其他种类的编译器编写工具。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人