编译原理-第二节(东南大学廖力老师)

编译原理-第二节(东南大学廖力老师)

     附:bilibili视频链接 https://www.bilibili.com/video/BV1cW411B7DW?p=38

一.语义分析和中间代码生成

      ***任务**
        对语法分析出的各类语法范畴,分析其含义,进行和初步翻译,产生介于源代码和目标代码之间的一种代码
      ***分为两阶段工作**
         -对每种语法范畴进行静态语义检查
         -若语义正确就进行中间代码的翻译
      ***中间代码形式**
          -四元式、三元式、逆波兰式

四元式

二.优化

  ***任务**
        对前面产生的中间代码,进行加工变换,以期在最后阶段能够产生更为高效的目标代码。
  ***原则**
       等价变换
  ***主要方面** 
       公共子表达式的提取、合并已知量、删除无用语句、循环优化等

三.目标代码生成

    ***任务** 
        把经过优化的中间代码转换成特定机器上的低级语言代码
    ***目标代码形成**
        -绝对指令代码:可立即执行的目标代码
        -汇编指令代码:汇编语言程序,需要通过汇编程序汇编后才能执行
        -可重定位指令代码:先将各目标模块连接起来。确定变量数、常数在主存中的位置,
          装入主存后才能成为可以执行的绝对指令代码

四.表格与表格管理

     ***表格的作用**
        -用来记录源程序的各种信息及编译过程中的各种状况
     ***与编译前三阶段有关的表格有**
        -符号表、常数表、标号表、分程序入口表、中间代码表  
        1)符号表
             用来登记源程序中的变量名、常量名、数组名、过程名等,记录他们的性质定义和引用情况

符号表
2) 常数表与标号表
常数表与标号表
3)入口名表
作用:登记过程的层号,分程序符号表入口等
入口名表
4)中间代码表
中间代码表

五.出错处理

   ***任务**
       如果源程序有错误,编译程序应设法发现错误,并报告给用户。
   ***完成**
       由专门的出错程序完成
   ***错误类型**
       -语法错误:在词法分析和语法分析阶段检测出来
       -语义错误:一般在语义分析阶段检测

六.遍

   遍:指对源程序或者源程序的中间结果从头到尾扫描一遍,并做有关的加工处理,生成新的中间结果或者目标代码。
         (注:遍与阶段的含义毫无关系)
   一遍扫描:

一遍扫描
多遍扫描:
-优点:节省内存空间,提高目标代码质量,使编译的逻辑结构清晰。
-缺点:编译时间较长
-注:在内存许可的情况下,还是遍数尽可能少些为好

1.3编译程序生成

*直接用机器语言编写编译程序
*用汇编语言编写编译程序(注:编译程序核心部分常用汇编语言编写)
*用高级语言编写编译程序(注:这是普遍采用的方法)
*自编译
*编译工具
  -LEX(词法分析器)与YACC(用于自动产生LALR分析表)
*移植
  同种语言的编译程序在不同类型的机器之间移植

1.4编译程序构造

  *在某机器上为某种语言构造编译程序要掌握以下三个方面
   -源语言
   -目标语言
   -编译方法

第二章 编译基础知识

一、高级语言

       程序语言是一个记号系统
        -语法
        -语义

二、语法

        -任何语言程序都可以看成是一定字符集(字母表)上的字符串
        -语法使得这串字符形成一个形式上正确的程序
        -语法=词法规则+语法规则

单词符号
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值