编译原理-简洁笔记 (一)

2023-11-03

编译原理

计算机程序语言及编译

  1. 高级语言
  2. 数学公式
  3. 和自然语言表达
  4. 汇编语言
    1. 引入主记符
  5. 机器语言
    1. 01组成的二进制形式
    2. 一般使用十六进制数表示[易于理解]
    3. 可以被计算机直接理解
  6. 三者之间的关系
  7. 高级语言->编译->汇编语言->汇编->机器语言
  8. 高级语言->编译->机器语言
  9. 源语言: 高级语言
  10. 目标语言:机器或者汇编语言

编译的本质就是一个翻译的过程

编译器在语言处理系统中的位置

源程序
|
预处理器
|
经过预处理的源程序
|
编译器
|
汇编语言程序
|
汇编器
|
可重定向的机器代码   [可重定向: 内存中起始地址是不固定的]
|
链接起/加载器  [加载器:可修改重定向地址] [链接器:连接库文件,解决外部内存地址,引用其他程序的文件]
|
目标机器代码  [绝对地址=起始地址+相对地址]

编译系统的结构

字符流
|
词法分析  [词法单元流] 
|
语法分析  [语法树]
|
语义分析  [语法树][独立于具体的编程语言]
|
中间代码生成器 [中间表示形式]
|
机器无关代码优化 [中间表示形式]
|
目标代码生成器 [目标机器语言]
|
机器相关代码优化 [目标机器语言]
  1. 组成
  2. 分析部分 [与源语言相关]
  3. 综合部分 [与目标语言相关]
  4. 还有一个就是中间阶段

词法分析

  1. 工作任务
    1. 从左向右逐行扫描源程序的字符
    2. 识别单词 [机内表示->词法单元形式表示,也就是token表示] [token类似于一个map键值对,多个token和其他字符组成token序列]
    3. 确定单词类型
  2. 单词类型 [种别码]
  3. 关键字 :一对一
  4. 标识符: 多对一
  5. 常量: 一对一
  6. 运算符:一对一
  7. 界限符:一对一

语法分析 [概述]

  1. 工作任务
    1. 处理词法分析器中输出的token序列 [token序列上述略有提到]
    2. 识别各类短语
    3. 构造语法分析树
  2. 文法
  3. D:声明语句
  4. T:类型
  5. DIS:标识符序列

语义分析[概述]

  1. 工作任务
    1. 收集标识符的属性信息
    2. 语义检查
  2. 属性信息
  3. 种属 [比如:数组,常数]
  4. 类型
  5. 存储位置和长度
  6. 作用域
  7. 参数和返回值信息
  8. 符号表
  9. 存储标识符的属性信息的一个数据结构
  10. 语义检查
  11. 变量或者函数未经声明就使用
  12. 变量或者函数重复声明
  13. 运算类型不一致 [隐式转换]
  14. 操作数和操作符之间的类型不匹配
    1. 数组下标非整数
    2. 非数组标量使用下标访问
    3. 非函数使用函数调用
    4. 函数参数或者参数类型不正确
    5. 函数返回值不正确

中间代码生成

  1. 源程序的中间表示形式

    1. 三地址码 [每个指令最多有三个操作数]
    2. 语法结构树/语法树
  2. 指令类型

    1. 赋值指令
    2. 赋值类型
    3. 条件跳转
    4. 非条件跳转
    5. 参数传递
    6. 函数调用
    7. 函数返回
    8. 数组引用
    9. 数组赋值
    10. 地址和指针操作
  3. 三地址表示形式

  4. 四元式 [最多三个操作数,一个操作符]

  5. 三元式

  6. 间接三元式

文法

  1. 字母表
  2. ∑ 表示
  3. 有穷符合集合 [符号: 字母,数字,标点符号 ]
  4. 字母表运算
  5. 相乘
  6. 幂次方
  7. 正闭包 [长度正数的符号构成的集合] [{a,b,c,d}+]
  8. 克林闭包 [任意符号串构成的集合,长度可以为0]
  9. 又穷的字符序列
  10. 串的运算
    1. 连接
    2. 空串
    3. 幂运算
  11. 文法定义
    1. 未使用尖括号括起来的表示基本符号
    2. 尖括号括起来的表示语法表示
  12. 文法的形式化定义
  13. 终结符集合: token
  14. 非终结符集合:语法变量
  15. 产生式集合:产生串的式子
  16. 开始符号:
  17. 产生式简写
    1. a->b,a->c [可以写成 a->b |c] b,c为a的候选式
  18. 符号约定
  19. 终结符的约定
  20. 非终结符的约定
  21. 文法符号串 [可以表示终结符或者非终结符]
  22. 推到和规约 [这是一个逆过程]
  23. 文法的分类
    1. 0型文法
    2. 无限制文法
    3. a->b ,a至少包含一个非终结符
    4. 1 型文法
      1. 上下文有关文法
      2. a->b,a符号的个数小于等于b符号的个数
      3. b不包含空串形式
    5. 2型文法
      1. 上下文无关文法
    6. 3型文法
      1. 正则文法
      2. 左线性
      3. 右线性

上下文无关文法分析树

  1. 根节点: 文法开始符号
  2. 内部节点: 产生式的a->b应用
  3. 叶节点: 可以是终结符或者非终结符
  4. 边缘或者树的产出: 从左到右排列叶节点
  5. 短语: 分析树中每棵子树的边缘组成短语
  6. 直接短语: 只有父子两代的节点的短语
  7. 二义性文法: 一个文法生成多个分析树

正则表达式

  1. 何为正则 RE
    1. 字符串匹配模式
  2. +出现1 多 次
  3. *出现0 1 多 次
  4. ?出现0 1 次
  5. $ 结束位置
  6. ()子表达式的开始和结束
  7. .除换行符之外的任意单字符
  8. ^开始位置
  9. |两项之间的选择
  10. {2}确定的两次
  11. {2,}至少两次
  12. {2,5}最少两次,最多五次
  13. \b边界单词
  14. \B非边界单词
  15. x|y两者中的一个
  16. [xyz]任意一个
  17. [^xyz]不匹配其中的任意一个
  18. [a-z]范围

有穷自动机

  1. 离散的输入输出
  2. 又穷的内部状态
  3. 转换图
  4. 初始状态 :start箭头指示
  5. 终止状态: 双圈 [可以有多个]
  6. 带有标记的箭头
  7. 分类
  8. 确定的有穷自动机 DFA
  9. 不确定的有穷自动机 NFA
  10. 由正则表达式构造确定有穷自动
  11. 先是RE->NDF
  12. 再是NFA->DFA
  13. r1r2串联
  14. r1|r2并联
  15. r1*克林闭包自我循环
  16. DFA的每一个状态都是NFA状态的集合
  17. 空边,直接进入下一个状态
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编译原理-简洁笔记 (一) 的相关文章

  • 【Python编程】删除列表中具有连续重复项的元素

    删除列表中具有连续重复项的元素 输入 1 1 1 1 1 1 2 3 4 4 5 1 2 输出 1 2 3 4 5 1 2 方法1 循环遍历 a 1 1 1 1 1 1 2 3 4 4 5 1 2 i 0 while i lt len a
  • 如何成为一名AI人工智能算法工程师?

    https www toutiao com a6707050434688713227 经常有朋友私信问 如何学python呀 如何敲代码呀 如何进入AI行业呀 正好回头看看自己这一年走过的路 进行一次经验总结 来看看你距离成为一名AI工程师
  • 时序预测:MATLAB实现时间序列回归之Bootstrapped测试

    时序预测 MATLAB实现时间序列回归之Bootstrapped测试 时序预测是实际应用中非常重要的任务 它在金融 企业经营 气象预测等领域都有广泛的应用 而时间序列回归也是时序预测中最为基础和实用的方法之一 本文将通过MATLAB对时间序
  • 【QT实战】第一章 QT实现画板工具的制作

    作者主页 凉开水白菜 作者简介 共同学习 互相监督 热于分享 多加讨论 一起进步 专栏目录 零基础学QT 文章导航篇 专栏资料 https pan baidu com s 192A28BTIYFHmixRcQwmaHw 提取码 qtqt 点
  • c++ 学习之 构造函数的使用规则

    上规则 默认情况下 c 编译器至少给一个类添加三个函数 1 默认构造函数 无参 函数体为空 2 默认析构函数 无参 函数体为空 3 默认拷贝函数 对其属性进行值拷贝 构造函数调用规则 如果用户定义有参构造函数 c 不再提供默认无参构造函数
  • android自定义数字键盘

    前言 最近需要做一个自定义的数字键盘 开始使用了下系统自带的KeyBoardView 但是发现UI效果不是很理想 最后还是自己画一个自定义键盘 这样在UI方面更加方便 先看效果图吧 思路 1 键盘4行 3列的布局分为12个单元格 6条直线分
  • 【神经网络学习】鸢尾花分类的实现

    目录 1 问题 2 问题解决思路 3 神经网络理论准备 4 Tensor Flow编程基础 5 鸢尾花分类神经网络实现 1 问题 鸢尾花分为 狗尾草鸢尾 杂色鸢尾 弗吉尼亚鸢尾 通过测量 花萼长 花萼宽 花瓣长 花瓣宽 这四个参数得出鸢尾花
  • PCB的3D模型的一些工具

    stp转 step的工具 免费将 STP 转换为 STEP ImageToStl
  • Windows 修改 cmd 命令行窗口字符编码

    查看当前 cmd 命令行窗口字符编码 已经是UTF 8 如果要修改为UTF 8 打开注册表 WIN R输入 regedit 回车 找到 HKEY LOCAL MACHINE SOFTWARE Microsoft Command Proces
  • WMS仓储管理系统在各种行业中,都有哪些作用

    由计算机控制的仓库管理系统的目的是独立实现仓储管理各种功能 收货 在正确的地点存货 存货管理 订单处理 分拣和配送控制 WMS仓储管理系统将关注的焦点集中于对仓储执行的优化和有效管理 同时延伸到运输配送计划 和上下游供应商客户的信息交互 从
  • python PDB调试

    1 python m pdb py 从第一行开始pdb调试 2 断点设置 在某一行插入 import pdb pdb set trace 3 常用命令 n ext 下一步 s tep 进入函数 c ontinue 继续到下一个断点 l is
  • 如何计算:结构体内存的大小(在结构体的考察中占据非常重要的地位)

    在之前的文章中 笔者就结构体的简单定义 初始化 等内容 进行了简单描述 但是 对于int double float char 等类型都有自己的大小 但是 对于一个结构体 它的大小该如何计算呢 确实是一个疑问 这个也是不少老铁 在刚学结构体时
  • Vinted、PoshMark、Carousell这些海外二手跨境电商平台如何运营?

    相信大家都知道 闲鱼 二手交易平台一般来说入驻成本低 运营操作简单 平台流量多 因此也非常适合小型卖家入驻 那么海外的 闲鱼 有哪些呢 如何运营 小编为大家找到了国外热门这些平台 有Vinted Facebook marketplace P
  • Excel实现数据项校验的功能---VBA的编写以及数据有效性的设置

    学习VBA的网址 VBA比较运算符 VBA教程 VBA在Excel中的应用 一 改变符合条件单元格的背景颜色 vba判断不是空 百度知道 测试文件 链接 http pan baidu com s 1o7QsCJo 密码 eni7 1 启用宏
  • 《精通direct3d图形及动画程序设计》学习(7)(2012年12月23日)

    8 1 深度测试 22 56
  • 峡谷之巅显示服务器更新,峡谷之巅更新最新资讯

    英雄联盟峡谷之巅第七赛季之前就结束了 目前这次赛季的结算奖励马上就要发放了 很多玩家还不清楚在哪领取 下面就来为大家详细的介绍一下领取地址 英雄联盟峡谷之巅第六赛季的奖励正式的公布了 这次只要排位赛胜场最多的2000名玩家就可以领取到奥术师
  • SpringMVC 中整合JSON、XML视图一

    原文地址 http blog csdn net ibm hoojo article details 6371647 SpringMVC中整合了JSON XML的视图 可以通过这些视图完成Java对象到XML JSON的转换 转换XML提供了
  • nrm安装后报错 require() of ES modules is not supported.

    报错如下 根据路径打开cli js文件 第九行使用 open 的是CommonJs 规范的包 现在 open v9 0 0 是 ES Module 版本的包 解决方法 npm install g nrm open 8 4 2 save
  • Java中的NIO和IO的比较

    java标准的I O中 提供了基于流的I O实现 即InputStream和OutputStream 这种基于流的实现以字节为单位处理数据 NIO在java 1 4中被纳入到了JDK中 与旧式的的基于流的I O相比 NIO是基于块的 以块为
  • java案例4:银行存取款的程序设计

    银行存取款的程序设计 用户在银行进行存款 取款 查询余额 编写一个账户类实现银行账户的概念 创建账户类的对象ba 假设账号为123456 初始余额为500元 实现向该账户存入1000元 再取出800元 分析 1 定义一个银行账户类 实现账户

随机推荐

  • Docker打包Springboot及查看日志的方法

    查看Docker容器中的日志信息 docker logs 容器名称 docker logs mynginx 打印容器中的日志信息并形成文件 docker logs mynginx cat 1 gt home myngnx log 进入容器操
  • 书写SQL必养成的好习惯

    前言 每一个好习惯都是一笔财富 本文分SQL后悔药 SQL性能优化 SQL规范优雅三个方向 分享写SQL的21个好习惯 1 写完SQL先explain查看执行计划 SQL性能优化 日常开发写SQL的时候 尽量养成这个好习惯呀 写完SQL后
  • 牛客刷题错题(二)——测试知识

    1 风险暴露又称风险曝光度 测量的是资产的整个安全性风险 某公司软件团队计划项目中采用20个可复用的构件 每个构件平均是100LOC Line of Code 源代码行数 本地每个LOC的成本是150元人民币 下面是该团队定义的一个项目风险
  • 印象笔记出现感叹号无法同步

    印象笔记出现感叹号无法同步 打开ie浏览器试试 我估计应该是和安全证书有关系 勾选客户端验证 点击局域网设置 勾选自动检测设置
  • 【多模态】20、OVR-CNN

    文章目录 一 背景 二 方法 2 1 学习 视觉 语义 空间 2 2 学习开放词汇目标检测 三 效果 论文 Open Vocabulary Object Detection Using Captions 代码 https github co
  • Java学习——面向对象编程思想

    目录 一 基本概念 二 面向对象与面向过程的区别 三 面向对象程序设计的类与对象 3 1 对象 3 2 类 四 面向对象的四大特征 4 1 抽象 4 2 继承 4 3 封装 4 4 多态 1 实现多态性的三种方式 2 重载 3 重写 4 接
  • JS 作用域,闭包,this

    作用域 闭包 this 3 1 面试题 1 this 的不同应用场景 如何取值 2 手写 bind 函数 3 实际开发中闭包的应用场景 举例说明 4 程序题 打印输出 for var i 0 i lt 10 i 1 setTimeout g
  • IO复用之select、poll、epoll

    select poll epoll区别 select poll epoll https www cnblogs com aspirant p 9166944 html select poll epoll整理 https www cnblog
  • picgo配置错误的记录,提示StatusCodeError:403 -<?xml version=xxxxxxxx>

    1 配置的时候 总是提示StatusCodeError 403
  • 自动化Ansible常见命令

    举个例子备份Cisco交换机配置 查看CPU 占用率的统计信息 display cpu usage 查看内存的使用状态 display memory usage 查看电源的工作状态 display power 查看接口是否工作在正常状态 d
  • Git windows环境下的安装

    一 下载地址 https git scm com download win 下载符合自己系统的版本 二 安装 注意安装在英文无空格的路径下 点击下载好的文件 1 选择安装选项 默认就好 点击next 2 安装完成后桌面鼠标右键出现git选项
  • 使用Element-UI的DateTimePicker组件报错:Cannot read property 'getHours' of undefined

    在使用 Element UI 的 DateTimePicker 组件时报错 TypeError Cannot read property getHours of undefined 具体错误如下 TypeError Cannot read
  • Python: 删除已安装的模块或包 及 python工具pip的安装和使用

    Python 删除已安装的模块或包 modules or packages 王志 新浪博客 http blog sina com cn s blog 4ddef8f80102v1p8 html 方法一 使用pip 安装pip wget ht
  • MakeItTalk: 让图像开口说话!

    点击上方 机器学习与生成对抗网络 关注 星标 获取有趣 好玩的前沿干货 文自 机器之心 参与 魔王 未经授权 不得二次转载 不仅让真人图像开口说话 油画 素描 漫画等都能动起来 给出一张面部图像和一段音频 能做什么 AI 有办法 比如让图像
  • 基于Pytest+Allure+Excel的接口自动化测试框架

    1 Allure 简介 简介 Allure 框架是一个灵活的 轻量级的 支持多语言的测试报告工具 它不仅以 Web 的方式展示了简介的测试结果 而且允许参与开发过程的每个人可以从日常执行的测试中 最大限度地提取有用信息 Allure 是由
  • 迪赛智慧数——折线图(基本折线图):历届冬奥会中国代表团奖牌榜

    效果图 数据源 静态数据 column 年份 金牌 银牌 铜牌 data 1992 0 3 0 1994 0 1 2 1998 0 6 2 2002 2 2 4 2006 2 4 5 2010 5 2 4 2014 3 4 2 2018 1
  • chrome浏览器无法打开网页怎么办

    chrome浏览器无法打开网页怎么办 第一步 找到 网络 鼠标右键点击 点 属性 进入 网络和共享中心 第二步 点击 internet选项 第三步 点击 连接 点击 局域网设置 第四步 代理服务器点击 取消 如图所示
  • 哈工大2021秋数据结构期末试题

    题目来源 https blog csdn net weixin 52027058 article details 121578432 已经获得该学弟转载的权限 初衷也是希望能够帮助到更多的同学
  • arcgis 发布wmts服务,弹出“服务器未做好发布准备”错误,解法。

    arcgis 发布wmts服务 总弹出 服务器未做好发布准备 之后 到arcgis server manage中找到服务发布工具启动 1 访问并登录管理器 http localhost 6080 arcgis manager 2 找到sys
  • 编译原理-简洁笔记 (一)

    编译原理 文章目录 编译原理 计算机程序语言及编译 编译器在语言处理系统中的位置 编译系统的结构 词法分析 语法分析 概述 语义分析 概述 中间代码生成 文法 上下文无关文法分析树 正则表达式 有穷自动机 计算机程序语言及编译 高级语言 数