第一章 编译原理绪论(3)——编译程序的逻辑结构

[XJTUSE编译原理] 第一章 引论 阅读详情

                                                                   图1编译程序的逻辑结构

其中,虚线表示信息流程,实线表示控制流程。

(1)、词法分析程序

       作为编译程序的输入,源程序仅仅是一个长长的字符串,扫描器将把这种形式的源程序转换为便于编译程序其余部分进行处理的内部格式。扫描器的工作任务如下:

①、识别出源程序中的各个基本语法单位(也称为单词或语法符号);

②、删除无用的空白字符、回车字符以及其它与输入介质相关的非实质性字符;

③、删除注释;

④、进行词法检查,报告所发现的错误。

(2)、语法分析程序

       语法分析程序以词法分析程序所输出的用内部编码格式表示的单词序列作为输入,其任务是分析源程序的结构,判别它是否为相应程序设计语言中的一个合法程序。为了完成这种分析,一般的途径是由语法分析程序试着为其构造一棵完整的语法树。如果这种尝试成功,就表明该输入串在结构上的确是一个合乎语法的程序,否则,源程序中就必然存在语法错误。通常,这种语法树实质上是一个有标记的有序树形结构。它的叶子上的标记是程序中的各个单词,而其内部结点(包括根结点)上的标记,则是程序设计语言的有关语法构造名,即语法范畴。

       应当指出,上面所谓为源程序建立一棵语法树,仅仅是就概念上而不是就逻辑上而言的。在实际进行语法分析的过程中,并不一定真正为源程序建立一个树形的数据结构,也不一定需要对整个源程序产生一棵语法树,而是参照建立语法树的思路一步一步地进行语法分析。总之,语法分析是一个相当复杂的过程。

(3)、语义分析程序

       对任何一种程序设计语言来说,它都具有两方面的特征,即语法特征和语义特征。前者用来定义语言各语法成分的形式或结构,后者则用来规定各语法成分的含义和功能,即规定它们的属性或在执行时应进行的运算或操作。因此,在编译过程中也需要对源程序进行语义分析。

      经语法分析后,虽然明确了它的组成结构,但并不知道其中所出现的一些量的属性和意义,更不知道各语法结构具有何种功能。但经过语义分析之后,就会得知各语法成分的含义和用途以及应进行的运算和操作。

      在进行语义分析的过程中,还应进行相应的语义检査,以保证源程序在语义上的正确性。

(4)、中间代码生成

      为了处理上的方便,特别是为了便于代码的优化处理,通常在语义分析后不直接产生机器语言或汇编语言形式的目标代码,而是生成一种介于源语言和目标语言之间的中间语言代码。目前常见的中间代码形式有逆波兰表示、三元式、四元式及树形结构等等。

(5)、代码优化程序

      为了得到质量较高的目标代码,常常在中间代码生成和目标代码生成两个阶段之间,插入一个代码优化的处理阶段。这里所说的目标程序的质量,通常有两个衡量的标准:一个是目标程序所占用存储空间的大小,即所谓空间指标;另一个是目标程序运行时所需的时间,即所谓时间指标。

(6)、目标代码生成程序

       目标代码生成程序以语义分析(或优化处理)所产生的中间代码作为输入,其功能是根据前面各阶段对源程序进行分析和加工所得到的有关信息,将中间代码翻译为机器语言或汇编语言形式的目标程序。如果对源程序的编译不设置中间代码生成阶段,则在语法和语义分析之后将直接产生目标程序。

通常,目标代码可采用如下三种形式之一:

①、具有绝对地址的机器指令代码。它们在内存中有固定的存放位置,编译程序在生成这种形式的目标代码之后,可立即投入运行。

②、汇编语言形式的目标程序。此种形式的目标程序须经汇编程序进行汇编,以产生相应的机器代码。

③、模块结构的机器指令。此种形式的目标程序一般具有浮动地址,须经连接程序将它们和另外一些运行子程序连接装配之后才能投入运行。

(7)、错误检查和处理程序

       程序人员在编写程序时,错误是难免的。一个仅能处理绝对正确源程序的编译程序并无实用价值。一个较完善的编译程序应具有广泛的程序查错能力,并能准确地报告源程序中错误的种类及错误出现的位置。同时,编译程序还应具有一定的“校错”能力。

(8)、信息表管理程序

       在编译过程中,需要经常收集、记录或查询源程序中所出现的各种量的有关属性(信息)。为此,编译程序需要建立或持有一批不同用途的表格(如常数表、各种名字表、循环层次表等等),通常将它们统称为符号表。

       在编译程序中,造表和查表的工作系由一组专用的程序来完成,它们被分别安插在编译程序的有关部分,这一组程序就组成了相应编译程序的表格管理程序。

 

 

编译原理学习周入门教程--(1)什么是编译程序? 在软考中些许的接触了编译原理这门课程,只是为了应付考试,就会那点可能考到的东西。这次编译原理老师认真负责的讲解了为期三个月的编译原理,据说是手把手教学,额,可惜我没有怎么去上课,,,自己查找资料自学了一下编译原理。  写在前面的话:                编译原理的内容比较多,本篇大概的陈述编译原理是神马东东,我的后续博客会继续细化。仅仅是入门的东西,也是初学者,理解不到位,请您多多指 阅读详情

相关推荐

Vscode+ROS/ROS2 开发调试基于ROS/ROS2应用环境配置

在ROS操作系统开发应用程序时,我们常常需要调试代码,验证程序的正确性。但是在用rosrun或者roslaunch启动节点后,若程序运行过程中发生错误而导致发生出错停止工作,这时候终端并不会输出具体的信息指出在何处发生了错误,具体错误的原因又是什么。往往仅仅是core dump 或者segmentation fault 等等一类的模糊提示。

Chasinglight的博客 5800

嵌入式工程师养成计划之——嵌入式软件工程师完全学习指南

本系列课程针对有意向学习嵌入式软件开发的童鞋,从零开始、深入浅出,内容涵盖:linux系统基础、shell、linux C编程、linux系统编程、网络编程、ARM体系结构及汇编语言、ARM裸机编程、linux系统移植、linux驱动开发等模块。分多个子课程逐步学习。本课程是全套课程的第0部(前传),目的是讲解我们的整个视频学习体系路线图,同时也会对大家学习路线的一个指引。

史上最全的Logisim存储系统实验教程(基于华中科技大学计算机组成原理实验)内赋源码下载

本博客是最全的最好的解释的华中科技大学计算机组成实验存储系统实验,本博客给出了电路实现,也给出了使用电路的原因有利于新手学习十分详细。并且内赋源码下载。

qq_62325622的博客 2万+

编译原理

一、 编译程序 1、 编译器是一种翻译程序,它用于将源语言(即用某种程序设计语言写成的)程序翻译为目标语言(即用二进制数表示的伪机器代码写成的)程序。后者在windows操作系统平台下,其文件的扩展名通常为.obj。该文件通常还要经过进一步的连接,生成可执行文件(机器代码写成的程序,文件扩展名为.exe)。通常有两种方式进行这种翻译,一种是编译,另一种是解释。后者并不生成可执行文件,只是翻译一条语句、执行一条语句。这两种方式相编译比解释运行的速度要快得多。 2、 编译过程的5个阶段:词法分析;语法分析;语义

代码人生的专栏 1648

SuperPoint + LightGlue实战:低纹理墙面重建保姆级教程(附完整代码)

本文提供了一份针对低纹理墙面三维重建的实战教程。通过详细解析SuperPoint与LightGlue的核心参数调优,指导读者如何有效提取并匹配低纹理目标的特征点,并结合COLMAP完成从稀疏到稠密的重建流程,最终实现高精度建模。

weixin_29034963的博客 223

C++ PCL点云处理实战专栏

工业级点云处理技术学习资源,涵盖电力、建筑、隧道等领域的实战案例。内容分为三阶段:代码原理(算法认知)、动态库(项目验证)和完整代码(定制开发)。

weixin_45196569的博客 1117

一张图了解编译程序-----第一章--引论--思维导图

引论 1.编译程序的概念及功能 1.1.为什么要用编译器 编译器中的编译程序要把高级语言翻译成机器语言,机器语言能运行 1.2.翻译程序 接受某种语言的源语言程序后,将它改造成另一种逻辑上等价的目标语言程序。 汇编程序:源语言为汇编语言,目标语言为机器语言的翻译程序。 1.3.编译程序 源语言为高级语言,目标语言是低级语言(汇编或机器语言)的翻译程序,而后者与前者在逻辑上是等价的。 宿主机:运行编译程序的计算机 目标机:运行编译程序产生目标代码的计算机 。 编译程序实现语言:用于生成编译程序的语言。 1.4

zijin-jdd的博客 4456

Android 14.0 系统设置显示主菜单添加屏幕旋转菜单实现旋转屏幕功能

在14.0的系统rom定制化开发中,在对系统设置进行定制开发中,有产品需求要求增加 旋转屏幕功能的菜单,就是在点击旋转屏幕菜单后弹窗显示旋转0度,旋转 90度,旋转180度, 旋转270度针对不同分辨率的无重力感应的大屏设备的屏幕旋转功能的实现, 接下来就来分析实现这个功能

安卓兼职framework和app工程师的博客 1311

编译原理(核心速成)

编译原理(混子速成): 1.DFA、NFA 2.LL文法、LR文法:FIRST、FOLLOW

Edward2022的博客 1万+

游戏玩家和排行数据抓取:使用 Python 爬虫抓取游戏中的玩家排名、角色数据和战绩

对于游戏开发者、分析师和玩家本身来说,抓取游戏中的玩家排名、角色数据和战绩信息是一项至关重要的任务。Python提供了强大的爬虫库和数据处理工具,可以帮助我们高效地抓取和分析游戏数据,为游戏分析师、开发者以及玩家本身提供有价值的数据支持。通过本篇博客,我们学习了如何使用Python爬虫技术抓取游戏中的玩家排名、角色数据和战绩。本篇博客将详细介绍如何使用Python编写爬虫来抓取游戏中的玩家排名、角色数据和战绩,并结合最新的技术来实现高效的数据抓取与处理。为了方便后续的数据处理,我们将抓取的数据保存到。

2201_76125261的博客 945

Python爬虫实战:全方位解析前程无忧(51job)职位详情爬取及反爬破解

平台规模:覆盖全国各行业、数百万条岗位信息。数据特点:职位描述详细,职位标签丰富。数据价值:支持招聘趋势分析、职业发展研究、薪资行情调研。推荐Python 3.10+,支持最新async特性与库兼容。

2201_76125261的博客 1487

编译原理 | 第一章课后习题答案

本文为编译原理(第三版)【清华大学出版社】第一章部分课后习题答案。本答案均截取自网络,如有错误,望指正

鷾 7016

【100%通过率】华为机试真题 Python 实现【对称美学】【2022.11 Q4 新题】

对称就是最大的美学,现有一道关于对称字符串的美学。 已知: 第1个字符串:R 第2个字符串:BR 第3个字符串:RBBR 第4个字符串:BRRBRBBR 第5个字符串:RBBRBRRBBRRBRBBR相信你已经发现规律了,没错! 就是第i个字符串=第i-1号字符串的取反+第i-1号字符串。取反即(R->B,B->R); 现在告诉你n和k,让你求得第n个字符串的第k个字符是多少。(k的编号从0开始)

MISAYAONE的博客 1万+

编译原理绪论

  之前一直在写程序,了解到运行程序的两个步骤:编译,运行。在Microsoft visual C++中编译和运行是分开的两部分。在DEV C++中集成为一个按键。在之前的印象中,编译就是寻找语法错误的过程。只要程序语法有错误,程序就无法通过编译。并会提示相应的信息,告诉写程序的人去哪里修改什么类型的错误。这学期开始,开设了编译原理课程。按照之前的习惯,通过写博客,及时梳理自己的思路并希望能在某些方面有所提高。下面开始吧!   学东西先问自己几个问题:什么是编译原理?为什么需要编译原理?怎么才能实现编译原理

gls_nuaa的博客 2509

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【编译原理】编译原理简单介绍

编译原理简单介绍编译原理简单介绍 什么叫编译程序 翻译程序 编译程序 翻译和编译的区别 编译的过程 词法分析 语法分析 语义分析和中间代码的产生 优化 目标代码生成 编译程序的结构 编译程序总框 表格与表格的管理 出错处理 遍 编译的前端与后端 编译前端 编译后端 编译程序的生成 编译程序的构造工具 T型图 用高级语言L1构造编译程序 编译程序的移植 自编译方式 构造工具什么叫编译程序翻译程序翻译程

Jackin 的博客 3万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

编译原理[笔记] 第一章-绪论

概论操作系统概念基本概念1.高级语言与低级语言2.几种重要程序3.源程序的翻译与运行4.源程序的解释执行5.“编译-解释执行”系统编译过程1.词法分析2.语法分析3.语义分析、生成中间代码4.代码优化 操作系统概念 基本概念 1.高级语言与低级语言 语言 包括 特点 低级语言 字位码、机器语言、汇编语言 与特定机器有关(可移植性不好),功效高,使用困难且易出错 高级语言 C语言...

Minamo的博客 1238

【学习笔记】编译原理——第一章 编译引论

系列文章目录 【学习笔记】计算机网络第——第一章 编译引论 文章目录系列文章目录前言程序设计语言与编译程序编译器的作用地位:编译程序的分类与执行:编译程序的表示编译程序的逻辑结构编译程序的结构与组织遍(Pass)一遍扫描的编译器两遍扫描的编译器思考题 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 程序设计语言与编译程序 源语言:用来编写源程序的语言,一般是汇编语言或高级程序语言

TommyGong08的博客 1939

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

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

weixin_62613321的博客 1479

编译原理(一)编译程序、解释程序、程序设计语言范型

编译原理的地位 是软件技术的基础 是计算机专业的基础课程,是专业必修课 编译原理的作用 编译原理是介绍如何将高级语言程序变换成低级语言程序的方法。 其理论基础坚实,其形式化系统不仅用于编译程序,还大量用于人工智能、多媒体技术、数据库等领域。 程序设计语言 低级程序语言 特定的计算机系统所固有的语言 即:机器语言、汇编语言 特点:执行效率高、编制效率低 高级程序语言 与自然语言比较接近的语言 过程式语言:C, Pascal, Fortran, ADA 对象式语言:Java, C++ 等 函数式语

star_of_science的博客 8088

编译原理及编译程序构造-绪论

编译原理及编译程序构造(张莉) 1 绪论 编译:把高级程序语言翻译成汇编语言或机器语言; 计算机组成五部分:输入、输出、控制器、运算器、存储器 源程序:程序语言处理系统的输入程序; 目标程序:能在计算机上执行的程序,程序语言处理系统的输出程序; 翻译程序:把某种语言程序变换为与之等价的别的语言程序的程序称为翻译程序或变换程序; 汇编程序:把汇编语言程序转换为机器语言程序的程序; 编译程序:把高级语言的源程序变换为语义等价的某种目标语言的程序; 解释程序:对源语言的代码或者编译得到的中间语言进行解释执行的程

weixin_45329799的博客 893

笔记-编译原理-第一章-第三章

编译原理学习笔记 第一章 引论 课程内容: 介绍程序设计语言 编译程序构造 的 基本原理 和 基本实现技术 。 1.1 什么是编译程序 翻译程序(Translator) 把某一种语言程序(称为 源语言程序) 等价 的转换成另一种语言程序(称为 目标语言程序) 的程序。 编译程序(Complier) 把某一种 高级语言程序 等价的转化成另一种 低级语言程序 (如汇编语言或机器语言程序)的程序。 ...

31415926535x的博客 3683

慕课编译原理(第一章.编译程序的生成)

慕课常州工学院.编译原理.第一章.引论.编译程序的生成0 目录1 引论1.5 编译程序的生成1.5.1课堂重点1.5.2测试与作业2 下一章 0 目录 1 引论 1.5 编译程序的生成 1.5.1课堂重点 1.5.2测试与作业 2 下一章 博客地址: ...

weixin_42473228的博客 864

编译原理第一章笔记 -- 绪论

三大经典系统软件:编译程序是系统软件中资格最老的成员之一。目前已经形成了一种系统化的编译理论与方法翻译程序(Translator)是一种程序,其输入是某种语言的一系列语句,而其输出则是另一种语言的一系列语句。编译程序(Compiler)是一种程序。他把用高级语言写的源程序作为数据接受,经过翻译转换,产生面向机器的代码作为输出。这当中代码还可能要有汇编程序或装配程序做进一步加工,得出目标程序,交由计算机执行。源语言要高级,目标语言要低级。本课程仅覆盖到了前三个阶段词法分析的任务是:输入源程序,对构成源程序的字

Qlz的博客 2190

编译原理翻译成四元式例题_编译原理 第一章 绪论

编译原理系列,是在学习本校 "编译技术" 这门课程时,所作记录,参考教材为 《编译技术基础教程》清华大学出版社和《程序设计语言编译原理》国防工业出版社(陈火旺编著)。1.1 编译程序简介计算机系统的语言分为三个层次:机器语言(Machine Language)难记忆、难编写、难阅读、难改错计算机可直接理解例:C706 0000 0002汇编语言(Assembly Language)引入助记符依赖特...

weixin_39772849的博客 1485

编译原理语义分析_编译原理 第一章 绪论

编译原理系列,是在学习本校 "编译技术" 这门课程时,所作记录,参考教材为 《编译技术基础教程》清华大学出版社和《程序设计语言编译原理》国防工业出版社(陈火旺编著)。1.1 编译程序简介计算机系统的语言分为三个层次:机器语言(Machine Language)难记忆、难编写、难阅读、难改错计算机可直接理解例:C706 0000 0002汇编语言(Assembly Language)引入助记符依赖特...

weixin_39731922的博客 496
上一篇: 第一章 编译原理绪论(2)——编译程序的八个部分
下一篇: 第一章 编译原理绪论(4)——编译程序的组织
Web客栈
博客等级 码龄18年 23粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值