【软考-软件设计师精华知识点笔记】第二章 程序设计语言基础知识

前言

由于笔记复制到CSDN样式失效,没有精力再重新完整的检查并设置一遍样式,有积分的可以前往下载word、pdf、有道云笔记版本。
需要说明的是,下载的内容与本篇分享内容一致,只有样式的区别【比如重点记忆、常考内容有颜色、字号、自重等样式,目录结构更完善,表格不是图片,等】
本章下载地址:
https://download.csdn.net/download/chengsw1993/85498697

如果发现文章存在读不通、显示异常等内容,请评论区告知以便修改,应该都是CSDN的markdown语法导致的。

系列文章

上一篇:【软考-软件设计师精华知识点笔记】第一章 计算机网络概论

下一篇:【软考-软件设计师精华知识点笔记】第三章 数据结构

程序设计语言概述

程序设计语言的基本概念

程序设计语言是为了书写计算机程序而人为设计的符号语言,用于对计算过程进行描述、组织和推导。

低级语言:机器语言(计算机硬件只能识别0和1的指令序列)、汇编语言。
高级语言:功能更强,抽象级别更高,与人们使用的自然语言比较接近。

各程序设计语言特点:

  1. Fortran语言(科学计算,执行效率高)
  2. Pascal语言(为教学而开发的,表达能力强,Delphi)
  3. C语言(指针操作能力强,高效)
  4. Lisp语言(函数式程序语言,符号处理,人工智能)
  5. C++语言(面向对象,高效)
  6. Java语言(面向对象,中间代码,跨平台)
  7. C#语言(面向对象,中间代码,.Net)
  8. Prolog语言(逻辑推理,简洁性,表达能力,数据库和专家系统)
  9. Python(可用于编写独立程序和快速脚本)
  • 解释和编译都是将高级语言翻译成计算机硬件认可的机器语言加以执行。不同之处于编译程序生成独立的可执行文件,直接运行,运行时无法控制源程序,效率高。而解释程序不生成可执行文件,可以逐条解释执行,用于调试模式,可以控制源程序,因为还需要控制程序,因此执行速度慢,效率低。
  • 程序设计语言组成:语法(一组规则)、语义(语法成分的含义)、语用(构成语言的各个记号和使用者的关系)。

例(2012年上半年):51、编译和解释是实现高级程序设计语言翻译的两种基本形式。以下关于编译与解释的叙述中,正确的是。
A.在解释方式下,对源程序不进行词法分析和语法分析,直接进行语义分析
B.在解释方式下,无需进行语法、语法和语义分析,而是直接产生源程序的目标代码
C.在编译方式下,必须进行词法、语法和语义分析,然后再产生源程序的目标代码
D.在编译方式下,必须先形成源程序的中间代码,然后再产生与机器对应的目标代码

答案:C

解析:在编译方式下,先将源程序翻译为等价的目标程序,源程序的翻译和目标程序的运行是完全独立的两个阶段;而解释方式下,对源程序的翻译和运行是结合在一起进行的,并不生成目标代码。
编译过程基本上可以划分为词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等几个阶段,其中,中间代码生成和代码优化不是必须的。在词法、语法、语义分析方面,编译方式和解释方式没有区别。

程序设计语言的基本成分

数据成分:数据和数据类型

  • 数据:常量、变量、全局量(存储空间在静态数据区分配)、局部量(存储空间在堆栈区分配)
    数据类型:整型、字符型、双精度浮点型、单精度浮点型、布尔型等
  • 运算成分:算数运算、逻辑运算、关系运算、位运算等
  • 控制成分:顺序结构、条件结构、循环结构
  • 传输成分:指明语言允许的数据传输方式,如赋值处理、数据的输入输出等
  • 函数:main函数只有一个,是程序运行的起点。
  • 传值调用:将实参的值传递给形参,形参的改变不会导致调用点所传的实参的值改变。实参可以是合法的变量、常量和表达式。
  • 传址调用:即引用调用,将实参的地址传递给形参,即相当于实参存储单元的地址引用,因此其值改变的同时就改变了实参的值。实参不能为常量,只能是合法的变量和表达式。

因此,在编程时,要改变参数值,就传址,不改变参数值,就传值。

语言处理程序基础

编译程序基本原理

编译程序的功能是把某高级语言书写的源程序翻译成与之等价的目标程序(汇编语言或机器语言)。
编译程序工作过程分为6个阶段,如下图所示:
在这里插入图片描述

中间代码和目标代码生成:中间代码是根据语义分析产生的,需要经过优化链接,最终生成可执行的目标代码。引入中间代码的目的是进行与机器无关的代码优化处理。常用的中间代码有后缀式(逆波兰式)、三元式(三地址码)、四元式、树、图等形式。需要考虑三个问题(一是如何生成较短的目标代码;二是如何充分利用计算机中的寄存器,减少目标代码访问存储单元的次数;三是如何充分利用计算机指令系统的特点,以提高目标代码的质量)。

后缀式
在这里插入图片描述

主要掌握上述三种表达式即可,其实就是树的三种遍历,一般正常的表达式是中序遍历,即中缀表达式,根据其构造出树,再按题目要求求出前缀或后缀式。

简单求法:后缀表达式是从左到右开始,先把表达式加上括号,再依次把运算符加到本层次的括号后面,最后去除所有括号。

例(2013年下半年):算术表达式a+(b-c) *d的后缀式是(22)(-、+、*表示算术的减、加、乘运算,字符的优先级和结合性遵循惯例)
(22)  A.c-d*a    B.abc-d*+    C.ab+c-d*    D.abcd-*+
解析:a+(b-c)*d → (a+((b-c)*d)) → (a+((bc)-*d)) → (a+((bc)-d)*) → (a((bc)-d)*)+ → abc-d*+ ,答案B。

文法分析

文法定义

在这里插入图片描述

+表示正则闭包,*表示闭包

文法类型

在这里插入图片描述

程序设计语言中语法是上下文无关的,语义上下文有关

正规式

在这里插入图片描述

有限自动机

在这里插入图片描述

语法分析方法(考的少)

自上而下语法分析:最左推导,从左至右。给定文法G和源程序串r。从G的开始符号S出发,通过反复使用产生式对句型中的非终结符进行替换(推导),逐步推导出r。

递归下降思想:原理是利用函数之间的递归调用模拟语法树自上而下的构造过程,是一种自上而下的语法分析方法。

自下而上语法分析:最右推导,从右至左。从给定的输入串r开始,不断寻找子串与文法G中某个产生式P的候选式进行匹配,并用P的左部代替(归约)之,逐步归约到开始符号s。

移进-规约思想:设置一个栈,将输入符号逐个移进栈中,栈顶形成某产生式的右部时,就用左部去代替,称为归约。很明显,这个思想是通过右部来推导出左部,因此是自下而上语法分析的核心思想。

例(2016年上半年):●移进-归约分析法是编译程序(或解释程序)对高级语言源程序进行语法分析的一种方法,属于(48)的语法分析方法。
A.自顶向下(或自上而下) B.自底向上(或自下而上) C.自左向右 D.自右向左
答案:B

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值