番外篇之程序开发过程及基本术语

编程这玩意有好多琐碎的概念,有些东西真要拉出来说说的,比如:

计算机加工的对象是数据信息,而指挥计算机操作的是控制信息,因此计算机内部的信息可以划分如下:

/ 指令
                  / 控制信息
                /                    \ 控制字
              /
    信息                                            / 定点数
              \                       / 数值信息
                \                   /                   \ 浮点数
                  \数据信息
                                    \                       / 字符数据
                                      \非数值信息
                                                            \ 逻辑数据

计算机编程这件事事实上就是用一段话将一件事情描述清楚,只是要求描述这件事须要用计算机语言,需要将其编辑成文件。计算机语言有"机器语言"、"汇编语言"和各种"高级语言"。计算机编程过程中我们需要了解程序开发过程和基本术语。

(1)源程序:用源语言编写的、有待翻译的程序称为"源程序",也叫"源代码"。源语言可以是汇编语言,也可以是各种高级语言。
(2)目标程序:源语言经过翻译程序加工以后生成的程序称为"目标程序",也叫"目标代码"。目标程序可以是机器码,但往往经过翻译程序加工后生成的程序,例如汇编码或其他中间语言的程序也被成为目标程序。

PS:翻译程序,是指用来把源程序翻译为目标程序的程序,往往称为"翻译器"。对于翻译器来说,源程序是她的输入,目标程序是她的输出。翻译程序有三种不同类型:汇编程序、编译程序(编译器)、解释程序(解释器)。

高级语言所编制的程序不能被计算机直接执行,必须经过翻译程序(翻译器)转换才能被执行,按照翻译器的具体转换方式可以将高级语言分"解释类"和"编译类"两大类。

"解释类",解释类语言的翻译器复杂度较低。解释器一边读取源代码一边执行,也就是说"解释执行",边解释边执行。一般解释类语言都不需要产生目标程序,
程序执行期间不能脱离解释器独立运行,程序执行期间完全有解释器控制。这种解释型语言比较灵活,可以动态地、便捷的修改程序,感觉上解释器就像一台"虚拟
计算机",而这台"虚拟计算机"的机器语言就是这高级语言本身。典型的解释型高级语言就是BASIC语言。

"编译类", 编译型语言的翻译器复杂度较高,一般需要将高级语言的源代码进行深入的分析并翻译成与之等价的目标程序。目标程序可以脱离编译器在适当环境中独立运行。典型的编译型语言就是C/C++语言。

一般我们说一种高级语言是"解释的"还是"编译的",往往是根据它的翻译器是否对源程序是否做了彻底的分析,有关目标程序与源程序有没有很强的相似性。如果它的翻译器做
了彻底的分析、有关目标程序与源程序根本没有强烈的相似性,那么我们一般都说这种高级语言是编译的,否则我们说这种高级语言是解释的。

根据上面的简单讨论,我们知道BASIC是典型的解释型语言,C/C++是典型的编译型语言。Java是看上去是一种介于解释型和编译型之间的语言,一般我们认为java语言是编译的。

C/C++语言计算机程序开发步骤
1、使用vi编写源程序文件
2、使用编译器gcc对源程序进行翻译处理
3、使用命令./a.out执行得到的可执行文件

---->2、使用编译器gcc对源程序进行翻译处理。这个步骤也可以细分为四个过程:
    (1)编译预处理。这个过程编译器需要执行完编译预处理指令
    (2)编译。这个过程编译器需要将源程序处理成汇编码
    (3)汇编。这个过程编译器需要将汇编码处理成机器码

(4)链接。这个过程编译器须要将机器码文件与其他机器码文件、库文件等链接成一个可执行的机器码文件。

计算机语言源程序由词法记号、空白和注释构成。介绍几个基本概念:字符集、词法记号、空白和注释:
(1)字符集 字符集是构成语言源程序的基本元素。要知道,在C语言源程序中,除了字符数据外,其它所有成分都只能是由字符集中的字符构成。
(2)词法记号 词法记号是最小的词法单元。要知道,在C语言源程序中,词法记号有5种,他们是"关键字","标识符","文字","操作符","分隔符"。
         1、关键字:例如int void while return
         2、标识符:由程序员自己命名,不可以是关键字!命名必须以字母或_开头,可以由字母(大写或小写)、数字(0-9)和_组成。
         3、文字:语言源程序中直接使用符号本身来表示数据信息的记号称为"文字",它>    们有"数字","字符","字符串"以及C++语言中的布尔文字true和false
         4、操作符:例如+ - * /  
         5、分隔符:例如{}、[]、;、,和:

(3)空白 空白是空格、制表符、换行符和注释的总称。在编译器编译的词法分析阶段 ,编译器就专门将源程序分解为词法记号和空白。
(4)注释 注释分多行注释和单行注释,可以出现空白的地方都可以出现注释。

时间: 2024-08-10 18:14:21

番外篇之程序开发过程及基本术语的相关文章

可视化(番外篇)

本篇主要介绍如何在SWT下构建一个应用,如何安装SWT Designer并破解已进行SWT的可视化编程,Display以及Shell为何物.有何用,SWT中的常用组件.面板容器以及事件模型等. 1.可视化环境搭建(SWT Designer): (1).首先下载SWT Designer插件包SWT Designer 6.9.5 for Eclipse.rar: (2).将解压好的插件包extplugins\swt\eclipse下的features和plugins导入Myeclipse的dropi

Linux入门之内核管理番外篇(4)udev入门(1)

Linux入门之内核管理番外篇(4)udev入门(1) 前言 在上篇中的内核模块管理讲解中,最后或多或少会留下一些疑问,那么这些疑问就是内核模块的参数是怎么和对应的硬件所匹配上的,而硬件又是怎么被内核识别,并且一个个都映射成实际存在的文件,而这些文件之间的关系及作用.当然在最后了解到,这些硬件设备的探测信息是通过一个叫udev的工具来实现的,通过udev中配置的规则可以很有效的识别每一个硬件,并配合sysfs文件系统,将每个探测到的硬件信息导入到/sys目录中,那么与/proc目录对与内核系统信

编程珠玑番外篇之番外篇-O 中间语言和虚拟机漫谈(ZZ)

http://blog.youxu.info/2014/05/11/language-and-vm/ 导言 编程语言的发展历史,总的来说,是一个从抽象机器操作逐步进化为抽象人的思维的过程.机器操作和人的思维如一枚硬币的两面,而语言编译器就像是个双面胶,将这两面粘在一起,保证编程语言源程序和机器代码在行为上等价.当然,人本身并不是一个完美的编译器,不能无错的将思维表达为高级语言程序,这种偏差,即Bug.因为编译器的帮助,我们可以脱离机器细节,只关心表达思维和程序行为这一面. 编程语言的发展日新月异

iOS冰与火之歌番外篇 - 在非越狱手机上进行App Hook(转载)

作者简介:郑旻(花名蒸米),阿里巴巴移动安全部门资深安全工程师,香港中文大学移动安全(Android & iOS)方向博士,曾在腾讯.百度以及硅谷的FireEye实习.在博士期间发表了多篇移动安全方向的论文(BlackHat.AsiaCCS等),去过10多个不同的国家做论文演讲. 曾帮助Apple公司修复了多处iOS安全问题,并且Apple在官网表示感谢.同时也是蓝莲花战队和Insight-labs的成员,在业余时间多次参加信息安全竞赛(Defcon.AliCTF.GeekPwn等),并取得优异

可视化(番外篇)——SWT总结

本篇主要介绍如何在SWT下构建一个应用,如何安装SWT Designer并破解已进行SWT的可视化编程,Display以及Shell为何物.有何用,SWT中的常用组件.面板容器以及事件模型等. 1.可视化环境搭建(SWT Designer): (1).首先下载SWT Designer插件包SWT Designer 6.9.5 for Eclipse.rar: (2).将解压好的插件包extplugins\swt\eclipse下的features和plugins导入Myeclipse的dropi

[反汇编练习-番外篇] Delphi专攻

[反汇编练习-番外篇] Delphi专攻 鉴于OD在Delphi反汇编这一块的薄弱,狠狠研究了下当前的手段. 大家常用的反编译除了OD(ollydebug).IDA,还有Delphi用的Dede,C#用的NetReflector,还有几个跟踪易语言的.其实反汇编的利器还有很多,在吾爱云盘中收录了: AS3.Sorcerer.v2.72.CracKed.By.REPT.7z 28-Mar-2014 10:59 5M C32Asm.rar 28-Dec-2013 14:52 1M DJ.Java.D

Java微信公众平台开发--番外篇,对GlobalConstants文件的补充

转自:http://www.cuiyongzhi.com/post/63.html 之前发过一个[微信开发]系列性的文章,也引来了不少朋友观看和点评交流,可能我在写文章时有所疏忽,对部分文件给出的不是很完全所以导致部分同学在有些地方做开发的时候遇到了一些阻力,收到这些朋友同学们的咨询反馈之后我也做了一些反思和总结,其中一部分同学说少了GlobalConstants这个文件(这个真心占的不少),还有一部分就是说源码的问题,所以今天特意抽了时间补充下这两点! (一)关于GlobalConstants

python爬虫番外篇(一)进程,线程的初步了解

原文地址https://www.cnblogs.com/zhaof/p/6994991.html 整理这番外篇的原因是希望能够让爬虫的朋友更加理解这块内容,因为爬虫爬取数据可能很简单,但是如何高效持久的爬,利用进程,线程,以及异步IO,其实很多人和我一样,故整理此系列番外篇 一.进程 程序并不能单独和运行只有将程序装载到内存中,系统为他分配资源才能运行,而这种执行的程序就称之为进程.程序和进程的区别在于:程序是指令的集合,它是进程的静态描述文本:进程是程序的一次执行活动,属于动态概念. 例如我们

编程珠玑番外篇

1.Plan 9 的八卦 在 Windows 下喜欢用 FTP 的同学抱怨 Linux 下面没有如 LeapFTP 那样的方便的工具. 在苹果下面用惯了 Cyberduck 的同学可能也会抱怨 Linux 下面使用 FTP 和 SFTP 是一件麻烦的事情. 其实一点都不麻烦, 因为在 LINUX 系统上压根就不需要用 FTP. 为什么呢? 因为一行简单的配置之后, 你就可以像使用本机文件一样使用远程的任何文件. 无论是想编辑, 查看还是删除重命名, 都和本机文件一样的用. 这么神奇的功能到底如何