2.程序语言基础知识

  • 2.1 程序语言概述
    • 2.1.1 程序语言的基本概念
    • 2.1.2 程序语言的基本成分(★★★)
  • 2.2 程序语言翻译基础
    • 2.2.1 汇编程序基本原理(了解一下)
    • 2.2.2 编译程序基本原理(★★★)
    • 2.2.3 解释程序基本原理(★★★)

2.1 程序语言概述

2.1.1 程序语言的基本概念

1.低级语言和高级语言

  • 低级语言:包括机器语言和汇编语言,是一种面向机器的语言,效率低、程序可读性很差、难以理解、难以修改和维护。
  • 高级语言:面向各类应用的程序语言,功能更强、抽象级别更高,常见的有Java、C、C++、C#、Python、PHP、JavaScript等,这类语言与人们使用的自然语言比较接近,大大提高了程序设计的效率。

2.汇编、解释、编译

  高级程序语言必须进行翻译才能为计算机硬件所理解,语言之间的翻译形式有多种,基本方式为汇编、解释和编译。

  用某种高级语言或汇编语言编写的程序称为源程序,源程序不能直接在计算机上执行。如果源程序是用汇编语言编写的,则需要一个汇编程序将其翻译成目标程序后才能执行。如果源程序是用某种高级语言编写的,则需要对应的解释程序或编译程序对其进行翻译,然后在机器上运行。

3.编译程序和解释程序

  解释程序(解释器):它或者直接解释执行源程序,或者将源程序翻译成某种中间代码后再加以执行;

  编译程序(编译器):将源程序翻译成目标语言程序,然后在计算机上运行目标程序。

  区别(这个是选择常考知识点):

  • 编译方式下,机器上运行的是与源程序等价的目标程序,源程序与编译程序都不再参与目标程序的执行过程;
  • 解释方式下,解释程序与源程序(或者某种等价表示)要参与到程序的运行过程中,运行程序的控制权在解释程序。
  • 解释方式下,翻译源程序时不生成独立的目标程序,而编译器则将源程序翻译成独立保存的目标程序。

  编译和解释的比较:编译比解释方式可能取得更高的效率;解释方式比编译方式更灵活(解释程序需要反复检查源程序);解释方式可移植性好。

4.程序设计语言的分类

建议了解一下常用的程序语言应用场景,选择题偶尔会涉及,这里简单介绍3种。

  若一种程序语言不依赖于机器硬件,则称为高级语言;若程序语言能够应用于范围广泛的问题求解领域,则称为通用的程序设计语言。

  • PHP是一种在服务器端执行的、嵌入HTML文档的脚本语言,PHP可以快速地执行动态网页。
  • Python是一种面向对象的解释型程序设计语言,可以用于编写独立程序、快速脚本和复杂应用的原型。
  • JavaScript是一种脚本语言,被广泛用于web应用开发,常用来网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果,通常嵌入HTML使用。

2.1.2 程序语言的基本成分(★★★)

  程序语言的基本成分包括:数据、运算、控制、传输。(2020年选择题考点)

1.程序语言的数据成分

  • 常量和变量:变量具有左值(指存储单元:地址、容器)和右值(内容),在程序运行过程中其右值可以改变;常量只有右值,在程序运行过程中其右值不能改变。
  • 全局变量和局部变量:系统为全局变量分配的存储空间在程序运行的过程中一般是不改变的,而为局部变量分配的存储单元是可以动态改变的。
  • 按照数据组织形式的不同分为基本类型、用户定义类型、构造类型及其他类型,以C语言为例:
    – 基本类型:int、char、float、double、bool等;
    – 特殊类型:void;
    – 用户定义类型:enum(枚举类型);
    – 构造类型:数组、结构、联合;
    – 指针类型:type *;
    – 抽象数据类型:类类型。

2.程序语言的控制成分

  控制成分指明语言允许表述的控制结构,程序员使用控制成分来构造程序中的控制逻辑,有顺序结构、选择结构、循环结构。

3.函数(很重要)

  函数涉及3个概念:函数定义、函数声明和函数调用。

  调用函数和被调用函数之间交换信息的方法主要有2种:一种是被调用函数把返回值返回给主调函数,另一种是通过参数带回信息,函数调用实参与形参间交换信息的方法有值调用和引用调用:

  • 传值调用:实现函数调用时实参向形式参数传递相应类型的值,形参不能向实参传递信息(单向传递),实参可以是常量(表达式),也可以是变量(数组元素),例如:
int sum(int x, int y){int z;z=x+y;return z;
}函数调用时:sum(2,3);
  • 引用调用(传地址调用):引用是C++中增加的数据类型,当形式参数为引用类型时,形参名实际上是实参的别名,函数中对形参的访问和修改实际上就是针对相应实际参数所做的访问和改变,可以实现双向传递;因此只能是变量(数组元素),而不能是常量(表达式),例如:
void swap(int &x,int &y){int temp;temp=x; x=y; y=temp;
}
函数调用:swap(a,b);x,y就是a,b的别名,调用完成后,交换了a,b的值。

2.2 程序语言翻译基础

2.2.1 汇编程序基本原理(了解一下)

  汇编语言源程序有3类语句:指令语句、伪指令语句和宏指令语句。

  汇编程序的功能是将汇编语言所编写的源程序翻译成机器指令程序,汇编程序的基本工作包括每一条可执行汇编语句转换成对应的机器指令,处理源程序中出现的伪指令。由于汇编指令中形成操作数地址的部分可能出现后面才会有定义的符号,所以汇编程序一般需要两次扫描源程序才能完成翻译过程。

2.2.2 编译程序基本原理(★★★)

  编译程序的作用是把某高级语言书写的源程序翻译成与之等价的目标程序(汇编语言或机器语言),编译程序工作过程一般分为6个阶段:

1.词法分析

  词法分析阶段的任务是对源程序从前到后(从左到右)逐个字符地扫描,从中识别出一个个“单词”符号,“单词”符号是程序设计语言的基本语法单位,如关键字或保留字、标识符、常数、运算符和分隔符(如标点符号、左右括号)等。

2.语法分析

  语法分析的任务是在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类语法单位,如“表达式”“语句”和“程序”等,检查和处理程序中的语法错误,如果源程序中没有语法错误,语法分析后就能正确地构造出其语法树,否则就指出语法错误,并给出相应的诊断信息。

3.语义分析

  语义分析各语法结构的含义,检查源程序是否包含静态语义错误,并收集类型信息供后面的代码生成阶段使用,只有语法和语义都正确的源程序才能翻译成正确的目标代码。

  语义分析的一个主要工作是进行类型分析和检查,程序语言中的一个数据类型一般包含两个方面的内容:类型的载体及其上的运算。例如,整除取余运算符只能对整型数据进行运算,若其运算对象中有浮点数就认为是一种类型不匹配的错误。

4.中间代码生成(★★★)

  中间代码生成阶段的工作是根据语义分析的输出生成中间代码。常用的中间代码有:后缀式(逆波兰式)、四元式(三地址码)、树形。

(1)中缀式表达式:即通常所使用的表达式,如 ( a + b ) ∗ c − d (a+b)*c-d (a+b)∗c−d;

  • 后缀表达式转为中缀表达式:从左至右扫描后缀表达式,若遇到运算对象,则压入栈中,遇到运算符,则从栈中弹出栈顶的两个运算对象进行运算,并将运算结果压入栈中,重复以上过程,直到表达式最右端,结束。

  • 前缀表达式转为中缀表达式:从右至左扫描后缀表达式,若遇到运算对象,则压入栈中,遇到运算符,则从栈中弹出栈顶的两个运算对象进行运算,并将运算结果压入栈中,重复以上过程,直到表达式最左端,结束。

(2)前缀式表达式(波兰式):将运算符在运算对象的前面, ( a + b ) ∗ c − d (a+b)*c-d (a+b)∗c−d后缀表达式为 − ∗ + a b c d -*+abcd −∗+abcd,即中缀表达式转换为前缀表达式,步骤:

  • 按计算顺序全部加上括号: ( ( ( a + b ) ∗ c ) − d ) (((a+b)*c)-d) (((a+b)∗c)−d);
  • 把每一对括号内的运算符移到括号前面: − ( ∗ ( + ( a b ) c ) d ) -(*(+(ab)c)d) −(∗(+(ab)c)d);
  • 去掉括号: − ∗ + a b c d -*+abcd −∗+abcd。

(3)后缀式表达式(逆波兰式):将运算符写在运算对象的后面,这种表示法的优点是根据运算对象和运算符的出现次序进行计算,不需要使用括号,也便于用栈实现求值, ( a + b ) ∗ c − d (a+b)*c-d (a+b)∗c−d后缀表达式为 a b + c ∗ d − ab+c*d- ab+c∗d−,即中缀表达式转换为后缀表达式,步骤:

  • 按计算顺序全部加上括号: ( ( ( a + b ) ∗ c ) − d ) (((a+b)*c)-d) (((a+b)∗c)−d);
  • 把每一对括号内的运算符移到括号后面: ( ( ( ( a b ) + c ) ∗ d ) − ((((ab)+c)*d)- ((((ab)+c)∗d)−;
  • 去掉括号: a b + c ∗ d − ab+c*d- ab+c∗d−。

5.代码优化

  由于编译器将源程序翻译成中间代码的工作时机械的、按固定模式进行的,因此,生成的中间代码往往在时间和空间方面的效率较差,当需要生成高效的目标代码时,就必须进行优化。

  优化代码可以在中间代码生成阶段进行,也可以在目标代码生成阶段进行。

6.目标代码生成

  目标代码生成是编译器工作的最后一个阶段,这个阶段的任务是把中间代码变换成特定机器上的绝对指令代码、可重定位的指令代码或汇编指令代码,这个阶段的工作与具体的机器密切相关。

7.符号表管理

  符号表的作用是记录源程序中各符号的必要信息,以辅助语义的正确性检查和代码生成,在编译过程中需要对符号表进行快速有效地查找、插入、修改和删除等操作。

8.出错处理

  源程序中不可避免地会有一些错误,这些错误大致分为静态错误和动态错误。

  • 动态错误发生在程序运行时,如:变量取零时作除数、引用数组元素下标错误等。
  • 静态错误是指编译阶段发生的程序错误,可分为语法错误和静态语义错误,如单词拼写错误、标点符号错、表达式中缺少操作数、括号不匹配等有关语言结构上的错误成为语法错误。
  • 静态语义错误是指语义分析时发现的运算符与运算对象类型不合法等错误。

2.2.3 解释程序基本原理(★★★)

  解释程序通常可以分为两部分:第一部分是分析部分,包括通常的词法分析、语法分析和语义分析程序,经语义分析后把源程序翻译成中间代码,中间代码常采用逆波兰式表示形式;第二部分是解释部分,用来对第一部分产生的中间代码进行解释执行。

说明:
1.疏忽、遗漏、错误之处,欢迎留言批评指正。
2.至此第2章书本教程知识点总结结束,后续会继续完善补充本章的历年真题,转载请注明出处,整理不易,谢谢!

2020年中级数据库系统工程师考试笔记2—程序语言基础知识相关推荐

  1. 2020年中级数据库系统工程师考试笔记9—SQL语言

    目录 8. SQL语言 8.1 本章考点 8.2 SQL概述与数据库定义 8.3 数据库定义 8.4 数据操作 8.4.1 Select 8.4.2 Insert/update/delete 8.5 ...

  2. 2020年中级数据库系统工程师考试笔记14—标准化和知识产权基础知识

    目录 13. 标准化和知识产权基础知识 13.1 本章重点 13.2 知识产权基础知识 13.3 计算机软件著作权(★★★) 13.4 计算机软件著作权的归属(★★★) 13.5 软件著作权侵权的法律 ...

  3. 2020年中级数据库系统工程师考试笔记13—数据库发展和新技术

    目录 12. 数据库发展和新技术 12.1 本章重点 12.2 分布式数据库 12.3 决策支持系统和数据库 12.4 非关系型数据库NOSQL 12.4.1 CAP理论和BASE理论 12.3.2 ...

  4. 2020年中级数据库系统工程师考试笔记7—关系数据库1

    目录 7. 关系数据库 7.1 本章考点 7.2 关系数据库概述 7.2.1 基础知识 7.2.2 关系数据库模式 7.2.3 关系代数运算 7.3 元组演算.域演算和查询优化 7.3.1 元组演算 ...

  5. 2020年中级数据库工程师考试笔记1—计算机系统知识

    第1章 计算机系统知识 1.1 本章考点 1.2 计算机系统基础知识 1.2.1 中央处理单元 1.2.2 数的表示和校验(★★★) 1.3 计算机体系结构 1.3.1 概述 1.3.2 存储系统(★ ...

  6. 中级网络工程师考试笔记

    中级网络工程师考试笔记 前言 笔记正文 7.局域网技术 前言 根据B站一个教学视频做的笔记,正在持续更新 提示:以下是本篇笔记参考的中级网考视频教程 B站视频链接 笔记正文 7.局域网技术 下方的链接 ...

  7. 嵌入式系统设计师考试笔记之嵌入式系统基础知识

    以下是转帖一位网友的嵌考笔记 嵌入式系统设计师考试笔记之嵌入式系统基础知识 欧浩源(ohy3686@qq.com) 20080818 一.引言 自<嵌入式系统设计师考试复习笔记之存储管理篇> ...

  8. 汇编程序设计与计算机体系结构软件工程师教程笔记:汇编语法基础知识

    <汇编程序设计与计算机体系结构: 软件工程师教程>这本书是由Brain R.Hall和Kevin J.Slonka著,由爱飞翔译.中文版是2019年出版的.个人感觉这本书真不错,书中介绍了 ...

  9. 2023 软考中级 数据库系统工程师 考试题型

最新文章

  1. linux下查看内存使用情况
  2. 继续转 [转]php版本的cron定时任务执行器
  3. 介绍Dynamics 365的OrgDBOrgSettings工具
  4. 07.suggester简述
  5. file is not a zip file_【钢新滨河社团活动】超燃手势舞,牛津A班邀你来battle!
  6. 安卓清理垃圾清理代码_用方面清理代码
  7. 基于Maven的SSH框架搭建
  8. Android屏幕大小和密度对照表,以及px、dip、sp等像素单位的解释
  9. json文件转Excel
  10. html 日期区间选择器,element日期范围选择器
  11. 干涉测量技术的应用_倾斜摄影与激光雷达技术在输电线路实景三维测量应用中的比较...
  12. 机器学习、深度学习、自然语言处理、计算机视觉顶级期刊的论文资料分享(附CVPR2017-2019,ECCV 2018论文下载链接)
  13. Leetcode 1436. Destination City [Python]
  14. Excel排位函数RANK的使用方法
  15. IMU 无线姿态传感器-LPMS-B2系列
  16. 增量学习 (Incremental Learning)
  17. 有声阅读狂欢下更需要冷静,荔枝、蜻蜓、喜马拉雅们需要上车
  18. 3570. 【GDKOI2014】壕壕的寒假作业
  19. js 前端常用时间操作:时间戳、当前时间
  20. 电源自动测试系统-ATE电源自动综合测试系统NAST-8000,免费看视频效果

热门文章

  1. C语言中clrscr()是什么意思
  2. java统计用户网页停留时间,前端js计算用户在网页的停留时间和用户是否在点击浏览的时间...
  3. C++ 中explicit关键字详解
  4. Seata四大模式之XA模式详解及代码实现
  5. CoolShell-第6题
  6. 设计流程图框架以及绘制流程图方法介绍
  7. onmouseover和onmouseout事件
  8. 计算机考试成绩准考证号怎么查询系统
  9. 关于 VirtualBox6 下的 Win10 虚拟机 与 宿主机 共享文件
  10. 考研逻辑-逻辑5主讲人:王超-2020-05-30