学堂在线_编译技术 学习笔记

替换下面链接中的章节名称,可以直接查看课程PPT:http://www.xuetangx.com/courses/course-v1:XIYOU+20180208+sp/pdfbook/0/?viewer=true&file=/asset-v1:XIYOU+20180208+sp+type@asset+block/%E7%AC%AC2%E8%AE%B2-%E7%BC%96%E8%AF%91%E8%BF%87%E7%A8%8B%E6%A6%82%E8%BF%B02.pdf#zoom=page-fit&disableRange=true

1、基本概念:

  • 编译程序的5个过程:
    • 词法分析(扫描源程序,以空格为分界,识别出一个个单词或称符号);
    • 语法分析(单词合并为语法短语);
    • 语义分析(审查语义错误、收集符号类型信息)和中间代码生成(将源程序转换为系统内部识别形式,通常为四元式形式);
    • 代码优化(对中间代码进行优化使更高效,整合各个四元式);
    • 目标代码生成(把中间代码变换成特定机器上的指令代码,指令采用绝对地址或可重定位地址)。

    注:目标指令代码有多种形式:汇编语言形式(即生成汇编语言形式的代码序列,简单易读,便于交叉编译,缺点是还需再汇编一次到二进制可执行指令)、可重定位二进制代码形式(即二进制代码模块,经过模块首地址相对寻址、链接、同时将预定义stl和已编译模块载入,形成可直接运行的代码序列)、内存形式(是load-and-go模式,编译结束被立即在原编译器所在内存位置执行)。

  • 符号表作用:是语义分析、目标代码生成阶段地址分配的依据,检查标识符的上下文一致性和合法性需要用到;编译过程中给每个变量进行地址分配后,变量信息存储于符号表,后期获取变量存储地址需要查询符号表。
  • 错误检测:将源程序中的错误尽可能多的诊察、适当校正,使程序员及时发现错误,从而减少编译错误次数等。
  • 编译程序中语言分类:
    • 面向机器:机器语言、汇编语言;
    • 面向人类:高级程序设计语言、SQL查询语言、形式化描述语言(如,E:: = E ’ + ’ E | E ’ * ’ | id;)。
  • 编译程序按过程分类:
    • 翻译程序,是将一种语言(源语言)程序转换为逻辑上等价的另一种语言(目标语言)程序;
    • 编译程序,源语言是高级语言,目标语言是汇编语言或机器语言的翻译程序;
    • 汇编程序,源语言是汇编语言,目标语言是机器语言的翻译程序;
    • 解释程序,源语言程序作为输入,但不产生目标程序,而是边解释边执行源程序本身。
  • 文法,描述了语言的规则,用以判定一个字符串是不是一个结构合法的程序,包括词法规则(描述语言单词符号构成约定,如标识符、常数、运算符,描述工具通常为正规文法包括正规式、有限自动机)和语法规则(描述语法单位的构成约定,如表达式、语句、函数、过程等,描述工具通常为上下文无关文法)。
    • 字母表∑(是符号元素的非空集合)、符号(字母表 中的元素)、符号串(字母表中符号的有穷序列)。空符号串即不含任何符号的符号串,用ε表示。符号串可以求长度、可以连接、求幂,符号串集合可以有求乘积(类似两个集合任意元素连接)、求幂、闭包(闭包是所有集合的幂求并集,实际意义是符号串集合能产生的所有可能符号串,分非空正则闭包A+和闭包A*)运算。
    • 上下文无关文法:规则也称产生式,是一个有序对(A,α),可写为A→α或A::=α,它定义了语言语法单位结构的规则,符号“→”表示“定义为”或“由……组成”;推导,用产生式右边成分反复替换左边成分的过程,它最终能还原句子;语法树,是语法结构的图形表示,用以展示句子的语法结构、推导过程。
    • 编译程序中的文法:是一个四元组,G[S] = (Vn,Vt,P,S),Vn是非空有穷集,其每个元素称为非终结符,该符号仅在产生式的左部出现;Vt中每个元素称为终结符,在产生式中仅在右侧出现的符号;Vn与Vt的交集是空集;他们的并集中的每个符号都称为文法符号;P是产生式的有穷集合,A∈Vn;S是文法的开始符号(根符号,识别符号),S∈Vn。 注:G[S]可简写为G,左部相同的产生式可以“|”合并右部。
    • 推导与归约:推导→向右,归约→向左,广义推导(允许左右相等)标注*,连续(多次推导)推导标注+。规范推导(最右推导),右部为终结符号串或空符号串,其所得句型称为规范句型(最右句型),与其对应的归约为规范归约(最左归约)。先替换右侧非终结符。
      在这里插入图片描述
    • 句型和句子:产生式中,α限定为终结符,则为句子;α不限定,则为句型。语言,即文法G[S]可产生的所有句子的集合,记为L(G[S])。
      在这里插入图片描述
    • 等价文法:不同文法,但产生的句子集合相同。
    • 递归文法和递归产生式:产生式左右两部能相同,可实现用有穷的产生式来描述无穷的语言。
    • 短语、直接短语和句柄:最左直接短语叫句柄。在这里插入图片描述
    • 文法的二义性:文法中一个句子对应两棵不同的语法树。文法的二义性
  • 词法分析
    • 确定的有限自动机(Determnistic Finite Automata):正则文法所对应的语言可以用状态转换图来识别,是对状态转换图进一步形式化的结果。(状态转换图是有限自动机的一种表示形式。)
      在这里插入图片描述
  • 状态图构造DFA
    在这里插入图片描述
  • 用矩阵表示DFA:
    在这里插入图片描述
    -非确定有限自动机:在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
发布了16 篇原创文章 · 获赞 4 · 访问量 5873

猜你喜欢

转载自blog.csdn.net/qq_35345719/article/details/87930285