首页 > 其他分享 >编译原理导论

编译原理导论

时间:2022-12-14 10:46:55浏览次数:45  
标签:语法 语义 代码 中间代码 导论 词法 编译 原理 编译程序

1.1 什么是编译程序

  • 编译程序的必要性:计算机只能识别机器语言,但是编程语言有很多

  • 编译程序概念:

    最初定义:高级语言——>汇编语言或机器语言

  • 程序设计语言源程序的两种执行方式:

    翻译:翻译程序 → 低级语言(生成目标程序) → 执行 →c++/c/Pascal

    解释:解释程序,边解释边执行 → Basic/Lisp/Sql/Javasript

    Java → 编译程序 → Bytecode →解释程序

    共同点:都需要进行词法(词法分析要解决的问题是:如何将输入的字符序列转换成 token(词法序列) 序列)、语法、语义分析

    不同点:是否生成目标程序

  • 翻译程序的分类
    image

1.2.1编译过程概述

  • 五个阶段:词法分析、语法分析、语义分析和中间代码生成、优化、目标代码生成、表格管理和错误处理

①词法分析:

  • 任务:输入源程序(字符串形式)→根据词法规则时别单词
  • 单词内部表示形式:(二元式)类型 + 名称

②语法分析

  • 任务:输入单词字符串,根据语法规则识别出各类语法单位
  • 程序语言的语法单位:表达式(x,x*y)、语句(y = x + 1;)、程序等
  • 语法单位内部表示:语法树

③语义分析和中间代码的产生

  • 任务:输入语法,根据语义,分析含义,初步翻译,产生中间代码

  • 产生中间代码:易于优化,生成目标代码;形式有三元式、四元式、树结构等

    四元式:(op,num1,num2,res);

④优化

  • 任务:将中间代码转换成更加高效的代码
  • 目的:降低时间、空间复杂度

⑤目标代码的生成

  • 任务:由优化后的代码 → 机器能识别的代码,目标代码
  • 特点:依赖机器硬件系统;通常使用汇编语言作为目标语言的实现语言

⑥表格管理和出错处理

表格管理任务:前五个是基础,随时对符号进行管理,记录源程序中使用的名字

出错处理任务:检查词法、语法、语义的出错信息和位置,便于处理和恢复

1.2.1编译程序的结构

  • 编译程序的结构框图

  • 遍的概念

输入文件 → 遍 → 输出文件
分遍原则:①多遍:占用内存少,结构清晰;读写次数多,耗时。②一遍:栈用内存多,速度快。

标签:语法,语义,代码,中间代码,导论,词法,编译,原理,编译程序
From: https://www.cnblogs.com/N-lim/p/16981436.html

相关文章

  • 写过vue自定义指令吗,原理是什么?.m
    背景看了一些自定义指令的文章,但是探究其原理的文章却不多见,所以我决定水一篇。如何自定义指令?其实关于这个问题官方文档上已经有了很好的示例的,我们先来温故一下。除......
  • 编译原理基础知识02
    1、文法:用来描述表达式的规则2、上下文无关文法(四个要素组成)①一个终结符号集(或者叫词法单元)②一个非终结符号集(或者叫语法变量)③一个产生式集合:就是由非终结符到终结......
  • 编译原理知识点
    第四章作业及相关知识点一、第一题知识点1、消除左递归\(P→Pα|β\)等价于\(P→βP’(P’\)为新增加的非终结符\(),P'→αP'|ε\)2、判断一个上下文无关文法是\(LL(1......
  • DTCC2022预告 | 玖章算术叶正盛:程序员必须掌握的数据库原理
    12月15日,玖章算术CEO叶正盛受邀将参加第13届中国数据库技术大会(DTCC2022),带来《程序员必须掌握的数据库原理》的主题演讲,将于15日下午16点50在「云原生数据库场开发与实践......
  • 004 计算机五大组成(计算机组成原理)
    控制器、运算器、存储器、输入设备、输出设备计算机在模仿人控制器控制(控制各个零件),连接各个器官(零件)运算器控制器只做控制,为什么要控制,怎么控制,就是运算器在做处理算术运算......
  • Servlet原理
    Servlet的本质是一个Java接口,定义了一套处理网络请求的规范。最主要的是两个生命周期方法init()和destory(),以及一个处理请求的service()。因为处理一个网络请求,绕不开:初......
  • taro 编译报:模块引入顺序不一致报错
    前情最近在开发一个小程序项目,基于公司的技术栈是React,于是使用Taro来开发小程序。坑位在开发中经常性的报类似如下的错误,大致意思是说你引入模块的顺序在不同模块中......
  • Glibc---__gen_tempname函数原理分析学习
    引言__gen_tempname是Glibc库stdio.h头文件中生成临时文件名的函数,包含了相关临时文件名的生成逻辑,我们来一起分析一下临时文件名的生成过程。__gen_tempname函数参数说明ch......
  • 各种开源的交叉编译
    1v4l1.1hi3559av100交叉编译hi3559av100:exportPKG_CONFIG_LIBDIR=/opt/hisi-linux/x86-arm/aarch64-himix100-linux/aarch64-linux-gnu/lib64/./configure--hos......
  • C++ OpenSSL库编译及使用(VS2017,Python)
    文章目录​​1、简介​​​​2、下载openssl​​​​2.1下载openssl源码(github)​​​​2.2下载openssl源码(官网压缩包)​​​​2.3下载openssl二进制库​​​​2.4下载pe......