编译原理

编译原理

标签(空格分隔): 编译原理


编译和解释

编译

整个程序全部翻译结束之后,程序才能开始运行;编译和运行是两个独立分开的阶段。

解释

不需要将分析和执行阶段分开,一边分析一边执行;更加适用于交互环境中


image.png

Java和早期语言的区别

image.png

Java处理环境既有编译程序,也有解释程序

0-3型文法

通过对产生式施加不同的限制,将文法分为四种类型

0型文法

image.png

1型文法(上下文有关文法)

image.png

另一种定义


image.png

2型文法(上下文无关文法)

image.png

3型文法(正规文法)
image.png

二义性文法

若一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义的

image.png

语言的二义性

这两个文法所产生的语言是相同的。跟文法的二义性不一样

语言先天二义性

如果产生上下文无关语言的每一个文法都是二义的,则说此语言是先天二义的。

有害规则,多余规则

有害规则

形如U→U的产生式。会引起文法的二义性

多余规则

指文法中任何句子的推导都不会用到的规则

  • 文法中某些非终结符(除了开始符)不在任何规则的右部出现,该非终结符称为不可到达
  • 文法中某些非终结符,由它不能推出终结符号串,该非终结符称为不可终止

规范推导,规范归约

推导

image.png

最右推导被称为规范推导
由规范推导所得的句型称为规范句型

归约

最左归约为规范归约

算符优先文法归约

???

LL(1)文法

image.png

φ 为空集

LL(1)文法的判别

计算同一个非终结符Select集看看有没有交集,有就不是,没有就是

非LL(1)文法到LL(1)的等价变换

以下两种方法变换形式不止一种,且变换后不一定就为LL(1),多尝试几个变换形式

提取公因子

image.png

image.png

消除左递归

image.png
image.png

内存分配

存储区布局

image.png

代码数据分开存储,为什么???

数据区类型

  • 静态存储分配
    静态数据区,编译时安排好数据存储空间,存储空间的分配在整个程序运行过程中有
    效(固定分配)
  • 动态存储分配,编译时无法完全确定存储空间大小
    • 栈区,存储局部变量和过程参数
    • 堆区,自由申请和释放存储空间,典型语句:C语言 malloc、面向对象语言 new

典型程序

void func() {
    char *a;----------局部变量,栈
    a=(char *) malloc(100); ------在堆中分配100个字节
    ……
    free(a); ------在堆中释放100个字节
}

离开func()之后,释放栈的空间

过程调用参数传递方式

  • 传值
  • 传地址:数据地址
  • 传过程(函数)参数:程序地址

栈式分配存储的实现

活动记录

一个过程的一次执行所需要的信息使用一个连续的存储区来管理,这个区(块)叫做一个活动记录

image.png

临时工作单元:计算时存放中间结果的临时空间
局部数据区:局部变量,空间大小固定。
控制信息:过程调用的链接以及返回地址等

image.png

四元式翻译

四元式(三地址码)

四元式形式 (op , arg1, arg2, result) 或 result:=arg1 op arg2

a:=t    ( := , t, --, a)
goto L    ( jump , --, --, L)

翻译

image.png

有常数的,要为常数创建一个临时变量


image.png

符号表

存放程序语言中出现的有关标识符的属性信息

F()
{         //第1层
   int a, b;
   {          //第2层
      float a, c;
      {         //第3层
         int b, d;
      }
   }
   {          //第2层
       int b, d;
   }
}
image.png
image.png

基本块优化

基本块

基本块:指程序中一个顺序执行的语句序列,只有一个入口语句和一个出口语句

DAG

有向无环图
一个基本块可以表达为一个DAG

例题

image.png
image.png

编译器后端

指令选择

CPU的指令集合具有冗余性,同一计算可用两个或多个不同的指令序列完成

寄存器分配

寄存器速度远远超过内存
尽量让变量的值或计算结果保留在寄存器中直到寄存器不够分配为止。
寄存器是紧缺资源
不再被引用的变量所占用的寄存器应尽早释放。提高寄存器的利用率。

指令调度

目标代码的指令顺序和中间代码的顺序未必一致,
指令执行顺序的调整称为指令调度
对具有流水线限制的体系结构,指令调度是必须的

分析题

正规式->NFA->DFA

正规式

正则表达式,表示正规集的工具

DFA

确定的有穷自动机


image.png

终态可以不为一,Z是终态集
初态唯一

NFA

不确定有穷自动机,初态不唯一,输入一个值,可能会有到多个状态

正规式->NFA

image.png

image.png

image.png

NFA->DFA

找出初态S,和其他空输入到达的状态
计算对于每个输入闭包,如果闭包集合出现新的,作为输入计算闭包
迭代直到没有新的闭包集合
换名,有原本的终态Z的闭包为终态

LL(1)

LL(1)文法

image.png

φ 为空集
就是说,同一个非终结符的产生式,它们的Select集不相交

LL(1)文法的判别

计算同一个非终结符Select集看看有没有交集,有就不是,没有就是

预测分析法

  • 判断文法是否为LL(1)文法
    求SELECT集,看看有没有相交

  • 构造预测分析表
    根据SELECT集填表,横坐标为输入,纵坐标为状态


    image.png
  • 分析句子,写出分析过程

    image.png

    栈内容是反着写的,最右推导(规范推导)

算符优先分析法

算符文法

image.png

就是说没有两个非终结符连在一起

算符优先分析

只考虑算符(终结符)的优先关系

算法优先关系

image.png

画一棵树,高层的优先级低,低层优先高,方向由左到右

算符关系是不对称的

  • X>Y 不一定有 Y<X
  • X=Y 不一定有 Y=X
  • 允许b>cc>b同时存在,但是不允许b>cb<c同时存在

算法优先文法

image.png

FIRSTVT(B)、LASTVT(B)

B产生式中的第一个非终结符、最后一个非终结符

过程

  • 计算FIRSTVT(B)、LASTVT(B)
  • 画算符优先关系表
    必须从左到右读
    有些算符是没关系,不能强加等于关系
    就算同一个算符,关系也不一定是相等
  • 分析一个句子
    列表:栈内容、优先关系、当前输入、剩余串、动作(移进、归约、接受)
    当优先关系由<变成>的时候归约,归约成X,留在栈内容里,然后优先关系忽略X,比较它的上一个字符。
    当优先关系编程=接受该输入

LR(1)

过程

  • 画出自动机
  • 画分析表
  • 分析句子(语义动作)
    Step 状态栈 符号栈 余留符号串 action goto
  • 分析句子语义
    步骤、动作、状态栈、语义栈(值栈)、符号栈、余留输入串
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,287评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,346评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,277评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,132评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,147评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,106评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,019评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,862评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,301评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,521评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,682评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,405评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,996评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,651评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,803评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,674评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,563评论 2 352

推荐阅读更多精彩内容