替换下面链接中的章节名称,可以直接查看课程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:

    -非确定有限自动机:

学堂在线_编译技术 学习笔记相关推荐

  1. 程序设计语言编译原理_编译原理学习笔记(二):高级程序设计语言

    高级程序设计语言 一.语言概述 1.1 语法 v.s. 语义 程序本质上是一定字符集上的字符串 语法:一组规则,用它可以形成和产生一个合式(well-formed)的程序 定义了程序的形式结构 定义语 ...

  2. videojs 卡顿_流媒体技术学习笔记之(四)解决问题video.js 播放m3u8格式的文件,根据官方的文档添加videojs-contrib-hls也不行的原因解决了...

    总结: 说明: 测试环境:本测试全部来自阿里云直播和OSS存储点播以及本地服务器直播和点播 播放器:VideoJs 直播: 1.阿里云直播,需要CDN设置HTTP头 2.本地直播需要设置直播访问服务器 ...

  3. easydarwin 安装_流媒体技术学习笔记之(十一)Windows环境运行EasyDarwin-阿里云开发者社区...

    流媒体平台框架下载安装 Github下载 解压安装 选择Windows 安装平台的安装包(下载解压) 把解压生成的文件夹重命名放在本地磁盘,我这里测试放在E盘: 介绍其中的来个批处理文件: start ...

  4. 学堂在线_大数据机器学习_小笔记

    学堂在线大数据机器学习小笔记 20220607 - https://www.xuetangx.com/learn/THU08091001026/THU08091001026/10333105/vide ...

  5. ssm 转发请求_千呼万唤!阿里内部终于把这份SSM框架技术学习笔记分享出来了...

    SSM SSM(Spring+SpringMVC+MyBatis)框架集由Spring.MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容).常作为数据源较简单的web项 ...

  6. 计算机编程导论python程序设计答案-学堂在线_计算机科学与Python编程导论_作业课后答案...

    学堂在线_计算机科学与Python编程导论_作业课后答案 答案: 更多相关问题 近代中国完全沦为半殖民地半封建社会的标志是:A.<马关条约>B.<辛丑条约>C.<凡尔赛和 ...

  7. python交互式程序设计导论答案第五周_学堂在线_计算机科学与Python编程导论_章节测试答案...

    学堂在线_计算机科学与Python编程导论_章节测试答案 更多相关问题 素描的三种表现形式是:(). 运行下列程序:Private Sub form_Click()For i = 1 To 2x = ...

  8. 知识图谱技术学习笔记

    知识图谱技术学习笔记 从一开始的Google搜索,到现在的聊天机器人.大数据风控.证券投资.智能医疗.自适应教育.推荐系统,无一不跟知识图谱相关.它在技术领域的热度也在逐年上升. 本文以通俗易懂的方式 ...

  9. 编译原理学习笔记20——符号表

    编译原理学习笔记20--符号表 20.1 符号表的组织与操作 20.2 符号表的内容 20.3 利用符号表分析名字的作用域 20.1 符号表的组织与操作 符号表 符号表的作用与组织 符号表的整理和查找 ...

最新文章

  1. Asp.net控件之异同:HTML控件与Web服务器控件
  2. 报错apachectl -t
  3. 被百度AI官方认证的大学,到底是什么水平
  4. python爬虫requests简单案例_python网络爬虫(三)requests库的13个控制访问参数及简单案例...
  5. 云计算介绍-1.2,IaaS\PaaS\SaaS比较
  6. python一行输出_#python版一行内容分行输出
  7. 返回固定页面的http服务器
  8. Frobenius companion matrix
  9. Linux快捷键及命令
  10. 如何利用labelImg软件标图
  11. 软件安全测试都有哪些内容,如何选择软件安全测评机构
  12. Linux之分析bin文件的10种方法
  13. HTML网页设计制作——响应式网页影视动漫资讯bootstrap网页(9页)
  14. Greedy method and ε-greedy method
  15. 分享Three.js 泛光(眩光)效果实现
  16. matlab实现手绘风格(简笔画风格、漫画风格)的曲线绘图
  17. JavaEE之--登录页面(用户名、密码、验证码)
  18. C++判断一个数字是几位数
  19. 淘淘商城第44讲——搭建搜索系统工程
  20. 广告召回率是什么意思_准确率、精确率、召回率的含义

热门文章

  1. C++设计模式——观察者模式
  2. KOL 是什么意思?
  3. 东华大学码蹄集oj赛第一周(三合一,竖直打印机,硬币塔,巨大的错误,三角形个数)
  4. MySQL备份与恢复-使用mysqldump进行数据的备份与还原
  5. BF发卡网开源源码 详细搭建教程
  6. 作图:plt.scatter() “x and y must be the same size“
  7. 梦幻模拟战更新服务器正在维护,《梦幻模拟战》10月25日更新维护公告
  8. macOS High Sierra 10.13.5 (17F77) 正式版 最新自带Clover v2.4k r4512黑苹果原版镜像
  9. 基于asp.net班费管理系统的设计与实现#毕业设计#课程设计
  10. 初试STM32基于Arduino的使用