导航:首页 > 源码编译 > 编译程序技术

编译程序技术

发布时间:2023-05-17 06:16:23

A. 编译程序的作用

编译程序的作用是:将高级语言源程序翻译成目标程序。

编译程序是一种动作,是根据编译原理技术,由高级程序设计语言编译器翻译成机器语言二进制代码行为。编译程序是动名词,特指生成编译器的软件程序。编译程序是把用高级程序设计语言或计算机汇编语言写的源程序,翻译成机器语言格式目标程序的翻译程序。

属于采用生成性实现途径实现的翻译程序。编译程序以高级程序设计语言书写的源程序作为输入,而以汇编语言或机器语言表示的目标程序作为输出;编译出的目标程序通常还要经历运行阶段,以便在运行程序的支持下运行,加工初始数据,算出所需的计算结果。

编译程序的算法

编译程序的实现算法较为复杂。这是因为它所翻译的语句与目标语言的指令不是一一对应关系,而是一多对应关系;同时也因为它要处理递归调用、动态存储分配、多种数据类型,以及语句间的紧密依赖关系。

但是,由于高级程序设计语言书写的程序具有易读、易移植和表达能力强等特点,编译程序广泛地用于翻译规模较大、复杂性较高、且需要高效运行的高级语言书写的源程序。

B. 为什么说编译程序实质上是专家系统

编译程序实质上老铅知不是专家系统。尽管编译器可以使用一些类似于专家系统的技术,比如基于规则的机器学习方法,但它们并不一定要使用这些技术。编译器是一种将高级语言转换为计算机可执行代码的程序,它需要遵循特定的逻辑和算法来完成这个过程。

专家系统是指一种人工智能技术,激族它基于知识库和推理机制,能够解决某个特定领域内的问题。与编译器相比,专家系统更注重知识的表示和推理,以便能够给出正确的答案或建议。虽然侍消编译器也能够在一定程度上处理语义和推理,但它主要的目标是将高级语言翻译成机器码,而不是提供专业的领域知识。

因此,虽然编译程序使用了一定的自动化技术,但它不能完全等同于专家系统,两者在目标、机制和应用范围等方面都存在较大的差异。

C. 编译程序的构造需要掌握哪些原理和技术

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

D. 编译原理技术有哪些应用呢

编译原理,说得通俗易懂一些就是:让机器通过某种机制和规则,将一种由人们书写的高级程序代码,经过若干步骤,最终翻译成机器可理解执行的二进制代码。
编译原理技术的具体应用,例如:
(1)、我们用户通常编写的 C/C++ 程序源代码(*.C/*.CPP),通过 Microsoft Visual C++ 编译器,将由人工书写的 C/C++ 语言程序源代码(*.C/*.CPP),最终翻译成机器可执行的二进制代码(*.EXE);
(2)、人工智能领域中的自然语言处理、机器翻译技术(例如:英/汉翻译、日/汉翻译系统等)等,都需要使用到编译原理技术。

E. 编译技术的发展历程

1954年至1957年间,IBM的John Backus带领一个小组开发FORTRAN语言及其编译器,使得上面的担忧不必要了。
但由于当时处理中所涉及到的大多数程序设计语言的翻译并不为人所掌握,所以这个项目的成功也伴随着巨大的辛劳。
几乎与此同时,人们也在开发着第一个编译器,Noam Chomsky开始自然语言结构的研究。使得编译器结构异常简单,甚至还带有了一些自动化。
Chomsky的研究导致了根据语言文法(grammar,结构规则)的难易程度以及识别它们所需的算法来为语言分类。文法有4个层次:0型、1型、2型和3型文法,且其中的每一个都是其前者的专门化。2型(或上下文无关文法context-free grammar)是程序设计语言中最有用的,代表着程序设计语言结构的标准方式。
人们接着又深化了生成有效的目标代码的方法,这就是最初的编译器,它们被一直使用至今。人们通常将其误称为优化技术(optimization technique),但因其从未真正地得到过被优化了的目标代码而仅仅改进了它的有效性,因此实际上应称作代码改进技术(code improvement technique)。
在70年代后期和80年代早期,大量的项目都关注于编译器其他部分的生成自动化,这其中就包括了代码生成。这些尝试并未取得多少成功,这大概是因为操作太复杂而人们又对其不甚了解。

F. java 相关的编译技术

除了 Java 的编译器和虚拟机器之外 还有一些相关的编译技术 本文章试图做一个简单的说明 JIT 编译器 传统的 Java 虚拟机器很愚蠢 将一道 bytecode 的指令翻译成机器码之后 马上执行这些机器码 执行完这批机器码之后 就把这些机器码丢了 接着再翻译下一道 bytecode 的指令 继续下去 即使下次执行到以前执行过的 bytecode 指令 依然要重新翻译成机器码才能执行 如此一来 效率当然不好 使用 JIT 编译器(Just In Time piler)技术的虚拟机器比较聪明 会把常常执行的部分在第一次先翻译好放在内存 以后再次执行到这里时 就不用再翻译 直接从内存取出机器码即可执行 这么一来 只要你的内存够大 JIT 编译器的技术够好 你的 Java bytecode 执行速度也可以逼近纯编译式的程序 其它程序语言的编译器 任何档案只要符合 Java bytecode 的格式 就可以被 Java 虚拟机器执行 制造出 Java bytecode 的方式有许多种 不一定要使用 Java 语言来写程序 才能编译成 Java bytecode Java 是语言也是平台 你可以不使用 Java 语言(也就是 Java 编译器) 只使用 Java 平台(也就是 Java 虚拟机器) 只要某语言有提供编译器 能将该语言的原始码编译成 Java bytecode 格式 就可以在 Java 平台上执行 据我所知 目前已经有下列语言提供兼容于 Java 平台的编译器(以英文字母顺序排列) Aardappel Ada Agora BAMBOO Basic Bistro Bolero C C++ CLIPS COBOL Correlate Dawn E EcmaScript Eiffel Foo Forth Fortran Funnel Haskel Hojo javascript Jickle JIF Jinni Lisp LL LLP Logo Luck MINERVA Mini ML Mola NetRexx Nice Oberon Pascal PLAN Pnuts Prolog PS I Python Sather Scheme SELF Simkin Small Talk Tcl WebL Yassl Yoix Yoyo 原生编译器 如果你不在乎 Java 程序能否跨平台 你希望 Java 程序能如同 C/C++ 一般被编译成机器码而非 Java bytecode 那么你可以使用 Java 原生编译器(native piler) 目前已经有不少这样的产品可以使用 Java 原生编译器有两大类 一类可以把 Java 的原始码编译成机器码 另一类则可以把 Java bytecode 编译成机器码 反编译与混淆器 Java bytecode 因为档案格式简单 信息保留完整 且指令是最简单的堆栈式(stack based)架构等因素 所以很容易被反编译(de pilation) 反编译指的是和编译相反的过程 对 Java 来说 反编译就是把 Java bytecode 转换成 Java 原始码的过程 为了防止你辛苦地开发出来的 Java bytecode 被他人反编译成原始码 你可以透过混淆器(obfuscator)将你的 Java bytecode 转换成更混乱的 Java bytecode 执行起来效果一样 但是被混淆过的 Java bytecode 比较不容易被反编译 你通常要为此付出一点代价 因为混淆过的程序执行速度通常会变慢 且混淆器只能增加反编译的难度 不能保证你的程序一定无法被反编译成功 毕竟道高一尺 魔高一丈 如果有人愿意花许多时间和精力反编译你的 Java bytecode 你根本就无法拦阻 组译与反组译 汇编语言(assembly)是一种非常接近机器码的语言 将汇编语言转成机器码的工具称为组译器(assembler) 反过来将机器码转成汇编语言的工具称为反组译器(dissembler) 对于 Java 虚拟机器来说 Java bytecode 就如同它的机器码 有没有一种语言是很接近 Java bytecode 的呢?也就是说 Java 有没有的汇编语言呢?基本上 Sun 并未定义 Java 的标准汇编语言 但是有一些人定义了自己的 Java 汇编语言 并提供 Java 的组译器(甚至反组译器) 例如 Ja *** in 以及 javaa 都是 Java 组译器 前处理器 前处理器(pre processor)也称为前编译器(pre piler)或前翻译器(pre translator) 其目的在将源码中不符合语言规范的部分转换成符合语言规范的形式 比方说 我们可能在 ??????????Java 源码中除了使用 Java 语言之外 还穿插使用自订的语法 这些自订的语法无法被 Java 编译器处理 所以我们必须先透过一个前处理器来将自订语法的部分转换成 Java 语言 然后就可以交由 Java 编译器处理 目前有不少 Java 的前处理器 例如 iContract SQLJ 都是用来扩充 Java 语言之用的 最佳化工具软件 一般来说 最佳化有两种 让档案体积变小 可以节省储存空间并加快网络传送速度 让执行速度变快 对于 Java 来说 还有第三种最佳化 让程序结构变乱 不容易被反编译 也就是前面提到过的混淆(obfuscation) 这三个目的之间常常互相排挤 结构变乱 通常会使得程序变慢 且体积变大 体积变小 通常会使得速度变慢 且结构变整齐 速度变快 通常会使得体积变大 且结构变整齐 lishixin/Article/program/Java/hx/201311/27007

G. 编译器开发的四种技术

编译程序的开发常常采用这四种:自编译、交叉编译、自展和移植等技术实现。

H. 什么叫程序的编译

编译程序词组可以有两种认识。一、编译程序是一种动作,是根据编译原理技术,由高级程序设计语言编译器翻译成机器语言二进制代码行为。二、编译程序是动名词,特指生成编译器的软件程序。

I. 编译程序是什么意思编译是什么意思

编译程序(Compiler,compiling program)也称为编译器,是指把用高级程序设计语言书写的源程序,翻译成等价的机器语言格式目标程序的翻译程序。

解释程序是一种语言处理程序,在词法、语法和语义分析方面与编译程序的工作原理基本相同,但在运行用户程序时,它直接执行源程序或源程序的内部形式(中间代码)。

(9)编译程序技术扩展阅读:

结构:

编译过程分为分析和综合两个部分,并进一步划分为词法分析、语法分析、语义分析、代码优化、存储分配和代码生成等六个相继的逻辑步骤。这六个步骤只表示编译程序各部分之间的逻辑联系,而不是时间关系。

编译过程既可以按照这六个逻辑步骤顺序地执行,也可以按照平行互锁方式去执行。在确定编译程序的具体结构时,常常分若干遍实现。对于源程序或中间语言程序,从头到尾扫视一次并实现所规定的工作称作一遍。每一遍可以完成一个或相连几个逻辑步骤的工作。

可以把词法分析作为第一遍;语法分析和语义分析作为第二遍;代码优化和存储分配作为第三遍;代码生成作为第四遍。反之,为了适应较小的存储空间或提高目标程序质量,也可以把一个逻辑步骤的工作分为几遍去执行。

J. 什么是编译程序

编译程序指将某一种程序设计语言写的程序翻译成等价的另一种语言的程序的程序, 称之为编译程序

编译程序也称为编译器,是指把用高级程序设计语言书写的源程序,翻译成等价的机器语言格式目标程序的翻译程序。编译程序属于采用生成性实现途径实现的翻译程序。

它以高级程序设计语言书写的源程序作为输入,而以汇编语言或机器语言表示的目标程序作为输出。编译出的目标程序通常还要经历运行阶段,以便在运行程序的支持下运行,加工初始数据,算出所需的计算结果。

编译程序的实现算法较为复杂,这是因为它所翻译的语句与目标语言的指令不是一一对应关系,而是一多对应关系,同时也因为它要处理递归调用、动态存储分配、多种数据类型,以及语句间的紧密依赖关系。

由于高级程序设计语言书写的程序具有易读、易移植和表达能力强等特点,编译程序广泛地用于翻译规模较大、复杂性较高、且需要高效运行的高级语言书写的源程序。

(10)编译程序技术扩展阅读:

编译流程分为了四个步骤:

1.预处理,生成预编译文件(.文件)

2.编译,生成汇编代码(.s文件)

3.汇编,生成目标文件(.o文件)

4.链接,生成可执行文件

阅读全文

与编译程序技术相关的资料

热点内容
软通动力程序员节2021 浏览:845
安卓系统如何卸载安装包 浏览:870
短信删除助手文件夹 浏览:688
java办公自动化 浏览:340
php中超链接 浏览:253
linux默认路由设置 浏览:36
linux如何挂载iso 浏览:432
vs程序换文件夹后不能编译 浏览:557
安卓源码编译输入脚本没反应 浏览:47
phpmysql自增 浏览:167
把ppt保存为pdf 浏览:533
汽车密封件加密配件 浏览:887
黑马程序员15天基础班 浏览:560
java调整格式 浏览:521
香港云服务器租用价 浏览:78
linuxsublime3 浏览:560
imac混合硬盘命令 浏览:279
沈阳用什么app租房车 浏览:859
00后高中生都用什么app 浏览:239
戴尔塔式服务器怎么打开独立显卡 浏览:808