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

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

                                                                   图1编译程序的逻辑结构

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

(1)、词法分析程序

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

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

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

③、删除注释;

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

(2)、语法分析程序

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

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

(3)、语义分析程序

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

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

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

(4)、中间代码生成

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

(5)、代码优化程序

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

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

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

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

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

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

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

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

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

(8)、信息表管理程序

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

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

 

 

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

相关推荐

ControlCAN.dll开发适配USBCAN_E/2E_U设备

摘要:本文提供了USBCAN_E/2E_U设备的配置指南:1)安装专用驱动;2)获取最新的ControlCAN.dll文件;3)修改VCI调用顺序,新增VCI_SetReference函数设置波特率;4)使用工具计算波特率配置值,并给出了常见波特率对应的代码参考值(如500K对应0x060007)。配置过程强调使用特定工具计算精确的波特率参数,并提供了相关软件下载链接。

weixin_43969033的博客 390

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

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

贝加莱Automation Studio 4.10安装保姆级教程:从官网下载到解决.Net 3.5报错

本文提供贝加莱Automation Studio 4.10的详细安装教程,涵盖从官网下载到解决.Net 3.5报错的全过程。特别针对工业自动化开发环境中常见的.Net Framework 3.5安装问题,提供多种经过验证的解决方案,包括控制面板安装、DISM命令离线安装和手动下载安装包等方法,帮助工程师顺利完成PLC开发环境的搭建。

weixin_30955617的博客 713

编译原理

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

代码人生的专栏 1648

中国IP发展之面面观

谢学军/邱善勤2006-1-25 9:29:28电子经理世界       IP远没有我们当初想象的那么简单   当SoC设计方法学刚刚传到国内的时候,学界为之欢呼雀跃,由于IP/SoC设计技术的使用,可以将发达国家用几年甚至十几年积累起来的设计技术直接为我所用,使中国的集成电路跳过漫长的积累阶段,迅速站到较高的起点上。因此在当时看来,IP/SoC设计技术是我国提升设计水平、发展

klxdmm305的专栏 1188

docker 安装oracle

本文介绍了使用Docker部署Oracle数据库的实践指南。主要内容包括:常用Oracle镜像的阿里云和华为云拉取地址,11g/12c/19c等不同版本的启动命令示例,以及连接数据库的基本信息。实战部分详细演示了Oracle 11g的安装过程,包括镜像拉取、容器启动、密码修改和数据库连接步骤,并通过Sql Developer和命令行两种方式创建用户。最后提到数据持久化的重要性,建议将数据库文件挂载到宿主机目录以防止容器删除导致数据丢失。文章提供了完整的操作命令和截图说明,适合需要快速部署Oracle测试环境

weixin_39766667的博客 373

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

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

zijin-jdd的博客 4456

【雷达仿真 | FMCW TDMA-MIMO毫米波雷达信号处理仿真(可修改为DDMA-MIMO)】

1、FMCW叫做调频连续波,调频连续波有步进调频连续波(SFMCW)、线性调频连续波(LFMCW),以及其他非线性调频连续波。LFMCW有锯齿波和三角波等等;锯齿波有恒定调制周期的锯齿波和非恒定周期的锯齿波。Introduction to mmwave sensing:FMCW radars.pdf和The fundamentals of millimeter wave sensors。2、MIMO是多输入多输出(Multiple input Multiple output),也就是多发多收。

【调皮连续波】雷达技术领域知识博主 1万+

编译原理(核心速成)

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

Edward2022的博客 1万+

49、非合作目标运动参数估计与状态滤波方法研究

本文研究了非合作空间目标的运动参数估计与状态滤波方法。通过分析目标的章动运动特性,建立了运动方程,并分别提出了基于最小二乘法的质心运动参数估计方法和旋转运动参数估计方法。同时,设计了误差状态卡尔曼滤波器(ESKF)用于姿态滤波和角速度估计,以提高估计精度。仿真实验验证了所提方法的有效性,能够准确估计目标的运动参数和状态信息,为在轨服务提供了技术支持。

gpt4scribbler的博客 89

深入解析雪球网股票行情数据爬取:基于WebSocket与API的实时数据获取技术实践

本文详细介绍了如何使用Python爬虫技术获取雪球网的股票行情数据,涵盖了WebSocket实时数据连接和RESTful API接口调用两种主要技术方案。完整的WebSocket客户端,支持实时行情订阅和数据处理功能丰富的API客户端,支持多种数据类型的获取数据存储和管理系统,使用SQLite进行数据持久化实时监控和预警系统,支持自定义预警规则技术指标计算,提供基本的数据分析功能。

2201_76125261的博客 1255

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

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

鷾 7016

OpenAI最强编程助手Codex:下载安装、使用指南(含使用方式、提示技巧、趋势)

OpenAI最近上线了最强编程Agent——Codex,一起来看看吧!

Code_流苏:在代码中寻诗意,在实践中觅真知 1万+

编译原理绪论

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

gls_nuaa的博客 2509

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

VC中sqlite的使用

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

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

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

Jackin 的博客 3万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

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

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

Minamo的博客 1238

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

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

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

余额充值