【编译原理】 CS143 斯坦福大学公开课 第一周:简介

2023-11-19

youtube : 1.1| Introduction to Compilers and interpreters

1.1| Introduction to Compilers and interpreters – 编译器解释器介绍

  • 两种主要的实现编程语言的方法 – 编译器和解释器

这个课程主要讲编译器,编译器通过产生汇编语言或者字节码等等,可以认为是off-line的,解释器则可以认为是on-line的。

  • 编译器和解释器开发历史

1954年,IBM开发了名为704的机器,用户购买该机器后发现软件成本远大于硬件成本。这让人们思考如何更容易的创造程序。

1953年,John Backus开发了Speedcoding,类似于我们今天说的解释器。不过有两个主要的缺点,第一是比直接编写的程序慢10-20倍,第二是占用了300字节的内存,虽然今天看来很小,但是这在当时相当于704机器的30%内存。因此并未流行。

Formulas Translated – 公式翻译项目或者叫做FORTRAN(原来是这么取的名字呀!)在1954年开始一直到1957年,不过有趣的是,他们之前以为只需要1年。到1958年,一半以上的代码都是FORTRAN编写的,非常流行。

  • FORTRAN 1

因此FORTRAN 1是第一种成功的高级语言(怪不得教材少不了它),并对之后的编译器产生了深刻的影响。编译器迷人的地方在于它结合了Theory – 理论 Practice – 实践。


FORTRAN 1包含了五个组成部分:

  1. Lexical Analysis – 词法分析
  2. Parsing
  3. Semantic Analysis – 语义分析
  4. Optimization – 优化
  5. Code Generation – 代码生成

1.2| Structure of a Compiler – 编译器结构

让我们用英语的方法对编译器结构进行简单介绍。

  • 第一步,认识单词 – 字母以上的最小单元

Lexical Analysis – 词法分析的目标是将程序的文本划分为“words”和“token”。

  • 第二步,明白句子的结构

Parsing = Diagramming Sentence – 图解句子,这里的“图”是一棵树

  • 第三步,明白意思,这对于编译器来说很困难

Semantic Analysis – 语义分析,编译器执行有限的语义分析来捕获程序的不一致之处(程序是否有歧义、语法错误)

  • 第四步,优化,这里有一点像编辑(看成把白话文写成文言文吧 /W\ )

Optimization – 优化,让程序运行更快,或者占用更少的内存等等。

  • 第五步,翻译成另一种语言(这不是英语白痴的我看懂句子经历的5步吗 (╯°Д°)╯︵ ┻━┻ )

Code Generation – 代码生成,翻译成机器码或者其他语言。


几乎每一个编译器都包含这5步,但是从上一节介绍的FORTRAN开始,这5步所占比重却发生了改变。

在这里插入图片描述

图片上面的是传统的编译器,语义分析比重较小,其他比较平衡。
图片下面的是现代编译器,代码优化比重非常大,语义分析比重一般,其他几步比重小。(过于真实)

1.3| The Economy of Programming Languages – 程序设计语言的经济性

为什么有这么多编程语言?

因为编程领域有很多特殊/矛盾的需求,很难设计一门语言完成所有情形。

比如:
科学计算(Scientific Computing) 比如 FORTRAN

  • 需要好的浮点运算(FP,floating point)的支持。
  • 需要好的数组、矩阵(Arrays)的支持。
  • 需要好的并行计算(parallelism)的支持。

商业应用(Business Applications) 比如 SQL

  • 需要可靠的持久化(persistence)的支持。
  • 需要好的报告(report facility)的支持。
  • 需要好的数据分析(data analysis)的支持。

系统编程(System programing) 比如 C\C++

  • 需要对资源控制(control of resource)的支持。
  • 需要好的实时约束(real time constraint)的支持。

为什么我们有新的编程语言?

对于一门编程语言,训练程序员使用它(Programmer training)是最大的成本。(即让程序员学习这门语言、让这门语言流行是最困难的)

结论:

  1. 广泛使用的编程语言的变化速度将会越来越慢。(就是说你呢,C)
  2. 开始一门新的编程语言将很简单。

于是,如果 productivity > training cost (生产率>学习成本) 那么就会去学习这门新语言。

  1. 编程语言将一次又一次的填补空白。
  2. 新的编程语言将和旧的编程语言非常相似(就比如Java vs C++)

什么是好的编程语言?

没有普遍接受的语言设计标准。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【编译原理】 CS143 斯坦福大学公开课 第一周:简介 的相关文章

  • [学习flex] 1.利用flex实现文字和谐小程序

    灵感来自于09平台dota1 游戏选手对喷时经常互飙国粹 问候对方全家 后来09平台进行了聊天和谐 不和谐的文字都会被 替换 今天我就就用flex实现类似的效果 话不多说上flex代码 脏话 printf 国粹 printf printf
  • 如何最高效实现手机~电脑端文件传输?

    平常使用电脑办公的时候 经常会有把手机上的文件传到电脑或把电脑上的文件分发给局域网 内网 的各个伙伴的情况 通常我们会选择使用QQ或微信的文件传输功能来实现 但是当文件比较大 比较多时 就无法发送了 再者每次通过文件助手来发送文件时 其本质
  • Win10使用.bat命令 获取本机设备信息/MAC信息/IP信息,转存为txt文件并保存至目标目录

    精简版 echo off title kotori poi color 0a echo 计算机S N码 gt dp0systemcheck txt wmic bios get serialnumber find v SerialNumber
  • 解析目标文件

    最近在看 程序员的自我修养 颇有体会 故化繁为简 整理书中部分内容 作为学习笔记 PC平台上流行的可执行文件格式主要是windows下的PE Portable Executable 和Linux下的ELF Executable Linkab
  • 【编译原理】LALR(1)语法分析方法(c++实现)

    前文回顾 编译原理 LR 0 分析方法 c 实现 编译原理 SLR 1 分析方法 c 实现 编译原理 LR 1 分析方法 c 实现 这几个程序的代码大部分是一样的 根据不同算法特点做了部分修改而已 代码 LALR 1 的代码就是在LR 1
  • 计算机单位及单位转换

    计算机单位及转换 一 位 计算机中表示信息的最小单位 表示一位二进制信息 以b表示 bit 0 1 一个字节8位 字节 计算机中处理信息的最小单位 以八位二进制信息 以B表示 1B 8b 一个整数4个字节 字长 一个字所包含二进制输的位数
  • 算法——排序——归并排序图解动画

    归并排序 简介 代码示例 排序过程 分解 合并 时间复杂度 空间复杂度 稳定性 简介 归并排序分为两部分 分解 合并 分解 归并算法会把数组分成两个长度相同的子数组 直到无法再分割 每个数组只有一个元素 此过程不消耗时间资源 对应的时间复杂
  • 如何用地址栏查看网页的源代码

    如何在地址栏里输入命令查看目标网页的源代码 输入 view source http www baidu com 当然这只是一个例子 view source 后面 跟完整的url地址
  • GnuTLS recv error (-110): The TLS connection was non-properly terminated问题的解决方案

    我在使用git clone branch 3 4 depth 1 https github com opencv opencv git命令的时候 遇到如下问题 fatal unable to access https github com
  • 汇编语言 第3版 王爽 检测点答案及详细解析

    第一章 基础知识 检测点1 1 1 1个CPU的寻址能力为8KB 那么它的地址总线的宽度为 13位 2 1KB的存储器有 1024 个存储单元 存储单元的编号从 0 到 1023 3 1KB的存储器可以存储 8192 2 13 个bit 1
  • Windows记事本编码反汇编分析

    转载自 liam page 网上有一个流传多年的段子 这个段子大致是说 若你在简体中文版本的 Windows 系统下 用系统自带的记事本程序 以默认的 ANSI 编码保存 联通 两个字 那么重新打开后 联通 二字就消失了 如果我没记错的话
  • uthash

    在软件开发中 不可不免的会使用到hash表 hash表的优点这里就不说了 以下介绍一个hash表的C实现 uthash是用宏实现的 使用的时候非常方便 只用包含uthash h即可 Uthash的三个数据结构 1 typedef struc
  • 字节和比特简单介绍

    字节 byte 字节为Byte 多数用B表示 字节为计算机中数据处理的基本单位 比特 bit 又称位 表示二进制位 为计算内部数据存储的最小单位 关系 1Byte 8bit 其他单位 1B Byte 字节 8bit 1KB Kilobyte
  • arm的多级流水线技术和和存储管理单元mmu

    流水线概念 流水线的概念与原理 处理器按照一系列步骤来执行每一条指令 典型的步骤如下 1 从存储器读取指令 fetch 2 译码以鉴别它属于哪一条指令 decode 3 从指令中提取指令的操作数 这些操作数往往存在于寄存器reg中 4 将操
  • Matlab2021a安装教程

    目录 一 资源文件 二 安装 一 资源文件 名称 Matlab R2021a 大小 17 11GB 语言 简体中文 安装环境 Win10 64位下载链接 https pan baidu com s 1OIyhX8kpVfydlo aOnbT
  • 【Python】代码实现LL(1),LR(1)上下文无关文法(Stack()类)

    任务要求 针对书上第三章中的表达式文法 采用LL 1 LR 1 进行分析 相关文法 需要进行消除左递归等操作 顺手分享一下课本资源好了 可能不是最新版 排版略有点别扭 后文的书上内容就是指这本书 编译原理 陈意云 文字版 提取码 e0ag
  • 语义分析- 符号表

    符号表 1 用来存储程序中的变量相关信息 类型 作用域 访问控制信息 2 必须非常高效 程序中的变量规模会很大 符号表的接口 ifndef TABLE H define TABLE H typedef Table t 数据结构 新建一个符号
  • linux下几种目标文件的分析

    本文中用到的命令 gcc c addvec c 生成可重定位目标文件addvec o readelf addvec o a 读取可重定位目标文件addvec o gcc O2 c main c 生成可重定位目标文件main o gcc st
  • 通过wireshark抓取telnet登陆密码

    笔者学校有一台设备 ip地址是 192 168 84 10 先打开wireshark捕获无线网卡 使用telnet登陆如图所示 按下回车 笔者这里输入的密码是 A603 现在回到wireshark停止抓包 并且在filter处输入如下的过滤
  • Go 程序编译过程(基于 Go1.21)

    版本说明 Go 1 21 官方文档 Go 语言官方文档详细阐述了 Go 语言编译器的具体执行过程 Go1 21 版本可以看这个 https github com golang go tree release branch go1 21 sr

随机推荐

  • R语言 write.xlsx() 写入同一excel,及同一sheet注意

    write xlsx x file sheetName Sheet1 col names TRUE row names TRUE append FALSE showNA TRUE 1 想要将data1写da xlsx的sheet1 data
  • spring boot 配合element ui vue实现表格的批量删除(前后端详细教学,简单易懂,有手就行)

    目录 一 前言 二 前端代码 2 1 element ui组件代码 2 2删除按钮 2 3 data 2 4 methods 三 后端代码 一 前言 研究了其他人的博客 找到了一篇有含金量的 进行了部分改写实现前后端分离 参考博主为小白Ra
  • 【下降算法】最速下降法、Newton法、共轭梯度法

    文章目录 1 一维搜索 2 最速下降法 最速下降法特征 最速下降法的优缺点 3 Newton法 算法基本思想 牛顿法和梯度下降法的效率对比 4 共轭梯度法 1 一维搜索 最优化问题一般选择某一组变量 然后在满足一定的限制条件下 求出使目标值
  • Servlet 和 Cookie-Session 学习笔记(基础)

    简单来说 是运行在服务器端的 Java 程序 它作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层 用处 使用 Servlet 您可以收集来自网页表单的用户输入 呈现来自数据库或者其他
  • PyCrypto,PyCryptodome, Python 调用密码学算法AES

    Crypto PyCrypto PyCryptodomeCrypto PyCrypto 参考网址附上 今天我真的也是很无奈了 想要做一个密码学的作业 需要用到pycrypto的包 但是安装完之后不能正常调用 就找到了PyCryptodome
  • fetch 服务器不响应,Fetch 常见的使用问题

    fetch的浏览器兼容 fetch默认不携带cookie fetch发送请求默认是不发送cookie的 不管是同域还是跨域 需要设置 fetch url credentials include 可以配置其credentials项 其有3个值
  • CAN FD基础

    CAN FD基础 一 CAN FD与CAN 2 0的区别 1 CAN FD的优势 该协议能够支持更高的速率 可以更快的刷写ECU 在单个数据帧内传送率可达64字节 避免了经常发生的数据分拆传输的状况 对汽车行业而言 CAN FD协议显得非常
  • CVE-2023-21839 Weblogic IIOP RCE复现

    漏洞描述 WebLogic是美国Oracle公司出品的一个application server 用于本地和云端开发 集成 部署和管理大型分布式Web应用 网络应用和数据库应用的Java应用服务器 WebLogic Server是一个基于JA
  • 微信图片上传 invalid credential, access_token is invalid or not latest

    这个问题可能是因为你部署的时候 起了多个进程 每个进程都去微信的服务器获取一次access token 只有最后一个获取到的access token才有效 比如 如果你用gunicorn去启django 并设置4个进程 那么你会发现 每上传
  • spring id,name

    转载于 https www cnblogs com 549294286 p 9947815 html 在BeanFactory的配置中 是我们最常见的配置项 它有两个最常见的属性 即id和name 最近研究了一下 发现这两个属性还挺好玩的
  • 如何覆盖上一次commit_Git如何在已有的 commit 上再次提交?

    在一些受管控的项目上 提交代码到 git 服务器后 还需要经过审核确认才正式合入版本 一般常用 gerrit 来进行审核确认操作 如果提交的代码审核不通过 需要再次修改提交 由于是修改同一个问题 我们可能不希望生成多个 commit 信息
  • Ceph bluestore中的缓存管理

    从15年3月接触Ceph分布式存储系统 至今已经5年了 因为工作的需要 对Ceph的主要模块进行了较深入的学习 也在Ceph代码层面做了些许改进 以满足业务需要 我们主要使用M版本 最近得闲 将过往的一些学习心得 改进以及优化思路记录下了
  • CDN基本工作过程

    看了一些介绍CDN的文章 感觉这篇是讲的最清楚的 使用CDN会极大地简化网站的系统维护工作量 网站维护人员只需将网站内容注入CDN的系统 通过CDN部署在各个物理位置的服务器进行全网分发 就可以实现跨运营商 跨地域的用户覆盖 由于CDN将内
  • firewalld 放行端口

    发现 telnet报错 telnet connect to address IP No route to host 于是检查目标主机的 firewalld 发先没有放行对应端口 在 firewalld 防火墙中放行端口 可以使用 firew
  • 微信小程序报错-errCode: -1

    1 报错截图 2 报错原因 Collection remove 需要小程序端2 9 4版本或之后的版本才支持 看了眼我的调试基础库 我的版本是2 8 1 所以 3 解决方法 点击右上角的详情 本地设置 调试基础库选择2 14 0
  • js数组相加相减函数

    数组相减 reduceArray arr1 arr2 for var i arr1 length 1 i gt 0 i var a arr1 i for var j arr2 length 1 j gt 0 j var b arr2 j i
  • Qt打开包含头文件以及打开函数声明和定义的方法

    当第一次拿到被人的程序的时候不知道如何向VS或者keil这样的编译器可以直接右键打开头文件 Qt可以通过 1 鼠标放在你需要打开的头文件或者函数声明的地方 如下图我鼠标放在MainWindow上 2 Ctrl 鼠标左键单击 或者使用快捷键F
  • python-算法时间复杂度和空间复杂度

    大O表示法 O 名称 举例 1 常量时间 一次赋值 logn 对数时间 折半查找 n 线性时间 线性查找 nlogn 对数线性时间 快速排序 n 2 平方 两重循环 n 3 立方 三重循环 2 n 指数 递归求斐波那契数列 n 阶乘 旅行商
  • html文本元素

    文章目录 h p span pre code 实体字符 strong i em del s h h head 标题 一共有六级标题 hKaTeX parse error Expected got EOF at end of input 6
  • 【编译原理】 CS143 斯坦福大学公开课 第一周:简介

    youtube 1 1 Introduction to Compilers and interpreters 1 1 Introduction to Compilers and interpreters 编译器解释器介绍 两种主要的实现编程