当前位置: 首页 > news >正文

软考-数据库系统工程师-程序设计语言知识要点

小房学堂,程序设计语言知识要点

汇编、编译、解释系统的基础知识

计算机只能理解由0-1组成的指令,就像一个只会本国语言的人,他听不懂其他国家的语言

而程序员编程使用的是低级语言(汇编语言)或者高级语言如C、C++、Java、Python

那如何让计算机理解程序员编写的语言呢?

那需要一个翻译者。因为编程语言分成了2大类,低级语言(汇编)和高级语言,用高级语言和汇编语言编辑的程序称之为源程序,因此翻译者要做2件事情

1、把汇编语言翻译成机器语言的动作称之为汇编,需要一个叫汇编程序的翻译程序

2、要让高级语言在机器中执行需要一个解释程序或者编译程序的翻译器,对其进行翻译才能在机器中执行

汇编过程:汇编程序对源程序进行语法分析->符号解析->生成机器码

解释程序:已Java 解释器为例,解释器对源程序执行动作,加载字节码 .class文件并对字节码进行验证,根据宿主机指令格式进行解释执行,并在程序运行时进行支持例如异常处理、内存管理、线程同步

编译器动作: 现代编译器主要动作有预处理、编译、汇编、链接,其中预处理主要是宏展开、头文件包含、条件编译如处理#if #else等语句,编译动作主要是对预处理后的文件进行词法、语法、语义分析,输出汇编文件.s , 汇编动作,注意现代编译器基本都包含了汇编程序的功能,它执行的动作和汇编程序一样,将指令码翻译成程序要运行的目标宿主机可识别的指令,记录链接时需要的地址信息比如外部函数的调用,然后生成目标文件.o文件,最后编译器执行链接动作,将一个或者多个.o文件以及所要用到的库文件.a,链接在一起合并代码、数据段最终形成可执行文件

使用解释器和编译器的编程语言各有优劣,一般来说使用解释器的语言具有跨平台特征比如Java,Python,可以实现一次编写到处运行,而使用编译器的语言具有性能更优的特点,所以对应应用来说如果更看中跨平台的易用性那选择解释器型语言,如果应用场合对性能要求更高则建议选择编译器型语言。

程序设计语言的基本成分

程序设计语言的基本成分包括:数据、运算、控制、传输

一、程序语言中的数据成分

程序语言中的数据成分是指一种程序语言中的数据类型,程序语言中的数据类型,可以简单想象成程序语言对数据的一种建模、一种对计算机底层10数据的解析方式,因为计算机本身并不知道如何解析10数字,例如浮点数1.0在一些机器里存储的二进制是3F800000,而这个二进制数如果按无符号整形数据解释则是1,065,353,216

所以数据类型其实指明了数据在计算机中的存储形式。当然数据作为程序语言中被操作的对象,其属性不仅仅有类型,还有名称、作用域、生存期等属性,所以可以按照不同角度对数据进行分类

1、按照运行时数据的值是否能够被改变分为常量和变量

这里引入一个非常重要的概念,左值和右值

左值指存储单元(地址、容器),右值指值(或内容),如下面的left_value 是左值,在编译或者解释器解释时会被替换为一个地址,5是值,是一个具体的内容

left_value = 5

变量具有左值和右值,变量在程序运行中可以被改变,常量只有右值,在程序运行中不能被改变。

2、按数据的作用域范围可以分为全局变量和局部变量

系统为全局变量分配的空间一般在程序运行期间是不会改变的,比如堆区,只读数据区

系统为局部变量分配的空间在程序运行期间是可以改变的,比如栈区

3、按数据的组织形式可以分为不同数据类型

如前面解释的二进制数按不同的类型解释得到不同的值,数据类型可以分为基本类型(比如常见的整型、浮点型、字符串型)、构造类型(比如用户自定义的类)、用户自定义类型(比如用户用typedef等关键字定义的自创类型)、和其他类型

二、程序语言中的运算成分

   程序语言中的运算成分指明允许使用的运算符号和运算规则。例如大多数高级语言都有算术运算、关系运算、逻辑运算

三、程序语言中的控制成分

博姆(Corrado Böhm)与雅科皮尼(Giuseppe Jacopini)​1966年,他们在论文《Flow diagrams, Turing machines and languages with only two formation rules》中证明:任何可计算函数(即图灵可计算的问题)都可以通过顺序(sequence)​选择(selection/if-then-else)​循环(iteration/while)​这三种基本控制结构实现。

相关文章:

  • 【Go】2、Go语言实战
  • Rust 学习笔记:自定义构建和发布配置
  • AUTOSAR图解==>AUTOSAR_SWS_DIODriver
  • 【渲染】拆解三国:谋定天下场景渲染技术
  • linux 后记
  • GCC 下载安装
  • DAY18C语言笔记
  • day16 leetcode-hot100-31(链表10)
  • 【笔记】MSYS2 安装 Python 构建依赖记录Cython + Ninja + Meson + meson-python
  • 焦虑而烦躁的上午
  • LeetCode 1497. 检查数组对是否可以被 k 整除
  • nt!MiDispatchFault函数分析之nt!MiCompleteProtoPteFault函数的作用
  • InfluxDB 高级分析实战:预测、技术指标与异常检测全指南
  • 70.新增用户内容复制功能
  • 1-2 Dart SDK 安装
  • rl_sar功能包详解
  • PTA-根据已有类Worker,使用LinkedList编写一个WorkerList类,实现计算所有工人总工资的功能。
  • Python+MongoDb使用手册(精简)
  • Baklib加速企业AI数据治理实践
  • Flickr30k Entities短语定位评测指南
  • 想在百度做网站/怎么用模板做网站
  • 云南做网站多少钱/百度2018旧版下载
  • 织梦音乐网站程序/百度账号怎么改名字
  • 管理一个网站的后台怎么做/企业网站推广有哪些方式
  • 下载做网站ftp具体步骤/谷歌seo怎么做
  • 网站上的缩略图怎么做清晰/搜索竞价