【第一章】编译原理基础

编译器的结构

主要分为2个部分:分析(analysis)部分和综合(synthesis)部分

  • 分析部分:源程序分解为多个组成要素,并再要素上加上语法结构,创建一个中间表示,相关信息存入符号表。
  • 综合部分:根据中间表示和符号表构造目标程序。

    1.词法分析

    词法分析器读入字节流,将他们组成有意义的词素(lexeme)序列,以词法单元(token)的形式输出:

例子:

position = initial + rate * 60

词法分析后为一个词法单元序列

<id,1><=><id,2><+><id,3><*><60>

2.语法分析

语法分线器使用词法分析器生成的各个词法单元 创建树形的中间表示,累似一颗二叉树表的中间表示。

3.语义分析

使用语法树和符号表中的信息检查源程序是否和语言定义的语义一致。

  • 类型检查 (如数组下表必须为整数)
  • 类型和运算合法性检查
  • 自动类型转换 (如一个float*int)

4.中间代码生成

完成语法分析和语义分析,编译器生成一个类机器语言的中间表示。

意义:易于生成,容易被翻译成目标机器上的语言

常见的有 三地址代码(three-address code的中间表示。这种中间表示累死汇编语言的指令,每个指令有三个运算分量,每个运算分量像一个寄存器。

5.代码优化

机器无关的代码优化,可以改进中间代码,以便生成更好的目标代码(更短更快)

//三地址代码序列
    t1 = inttofloat(60)
    t2 = id3 * t1
    t3 = id2 + t2
    id1 = t3

//优化后
    t1= id3 * 60.0
    id1 = id2 + t1

6.代码生成

以源程序的中间表示作为输入,映射到目标语言(机器代码)。须要为程序中的变量选择寄存器或内存位置。合理分配寄存器以存放变量的值至关重要。

如使用寄存器R1和R2,完成中间代码翻译的机器代码:

    LDF R2, id3
    MULF R2, R2, #60.0
    LDF R1, id2
    ADDF R1, R1, R2
    STF id1, R1

7.符号表管理

符号表为每一个变量名字创建了一个记录条目,包括类型,作用域。对于过程名字,包括参数数量和类型,参数的传递方式,反回类型。

8.将多个步骤组合趟

在特定的实现中,多个步骤的活动被组合成一趟(pass)。每趟读入一个输入文件并产生一个输出文件。词法语法,语义分析组成一个pass,代码优化作为一个可选的pass,为特定目标机生成代码为一个pass。

通过把前端和不同的目标机后端结合,建立针对不同目标机的编译器。

9.编译器结构工具

实现一个完整的软件开发环境,包含语言编辑器,调试器,版本控制,程序秒暑期,测试管理等工具。

程序设计语言的发展

  • 第一代:机器语言
  • 第二代:汇编语言
  • 第三代:Fortran、C、C++、Java高级程序设计语言
  • 第四代:为特定应用设计的语言,如SQL,markdown

名词解释

  • 强制式语言:指名如何完成一个计算任务的语言(c,java)
  • 声明式语言:指名要进行哪些计算的语言(ML,Haskell等函数式语言)

针对计算机体系结构的优化

几乎所有的高性能计算系统都用到了两种技术:并行(Parallelism)内存层次结构(memory hierarchy)

并行性

  • 现代微处理器都采用了指令集并行。
  • 在指令集层次,多个运算可以被同时执行。
  • 处理器层次,同一个应用的多个不同线程再不同的处理器上运行。

内存层次结构

  • 几百字节的寄存器
  • 几K到几M的高速缓存
  • 几M到几G的物体寄存器
  • 几G的外部寄存器
时间: 2024-11-07 07:56:20

【第一章】编译原理基础的相关文章

Spark入门到精通视频学习资料--第一章、Scala基础与实践

第一章.Scala基础与实践(3讲) Scala编程语言抓住了很多开发者的眼球.如果你粗略浏览Scala的网站,你会觉得Scala是一种纯粹的面向对象编程语言,而又无缝地结合了命令式和函数式的编程风格. 根据David Rupp在博客中的说法,Scala可能是下下一代Java. Scala有几项关键特性表明了它的面向对象的本质.例如,Scala中的每个值都是一个对象,包括基本数据类型(即布尔值.数字等)在内,连函数也是对象.另外,类可以被子类化,而且Scala还提供了基于mixin的组合(mix

第一章:机器学习基础

第一部分:分类 本书前两部分主要探讨监督学习(supervisedieaming).在监督学习的过程中,我们只需要给定输入样本集,机器就可以从中推演出指定目标变量的可能结果.监督学习相对比较简单,机器只需从输入数据中预测合适的模型,并从中计算出目标变量的结果.      监督学习一般使用两种类型的目标变量:标称型和数值型.标称型目标变量的结果只在有限目标集中取值,如真与假.动物分类集合{爬行类.鱼类.哺乳类.两栖类.植物.真菌};数值型目标变量则可以从无限的数值集合中取值,如0.100.42.0

第一章 oracle数据库基础

第一章   oracle数据库基础 1.oracle简介-->数据库管理系统    1.1:数据库    1.2:全局数据库名    1.3:数据库实例    1.4:表空间    1.5:数据文件(扩展名:.dbf)    1.6:控制文件(扩展名:.ctl)    1.7:日志文件(扩展名:.log)    1.8:模式和模式对象2.连接oracle数据库    2.1 SQL*Plus工具    2.2 PL/SQL Developer工具3.配置oracle数据库    3.1 配置监听

操作系统思考 第一章 编译

第一章 编译 作者:Allen B. Downey 原文:Chapter 1 Compilation 译者:飞龙 协议:CC BY-NC-SA 4.0 1.1 编译语言和解释语言 人们通常把编程语言描述为编译语言或者解释语言.前者的意思是程序被翻译成机器语言,之后由硬件执行:而后者的意思是程序被软件解释器读取并执行.例如,C被认为是编译语言,而Python被认为是解释语言.但是二者之间的界限并不总是那么明显. 首先,许多语言既可以编译执行也可以解释执行.例如,存在C的解释器,和Python的编译

第一章. ActionScript 语言基础

第一章. ActionScript 语言基础 1.0. ActionScript 3.0 Cookbook 概述 1.1. 新建一个 ActionScript project 1.2. 自己定义应用程序属性 1.3. 在哪里写ActionScript 代码呢 1.4. 怎样跟踪信息 1.5. 处理事件 1.6. 响应鼠标和键盘事件 1.7. 算术运算 1.8. 逻辑运算 1.9. 运行条件语句 1.10. 运行复杂的条件语句 1.11. 某段时间反复运行一种操作 1.12. 长时间运行一个任务

回顾PHP:第一章:PHP基础语法

第一章:PHP基础语法 一.常量: 1.1.define()函数:define(‘R’,’5’,’true’); //R:常量名,5:常量值,true:常量名对大小写不敏感,为false时表示对常量名敏感. 1.2 const关键字:const关键字在定义常量时,只需要在后面跟上一个常量名称. 并且使用“=”赋值.Const R=6; phpinfo(); //phpinfo是一个函数(功能),这个函数(功能)会显示一个当前电脑(服务器)的详细的PHP信息 二.变量: 变量的几个特点: 1.x

编译技术图示(第一章 编译概述)

编译技术图示(第一章 编译概述) 源程序——>机器代码 分析(前端):分成小部分,找出小部分属性,包括:词法分析.语法分析.语义分析.中间代码生成 合成(后端),包括:中间代码优化.目标代码生成.目标代码优化 1.词法分析:识别.删除单词符号.词法检查 输入:源代码,输出:二元式<单词类别,单词属性> 2.语法分析 输出:抽象语法树(AST),从下向上看 3.语义分析 有限,大部分都是类型(运算)检查 4.中间代码生成 eg:x=a+b —> t1=a+b x=t1 为什么分为两个

大三开学第一天--编译原理和人工智能的初步入门

开学的第一天,学的都是入门,所以知识比较少,但是我还是会整理出来.因为是开学第一天,事情比较忙,知识没有得到很好的消化和了解,所以今天只作初步了解,过几天会找时间重新整理,具体化. 编译原理第一课: 编译器:编译器是一种语言处理器,可以将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”.通俗的讲,就是我们目前所使用的高级语言,如C++,java,都是易于人们理解和编写的.但是对于机器来说,只能看懂机器语言(即汇编语言,属于低级语言).所以,人们用高级语言写出来的代码,首先要经

python 学习第一章(python基础编程第二版)

第一章:基础知识 1.双斜线:实现整除的操作符 >>>1//2 0 就算是浮点数,双斜线也会执行整除 >>>1.0//2.0 0.0 2.幂(乘方)运算符:双星 >>>2**3 8 tip:可以用函数pow代替运算符,pow(2,3) 3.十六进制和八进制 十六进制:前面加0x,第一个是数字0 >>>0xAF 175 八进制:在3.0以上版本的python中加0o,首数字是0,第二个是字母o >>>0o10 8 4.

编译原理基础概念介绍

关于编译原理 语法树 句柄 简单短语 短语 的区分,通过两个例子来理解概念以及方法: 例子1——语法树 S -> a|b|(T)  T -> TdS|S Vt={a,b,d,(,)}.Vn={S,T},S是开始符 句型(Sd(T)db)是S的一个推导,其中___是句柄;____是最左素短语:____是该句型的直接短语,_____是短语.     素短语的概念:它是一个递归的定义,至少含有一个终结符,并且除它自身之外不再含任何更小的素短语,所谓最左素短语就是处于句型最左边的素短语的短语.而一个算