什么是编译程序(含翻译程序、解释程序和中间代码的定义介绍)

【编译原理】-- 第一章(翻译程序、编译程序、汇编程序、解释程序、编译过程概述) 系统学习编译原理,第一章:什么是编译程序、翻译程序、汇编程序、解释程序?编译过程的概述 阅读详情


要在计算机上执行用 高级语言(或汇编语言)编写的程序,必须通过特定的途径来进行,也就是要通过 翻译程序把用高级语言(或汇编语言)编写的程序翻译成为机器语言构成的程序,计算机才能执行。
在计算机上执行一个高级语言程序一般要分为两步:
第一步,用一个编译程序把高级语言翻译成机器语言程序;
第二步,运行所得的机器语言程序求得计算结果。

1.几种基本的翻译程序

1.1翻译程序

通常所说的翻译程序是指这样的一个程序,它能够把某一种语言程序(称为源语言程序或源程序)转换成另一种语言程序(称为目标语言程序或目标程序)
在这里插入图片描述

1.2汇编程序(Assembler)

如果源语言是某种汇编语言,而目标语言是某种计算机的机器语言,这样的一个翻译程序就称为汇编程序。
在这里插入图片描述

1.3编译程序(Compiler)

如果源语言是某种高级语言,而目标语言是某种低级语言(汇编语言或机器语言),这样的一个翻译程序就称为编译程序。在这里插入图片描述

1.4解释程序(Interpreter)

这是另外一种类型的翻译程序,在翻译过程它按照高级语言源程序在计算机上执行的动态顺序对源程序的语句逐条翻译(解释),边解释边执行直至结束,它不产生目标程序,它的工作结果就是源程序的执行结果,这样的一个翻译程序就称为解释程序。在这里插入图片描述

1.5总结

编译程序与其他几种翻译程序的区别在于源语言和目标语言的不同,编译程序的源语言是某种高级语言,功能是将其翻译成某种低级语言。
根据不同的用途,编译程序可进一步分类:
(1)诊断编译程序(Diagnostic Compiler): 专门用于帮助程序开发和调试的编译程序。
(2)优化编译程序(Optimizing Compiler): 着重于提高目标代码效率的编译程序。
(3)交叉编译程序(Cross Compiler): 如果一个编译程序产生不同于其宿主机的机器代码。
(4)可变目标编译程序(Retargetable Compiler): 不需重写编译程序中与机器无关的部分就能改变目标机。

2.编译程序的运行过程

编译程序的工作过程一般可以划分为五个阶段:
1.词法分析——2.语法分析——3.语义分析——4.中间代码产生、优化——5.目标代码生成。
在这里插入图片描述

2.1词法分析(Lexical analysis)

此阶段的任务是: 输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词。在词法分析阶段的工作中所依循的是语言的词法规则(或称构词规则)。描述词法规则的有效工具是正规式,识别词法规则的有效工具是有限自动机。在这里插入图片描述

2.2语法分析(Syntax Analysis)

此阶段的任务是:在词法分析的基础上,根据语言的语法规则,把单词符号串分解成各类语法单位(语法范畴),如“短语”、“子句”、“句子”(“语句”)、“程序段”和“程序”等。通过语法分析,确定整个输入串是否构成语法上正确的“程序”。
语法分析所依循的是语言的语法规则。语法规则通常用上下文无关文法描述。词法分析是一种线性分析,而语法分析是一种层次结构分析。
例如,在很多语言中,符号串 z:=X十0.618*Y 代表一个“赋值语句”,而其中的 X+0.618*Y代表一个“算术表达式”。因而,语法分析的任务就是识别 X+0.618*Y为算术表达式,同时,识别上述整个符号串属于赋值语句这个范畴。

2.3语义分析与中间代码产生(Semantic Analysis and Intermediate Generator)

此阶段的任务是:对语法分析所识别出的各类语法范畴,分析其含义,并进行初步翻译(产生中间代码)。
语义处理:
①变量的存储分配 ②表达式的求值 ③语句的翻译(中间代码的生成)
中间代码
中间代码是一种独立于具体硬件的记号系统。
常用的中间代码:三地址码(四元式、三元式、间接三元式),逆波兰式,树形表示等。所谓“中间代码”是一种含义明确、便于处理的记号系统,它通常独立于具体的硬件。这种记号系统或者与现代计算机的指令形式有某种程度的接近,或者能够比较容易地把它变换成现代计算机的机器指令。

2.4优化(Optimization)

优化的任务:对产生的中间代码进行加工变换,以期在最后阶段能产生出更为高效(省时间和空间)的目标代码。
优化的主要方面有:公共子表达式提取、循环优化、删除无用代码等等。有时,为了便于“并行运算”,还可以对代码进行并行化处理。优化所依循的原则:程序的等价变换规则。

2.5目标代码生成(Code Generation)

这一阶段的任务是:把中间代码(或经优化处理之后)变换成特定机器上的低级语言代码。
目标代码的三种形式:
1.汇编语言代码 2.能够立即执行的机器语言代码 3.待装配的机器代码模块

3.表格管理 (symbol-table manager)

编译程序在工作过程中需要保存一系列的表格,以登记源程序的各类信息和编译各阶段的进展状况。合理地设计和使用表格是编译程序构造的一个重要问题。在编译程序使用的表格中,最重要的是符号表。它用来登记源程序中出现的每个名字以及名字的各种属性。

4.出错处理(error handler)

一个编译程序不仅应能对书写正确的程序进行翻译,而且应能对出现在源程序中的错误进行处理。
源程序中的错误通常分为语法错误和语义错误两大类。
语法错误是指源程序中不符合语法(或词法)规则的错误,它们可在词法分析或语法分析时检测出来。例如,词法分析阶段能够检测出“非法字符”之类的错误;语法分析阶段能够检测出诸如“括号不匹配”、“缺少;”之类的错误。
语义错误是指源程序中不符合语义规则的错误,这些错误一般在语义分析时检测出来,有的语义错误要在运行时才能检测出来。语义错误通常包括:说明错误、作用域错误、类型不一致等等。

5.编译前端与后端

编译过程划分为前端和后端的目的:在多种源语言和多种目标语言的开发过程中,可以灵活搭配前端和后端,消除重复开发的工作量,提高编译系统的开发效率。
前端主要由与源语言有关但与目标机无关的那些部分组成。这些部分通常包括词法分析、语法分析、语义分析与中间代码产生,有的代码优化工作也可包括在前端。
后端包括编译程序中与目标机有关的那些部分,如与目标机有关的代码优化和目标代码生成等。通常,后端不依赖于源语言而仅仅依赖于中间语言。

在大模型压测中是测试单卡还是压测单个机器上所有卡? 本文详细分析了大模型服务压测中的两种关键方式:单卡压测和单机多卡压测。单卡压测主要用于评估特定GPU卡的理论性能上限,为调度策略提供基准数据;单机多卡压测则评估整机性能,验证多卡并行推理效果和卡间协同效率。文章还阐述了二者的递进关系,建议压测流程应从单卡到单机再到集群分阶段进行,并提供了具体方法和注意事项。最后强调两者缺一不可,前者提供调度依据,后者验证实际部署效果,共同为生产环境容量规划提供数据支撑。(148字) 阅读详情

相关推荐

TwinCAT3入门教程3——PLC程序变量定义和硬件IO关联

目录 1、IO输入输出变量定义和硬件关联 1.1 IO输入 1.2 IO输出 1.3 PLC变量和IO模块关联 1.4 测试IO输出点 2、伺服变量关联 1、IO输入输出变量定义和硬件关联 1.1 IO输入 添加全局变量IO_Global 变量定义 (*==========================================IO输入===============================================================*)

panjinliang066333的博客 1万+

编译原理入门-编译的全过程

编译就是把源代码变成目标代码的过程如果源代码在操作系统上运行:目标代码就是“汇编代码”。再通过汇编和链接的过程形成可执行文件,然后通过加载器加载到操作系统执行。如果源代码在虚拟机(解释器)上运行:目标代码就是“解释器可以理解的中间形式的代码”,比如字节码(中间代码)IR、AST语法树。

今天是几号的博客 5199

CCS20实战入门:第一个工程搭建示例

通过实际操作演示如何在ccs20中创建并配置首个开发项目,涵盖环境设置与基础调试步骤,帮助新手快速上手ccs20集成开发环境,提升嵌入式开发效率。

weixin_31185473的博客 888

什么是编译程序?

编译程序也叫编译系统,是把用高级语言编写的面向过程的源程序翻译成目标程序的语言处理程序。 编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析;语法分析;中间代码生成;代码优化;目标代码生成。主要是进行词法分析和语法分析,又称为源程序分析,分析过程中发现有语法错误,给出提示信息。 (1) 词法分析 编译程序也叫编译系统,是把用高级语言编写的面向过程的源程序翻译成目标程序的语言处理程

daniel_fei的博客 1万+

【PLC】三菱PLC控件安装疑难解析:Error Number:-119的全面解决方案

本文针对三菱PLC控件安装过程中常见的Error Number:-119错误,提供了深度解析与实战解决方案。该错误通常源于Windows系统权限限制或文件冲突。文章从理解错误本质入手,逐步介绍了以管理员身份运行、手动注册DLL文件、采用新版环境搭配旧版控件的黄金组合以及系统环境修复等四大招法,帮助用户彻底解决这一安装难题,确保工控软件稳定运行。

jj890的博客 498

PowerShell 7.x 替换默认 PowerShell 的四层系统级配置指南

PowerShell 是 Windows 系统管理与自动化的核心命令行环境,其版本演进带来跨平台、UTF-8 默认、.NET Core 运行时等关键升级。理解 PowerShell 5.1(基于 .NET Framework)与 PowerShell 7.x(基于 .NET 6/7/8)的本质差异,是解决执行策略失效、中文乱码、双击脚本拦截等高频问题的前提。技术价值在于统一编码行为、提升脚本可移植性,并支撑现代 DevOps 流水线;典型应用场景包括 Windows Terminal 默认 Shell 切换

weixin_33423874的博客 327

编译程序与解释程序区别

目录 前言 一、编译程序定义 二、解释程序定义 总结 前言 人物简介: 小盼:一名英语翻译 小平:不会英语的boss 事件: 小平准备去漂亮国看拜振华的(著名小丑)闹剧表演,但是他不会英文,只能花钱去请翻译。 小盼给出了两种解决办法: 1.购买一本小盼已经翻译完成的英语书,可以直接借用这本书进行简单日常交流。 2.带上小盼一起,外国人说一句,他可以翻译一句,转告给平总,实时翻译。 这让曾是程序员的小平似乎想到了,解释程序与编译程序........

不负韶话 4737

时间序列预测 — 预测数据集(负荷、风电、光伏、销量等)

GEFCom2014 “负荷预测数据”为竞赛的公共数据集,GEFCom2014 的负荷预测轨迹为概率负荷预测。

几度春风里的博客 2万+

什么是编译

什么是编译 编译就是将高级语言翻译成汇编语言或者机器语言的过程 为什么要编译 高级语言不能直接在机器上执行,因为机器只能理解0和1,但是我们又不太可能直接去编写汇编语言和机器语言,所以搭建一个桥梁来连接起高级语言程序员和机器. 编译过程 ...

阿伟のBlog 1万+

基于STM32L4XX 、HAL库的DRV8912QPWPRQ1步进电机驱动器驱动程序应用设计

define DRV8912_REG_PWM0 0x14 /* PWM发生器0占空比寄存器 */#define DRV8912_CMD_WRITE (0x00 << 15) /* 写操作 (RW = 0) */#define DRV8912_CMD_READ (0x01 << 15) /* 读操作 (RW = 1) */#define DRV8912_REG_OCP 0x0C /* 过流保护配置 *//* 读操作时,数据字段通常写0 */

PP_Cottage的博客 44

【局部规划模块轨迹优化算法】Teb_planner规划算法

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对****做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容由于ROS中的局部路径规划器比较老了,所以我推荐大家使用比较新的局部路径规划器teb_local_planner。teb_local_planner是基于弹性时间带碰撞约束的算法,算法将动态障碍物、运行时效、路径平滑性等约束做综合考虑,在复杂环境下有更优秀的表现。

qq_35635374的博客 953

翻译程序、编译程序和解释程序的区别和联系

最近在复习编译原理的时候,就在第一章,发现了一个很有趣的知识点。 翻译程序是指这样一个程序,它把一种语言所写的源程序翻译成与之等价的另一种语言的目标程序。 编译程序是一种翻译程序,它把高级语言所写的源程序翻译成等价的机器语言或汇编语言的目标程序。 解释程序也是一种翻译程序,它将源程序作为输入并执行它,边解释边执行。它与编译程序的主要区别在于在解释程序执行的过程中不产生目标程序,而是按照源语言

hola_f的博客 1万+

物联网竞赛单片机应用开发-项目汇总

物联网竞赛单片机应用开发-项目汇总

a6662580的博客 9003

翻译程序和编译程序

翻译程序和编译程序 机器语言对计算机的依赖性强、直观性差、编写程序工作量大、程序的结构也欠清晰。 翻译程序:所谓翻译程序是指这样一种程序,它把一种语言(称作源语言)所写的程序(源程序)翻译成与之等价的另外一种语言(目标语言)。其功能如图所示 如果源语言是高级语言,如Pascal,C,C++,Ada,Java语言等,目标语言是是诸如汇编语言或者机器语言之类的低级语言,那么称这样的翻译程序为编译程序,它所进行的转换工作如图 简单一点说就是,翻译程序就是将源语言写的源程序翻译成目标语言。 编译程序就是将高级语言翻

qq_45180475的博客 7002

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

编译程序与翻译程序、汇编程序的联系与区别,编译过程包括的几个主要阶段,解释程序与编译程序的区别...

1)简述编译程序与翻译程序、汇编程序的联系与区别。   翻译程序指把高级语言源程序翻译成机器语言源程序(目标代码)的软件。翻译程序有两种:一种是编译程序,它将高级语言源程序一次性全部翻译成目标程序,每次执行程序时,只要执行目标程序。另一种是解释程序,它的执行过程是翻译一句执行一句,并且不会生成目标程序。 编译程序是先完整编译后运行的程序,如C、C++等;解释程序是一句一句翻译且边翻译...

Evelina1121的博客 4697

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

编译原理 第一章: 编译概述 重点总结(翻译程序的过程,解释程序,编译程序的结构)

编译原理:第一章 编译概述 重点总结 包括了翻译程序,解释程序的说明,词法分析 语法分析 语义分析的概述

weixin_62613321的博客 1481

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

翻译程序、汇编程序、编译程序、解释程序的区别与联系

翻译程序、汇编程序、编译程序、解释程序的区别与联系 翻译程序是指把高级语言源程序翻译成机器语言程序(目标代码) 的软件。 翻译程序有两种:一种是编译程序,它将高级语言源程序一次全部翻译成目标程序,每次执行程序时,只需执行目标程序,因此只要源程序不变,就无须重新编译,请注意同一种高级语言在不同体系结构 下,编译成目标程序是不一样的,目标程序与体系结构相关,但仍不是计算机硬件能够直接执行的程序。 另一种是解释程序,它将源程序的一句语句翻译成对应的机器 目标代码,并立即执行,然后翻译下一条源程序语句并执行,直到所

weixin_44971189的博客 1万+

编译程序原理VS解释程序原理

引言    在备战软考的过程中在复习程序设计语言的时候遇到这么一个考点——解释和编译的原理,并且在做真题的过程中频繁的考查两者的区别,由于复习的不是很到位所以导致丢分,所以小编又重新复习了这一块的知识,现在将两者的区别总结出来和大家分享。    一、编译程序原理    首先让大家看一张来自百度百科上面的编译工作阶段的示意图                     这张图看

Jack 架构师之路 4545

编译程序,翻译程序,解释程序,目标程序解释

目标程序:                   又称为“目的程序”,是源程序被编译后能够被机器直接运行的机器码的集合,在计算机上以.obj作扩展名。由语言程序(编译程序,汇编程序,解释程序)处理成与之等价的机器码构成的,计算机能够直接运行的程序,叫做目标程序。 翻译程序                把一种程序转换成成另一种程序的程序。 编译程序               把用高级程序

u014541281的博客 5106

源程序、目标程序、汇编程序、编译程序、解释程序

源程序、目标程序、汇编程序、编译程序、解释程序之间的关系 翻译程序是这样一种程序:它能把用甲种语言编写的程序翻译成在功能上与之等价的用乙种语言编写的程序。我们把甲种语言称为源语言,把乙种语言称为目标语言。用源语言编写的程序称为源语言程序(简称源程序source program),而翻译后的用目标语言书写的程序称为目标语言程序(简称目标程序object program)。 如果源语言是汇编语言,目标

S.Mming 1万+

编译程序和解释程序的区别

编译程序和解释程序的区别 1.解释程序是高级语言翻译程序的一种,它将源语言书写的源程序作为输入,解释一句就提交给计算机执行一句,并不形成目标程序。 2.编译程序把高级语言源程序作为输入,进行翻译转换,产生出机器语言的目标程序,然后让计算机去执行这个目标程序,得到计算结果。 3.编译程序与解释程序最大的区别在于:前者生成目标代码,而后者不生成。此外,编译程序产生目标代码的执行速度比解释程序的执行速度要快(若遇到循环程序,则解释程序要不断地重复解释,而编译程序只需执行一次即可)。 ...

xiaotai1234的博客 1万+

翻译程序,编译程序,解释程序和汇编程之间关系

首先,翻译程序是指把一种语言编写的源程序翻译成与之等价的;另一种语言的目标程序。 翻译程序有两种:一种是编译程序,它将高级语言源程序一次性全部翻译成目标程序,每次执行程序时,只要执行目标程序。另一种是解释程序,它的执行过程是翻译一句执行一句,并且不会生成目标程序。编译程序是先完整编译后运行的程序,如C、C++等;解释程序是一句一句翻译且边翻译边执行的程序,如JavaScript、Python等。附C语言编译链接过程: 编译程序与汇编程序的区别:如果源语言是诸如C、C++、Java等“高级语言”,而...

上官土匪 2722

翻译程序的定义及其功能种类

(用高级语言(Java,C等)和汇编语言(mov,sub等)描述的程序,是不能被计算机直接执行的,还需要被翻译系统翻译成机器语言程序才能执行)

White--Night的博客 1851

连接程序,汇编程序,编译程序和解释程序

一.低级语言和高级语言 计算机硬件只能识别由0,1字符序列组成的机器指令,因此机器指令是最基本的计算机语言。用机器语言编制程序效率低,可读性差,也难以理解修改和维护。因此,人民设计了汇编语言,用容易记忆的符号代替0,1序列,来表示机器指令中的操作码和操作数。但汇编语言是面向机器的语言,其书写格式在很大程度上取决于特定计算机的机器指令。机器语言和汇编语言被称为低级语言。 人们开发了功能更...

weixin_42559560的博客 7178

翻译程序:将高级语言翻译成机器语言

翻译程序:是指的将高级语言翻译成机器语言的过程。 预备知识: 计算机的层次结构大致可以分为五层结构:高级语言、汇编语言、操作系统、机器语言、微指令系统。 翻译程序可以分为两种情况:编译程序和解释程序 编译程序 所谓编译程序,就是指将“源程序”一次性编译成“机器语言”,也即“可执行文件exe”。编译完成后,再执行该文件。例如C语言程序,就是先全部编译为机器语言再执行。(参看C语言的编译过程:预处理-编译-汇编-链接-装入) 解释执行 所谓解释执行,就是指对于“源程序”,翻译一条语句为机器语言

点典的博客 2万+

解释程序和编译程序的区别

解释程序和编译程序的区别   2011-09-12 20:53:31|  分类: 笔试面试 |  标签:解释程序  编译程序   |举报 |字号 订阅 以下部分转载自:http://blog.youkuaiyun.com/Sabrina0115/article/details/3970662 解释程序也称为解释器,它或者直接解释执行源程序,或者将源程序翻译成

yu132563的专栏 2万+
上一篇: 一种对图像加雾的算法(python实现)
下一篇: 货仓选址问题
Andy in boots
博客等级 码龄7年 73粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值