当前位置:首页 » 编程软件 » 编译器构造

编译器构造

发布时间: 2022-01-08 07:55:17

‘壹’ 编译程序的构造需要掌握哪些原理和技术

内容包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成。

‘贰’ java接口编译器会产生构造方法吗

如果没有写
构造函数
,则系统会自动生成构造函数,
如果自己添加构造函数,无论有参数或是没参数,
默认构造函数
都将无效。
你可能是把书上的无参构造函数当成默认构造函数了。

‘叁’ 编译器的结构

没听过有数据结构的编译器

数据结构只是对数据的算法分析等....一般市面上的数据结构的书是以c/c++语言来表示的...

你去下载vc或tc就可以了..

‘肆’ 编译器的组成及各部分的功能及作用

1. 词法分析 词法分析器根据词法规则识别出源程序中的各个记号(token),每个记号代表一类单词(lexeme)。源程序中常见的记号可以归为几大类:关键字、标识符、字面量和特殊符号。词法分析器的输入是源程序,输出是识别的记号流。词法分析器的任务是把源文件的字符流转换成记号流。本质上它查看连续的字符然后把它们识别为“单词”。 2. 语法分析 语法分析器根据语法规则识别出记号流中的结构(短语、句子),并构造一棵能够正确反映该结构的语法树。 3. 语义分析 语义分析器根据语义规则对语法树中的语法单元进行静态语义检查,如果类型检查和转换等,其目的在于保证语法正确的结构在语义上也是合法的。 4. 中间代码生成 中间代码生成器根据语义分析器的输出生成中间代码。中间代码可以有若干种形式,它们的共同特征是与具体机器无关。最常用的一种中间代码是三地址码,它的一种实现方式是四元式。三地址码的优点是便于阅读、便于优化。 5. 中间代码优化 优化是编译器的一个重要组成部分,由于编译器将源程序翻译成中间代码的工作是机械的、按固定模式进行的,因此,生成的中间代码往往在时间和空间上有很大浪费。当需要生成高效目标代码时,就必须进行优化。 6. 目标代码生成 目标代码生成是编译器的最后一个阶段。在生成目标代码时要考虑以下几个问题:计算机的系统结构、指令系统、寄存器的分配以及内存的组织等。编译器生成的目标程序代码可以有多种形式:汇编语言、可重定位二进制代码、内存形式。 7 符号表管理 符号表的作用是记录源程序中符号的必要信息,并加以合理组织,从而在编译器的各个阶段能对它们进行快速、准确的查找和操作。符号表中的某些内容甚至要保留到程序的运行阶段。 8 出错处理用户编写的源程序中往往会有一些错误,可分为静态错误和动态错误两类。所谓动态错误,是指源程序中的逻辑错误,它们发生在程序运行的时候,也被称作动态语义错误,如变量取值为零时作为除数,数组元素引用时下标出界等。静态错误又可分为语法错误和静态语义错误。语法错误是指有关语言结构上的错误,如单词拼写错、表达式中缺少操作数、begin和end不匹配等。静态语义错误是指分析源程序时可以发现的语言意义上的错误,如加法的两个操作数中一个是整型变量名,而另一个是数组名等。

‘伍’ 为什么一个类没有构造函数时编译器会提供一个默认构造方法

因为一个对象要被创建出来,就必须调用构造函数,如果类里面没有显式定义构造函数,就会调用默认构造函数,否则该对象不能被构造出来

‘陆’ gcc的结构

GCC的外部接口长得像一个标准的Unix编译器。使用者在命令列下键入gcc之程序名,以及一些命令参数,以便决定每个输入档案使用的个别语言编译器,并为输出程序码使用适合此硬件平台的组合语言编译器,并且选择性地执行连接器以制造可执行的程序。
每个语言编译器都是独立程序,此程序可处理输入的原始码,并输出组合语言码。全部的语言编译器都拥有共通的中介架构:一个前端解析符合此语言的原始码,并产生一抽象语法树,以及一翻译此语法树成为GCC的暂存器转换语言〈RTL〉的后端。编译器最佳化与静态程序码解析技术(例如FORTIFY_SOURCE,一个试图发现缓冲区溢位〈buffer overflow〉的编译器)在此阶段应用于程序码上。最后,适用于此硬件架构的组合语言程序码以Jack Davidson与Chris Fraser发明的算法产出。
几乎全部的GCC都由C写成,除了Ada前端大部分以Ada写成。 前端的功能在于产生一个可让后端处理之语法树。此语法解析器是手写之递归语法解析器。
直到2004年,程序的语法树结构尚无法与欲产出的处理器架构脱钩。而语法树的规则有时在不同的语言前端也不一样,有些前端会提供它们特别的语法树规则。
在2005年,两种与语言脱钩的新型态语法树纳入GCC中。它们称为GENERIC与GIMPLE。语法解析变成产生与语言相关的暂时语法树,再将它们转成GENERIC。之后再使用gimplifier技术降低GENERIC的复杂结构,成为一较简单的静态唯一形式(Static Single Assignment form,SSA)基础的GIMPLE形式。此形式是一个与语言和处理器架构脱钩的全域最佳化通用语言,适用于大多数的现代编程语言。 GCC后端的行为因不同的前处理器宏和特定架构的功能而不同,例如不同的字符尺寸、呼叫方式与大小尾序等。后端接口的前半部利用这些讯息决定其RTL的生成形式,因此虽然GCC的RTL理论上不受处理器影响,但在此阶段其抽象指令已被转换成目标架构的格式。
GCC的最佳化技巧依其释出版本而有很大不同,但都包含了标准的最佳化算法,例如循环最佳化、执行绪跳跃、共通程序子句消减、指令排程等等。而RTL的最佳化由于可用的情形较少,且缺乏较高阶的资讯,因此相比较起来,增加的GIMPLE语法树形式,便显得比较不重要。
后端经由一次重读取步骤后,利用描述目标处理器的指令集时所取得的信息,将抽象暂存器替换成处理器的真实暂存器。此阶段非常复杂,因为它必须关注所有GCC可移植平台的处理器指令集的规格与技术细节。
后端的最后步骤相当公式化,仅仅将前一阶段得到的汇编语言代码借由简单的子例程转换其暂存器与内存位置成相对应的机器码。

‘柒’ 程序编译器的体系结构适合使用什么体系结构

计算机体系结构(ComputerArchitecture)是程序员所看到的计算机的属性,即概念性结构与功能特性。按照计算机系统的多级层次结构,不同级程序员所看到的计算机具有不同的属性。
一般来说,低级机器的属性对于高层机器程序员基本是透明的,通常所说的计算机体系结构主要指机器语言级机器的系统结构。
经典的关于“计算机体系结构(computerarchitecture)”的定义是1964年C.M.Amdahl在介绍IBM360系统时提出的,其具体描述为“计算机体系结构是程序员所看到的计算机的属性,即概念性结构与功能特性” 。

‘捌’ 实现一个简单的编译器(基本结构即可),要具备哪些知识,可以参考那些书

编程是一点要会的

‘玖’ 编译器构造这本书怎么样

感觉例子太简单了,我看完了但是还是没能写个编译器。当然我基础太差。
但是我看完之后能大致看懂别人写的一些简单的编译器项目的大体思路。
所以说特别适合入门。
书中有代码,还有非常详细的代码讲解。 。

‘拾’ C++中,编译器会默认提供的构造函数有哪几种

这个过程是一个相当复杂的过程。以一个简单的函数为例子。int
max(int
x,int
y)。这个函数求两个变量当中的较大值,在执行的时候首先将参数y,x的值入栈。入栈之后开始执行函数体当中的代码。当执行到return语句的时候,会将计算的结果保存在eax寄存器当中,调用该函数的地方从这个地方读取值。具体的内容可以参考《程序员的自我修养》的后部分。

热点内容
linux查看网卡地址 发布:2024-10-19 04:18:01 浏览:711
流逝sql 发布:2024-10-19 04:13:39 浏览:26
三值存储器 发布:2024-10-19 04:05:47 浏览:284
弹簧解压 发布:2024-10-19 04:00:50 浏览:69
dma访问 发布:2024-10-19 03:50:47 浏览:598
linux缺页 发布:2024-10-19 03:50:45 浏览:760
清除无线缓存 发布:2024-10-19 03:36:14 浏览:959
逍遥3源码 发布:2024-10-19 03:15:50 浏览:189
opencv教程python 发布:2024-10-19 03:12:56 浏览:599
安卓卡仕达导航怎么升级系统 发布:2024-10-19 03:07:51 浏览:89