资料借鉴:
【编译原理】期末复习 零基础自学_哔哩哔哩_bilibili
编译原理笔记
第一章 引论
1.编译原理逻辑过程:
词法分析 语法分析 语义分析 中间代码生成 编译代码生成
2.词法分析
任务: 输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个单词符号。
依循的原则:构词规则
描述工具:正规式和有限自动机 FOR I := 1 TO 100 DO
保留字 标识符 等符 整常数 保留字 整常数 保留字
例如:
基本字(保留字:组成命令的关键字,系统定义好的单词):void,int,float 标识符 (用户定义的函数名、变量名等):jisuan,a,b,c,d,x,y 整常数:50 运算符:*, +, = 界限符(分隔开两部分的符号):{ } ;,( )
需要注意的是:
词法分析依照此法规则,识别正确的单词,并将其转换成统一规格(类号、内码),备用。 转换规则包括:对基本字、运算符、界限符的转换规则(有限的、可数的),对标识符的转换规则,对常数的转换规则等。
3.符号串:
符号串集合:
(注意空集和空串不同,空集是连空串都没有的集合)
4.闭包与正闭包:
和符号串的方幂不同,符号串的方幂运算是将自己重复n次,而∑的方幂运算属于多个符号串的乘积运算。
5.文法和语言:
(上下文无关文法 左部:非终结符 右部:出非终结符外还有终结符)
6.推导与约归
关键在于x中是否包含终结符和非终结符,句子属于句型的一种
对标识符的定义是用文法来表示的
7.递归规则
第二章 高级语言及其语法描述
1.常用的高级语言
FORTRAN 数值计算
COBOL 事务处理
PASCAL 结构程序设计
ADA 大型程序、嵌入式实时系统
PROLOG 逻辑程序设计
ALGOL 算法语言
C/C++ 系统程序设计
Java Internet程序设计
与机器语言或汇编语言比较,高级语言的优点: 较接近于数学语言和工程语言,比较直观、自然和易于理解; 便于验证其正确性,易于改错; 编写效率高; 易于移植.
2.语法
词法规则:单词符号的形成规则。 单词符号是语言中具有独立意义的最基本结构。一般包括:常数、标识符、基本字、算符、界符等。 描述工具:有限自动机
语法规则:语法单位的形成规则。 规定了如何从单词符号形成语法单位; 语法单位通常包括:表达式、语句、分程序、过程、函数、程序等; 描述工具:上下文无关文法
3.语义
对于语言来说,不仅要给出它的词法、语法规则,而且要定义它的单词符号和语法符号的意义。离开了语义的语言只是一堆符号的集合。各种语言中有形式上完全相同的语法单位,含义却不相同。 语义:对某种语言,定义一组规则,用它可以定义一个程序的意义,称为语义规则。
4.语法分析树:
语法树又叫做推导树
语法树每一个节点都是终结符或者非终结符
树根是语法开始符号
有分支的节点的一定是非终结符;反之不一定成立
最左推导:每次替换都是从最左边的非终结符进行替换
最右推导(规范推导):
最左推导和最右推导画出来的语法树是相同的
5.规范句型(右句型):规范推导过程中出现的举行
6.二义性:
7.句型的分析:
句型的分析就是识别一个符号串是否为某文法的句型,是某个推导的构造过程
可分为两大类,自顶向下和自底向上
所谓自顶向下分析法,是从文法的开始符号出发,反复使用各种产生式,寻找“匹配”于输人符号串的推导。自底向上的方法则是从输人符号串开始,逐步进行“归约”,直至归约到文法的开始符号。
从语法树建立的方式可以很好理解这两类方法的区别。自顶向下方法是从文法符号开始,将它作为语法树的根,向下逐步建立语法树,使语法树的末端结点符号串正好是输入符号串;自底向上方法则是从输人符号串开始,以它作为语法树的末端结点符号串,自底向上地构造语法树。
自底向上=>短语、简单短语、句柄:
子树末端结点符号串是相对于子树根的短语
简单子树的末端结点构成的符号串是相对于简单子树的短语(简单短语又叫做直接短语)
最左简单子树的末端节点组成的符号串是句柄
第三章 正规式和有穷自动机
1.正规式:
正规式和正规文法本质上是等价的
2.五元组
确定了有穷自动集之后,等于号后面最多有一个状态
终态一定要写成一个集合
3.有穷自动机
不确定的有穷自动机确定化:
第四章 First和Follow集与LL(1)文法
LL(1)文法:自顶向下请求
(一般做题时,小括号中的内容都是满足的)
可以对非LL(1)文法进行等价变换,但不一定都能变成LL(1)文法
直接消除左递归等于将左递归变成了右递归
递归下降分析技术:
表驱动分析技术: