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

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

                                                                   图1编译程序的逻辑结构

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

(1)、词法分析程序

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

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

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

③、删除注释;

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

(2)、语法分析程序

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

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

(3)、语义分析程序

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

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

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

(4)、中间代码生成

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

(5)、代码优化程序

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

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

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

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

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

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

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

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

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

(8)、信息表管理程序

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

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

 

 

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

相关推荐

Gem5模拟器,详解官网教程Event-driven programming(五)

Gem5模拟器,详解官网教程Event-driven programming、时间调度、如何自定义SimObject

qq_46675545的博客 2040

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

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

车载以太网抓包实战:100BASE-T1/1000BASE-T1高效监控方案解析

本文深入解析了车载以太网100BASE-T1/1000BASE-T1的高效抓包监控方案。针对智能汽车开发中的故障排查与性能测试需求,详细对比了交换机镜像、TAP分流和捕获模块三大主流方案的原理、核心优势与适用场景,并提供了基于实战经验的选型指南与操作避坑要点,帮助工程师精准定位网络问题。

desk3的博客 428

编译原理

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

代码人生的专栏 1648

Facebook登录协议逆向实战:从加密参数到完整流程解析(附Python代码)

本文深入解析了Facebook登录协议的逆向工程实战,详细拆解了从关键加密参数(如`lgndim`、`encpass`)定位到完整登录流程的实现。文章提供了Python代码示例,重点阐述了加密逻辑的深度解析、加密函数的本地化实现,并解决了Crypto.js异步调用等常见问题,为研究Web安全和协议逆向的开发者提供了实用参考。

metal的博客 1311

深入解析 ReDoc:从零构建高性能 API 文档的终极指南

ReDoc 是一个强大的开源工具,用于将 OpenAPI 规范转换为高质量、响应式的 API 文档。本文详细介绍了如何使用 ReDoc 构建和自定义 API 文档,包括如何编写支持 OpenAPI 的 API 注解、配置 HTML 页面以加载文档,以及如何利用 ReDoc 的高级功能进行定制。通过实例代码,您将学会如何灵活地展示 API 文档,提升用户体验。无论是初学者还是经验丰富的开发者,都能从本文中获得实用的技巧与方案,帮助快速搭建符合需求的 API 文档界面。

楠搏万的博客 4627

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

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

zijin-jdd的博客 4456

青藏高原冻土数据实战:如何用QGIS分析1961-2020年冻土退化趋势(附完整操作步骤)

本文详细介绍了如何使用QGIS分析1961-2020年青藏高原冻土退化趋势,包括数据准备、预处理、时空分析和模型验证等全流程操作。通过TTOP模型和Stefan方程,揭示了冻土退化的空间差异和海拔依赖性,为环境研究提供科学依据。

weixin_29276847的博客 127

编译原理(核心速成)

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

Edward2022的博客 1万+

Arcgis使用NDVI值遥感反演叶面积指数(LAI)

经验模型反演操作不难,主要是要多看文献,了解公式。本文中的公式我也不清楚是哪个作物的NDVI和LAI的关系(别人提供的),继续看文献整理吧。后续会在下面罗列更新一下主要公式。

所有专家都曾始于新手 8430

STM32CubeMX之定时器输入捕获

上一章介绍了STM32定时器的PWM输出功能,定时器的几个通道除了有输出功能外,还可以做输入用,可捕获信号的上升沿或下降沿,可以用于测量信号的频率、周期、占空比等。本篇文章将介绍用STM3...

zhang062061的专栏 1342

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

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

鷾 7016

软件产品国际化:前后端及App多语言版本解决方案(超详细实现过程)

多语言版本解决方案是应对全球化趋势的关键策略,它通过构建灵活且可扩展的架构,支持软件产品在不同语言和文化环境下的顺畅运行与展示。此方案涵盖了前端多语言界面实现、后端多语言数据处理及大数据环境下的多语言支持等多个层面,确保公司能够高效地推出适应全球用户多样化需求的软件产品。在前端多语言界面实现方面,解决方案采用了国际化与本地化的结合方法。国际化过程确保软件的功能和代码设计能够处理多种语言和文化习惯,而本地化则针对特定地区进行界面和内容的调整。

大模型大数据攻城狮的专栏 2754

编译原理绪论

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

gls_nuaa的博客 2509

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

数学建模模型总结

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

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

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

Jackin 的博客 3万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

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

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

Minamo的博客 1238

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

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

系列文章目录 【学习笔记】计算机网络第——第一章 编译引论 文章目录系列文章目录前言程序设计语言与编译程序编译器的作用地位:编译程序的分类与执行:编译程序的表示编译程序的逻辑结构编译程序的结构与组织遍(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、付费专栏及课程。

余额充值