软件设计师学习笔记-程序设计语言基础知识

前言

备战2023年5月份的软件设计师考试,在此记录学习之路。
知识点总结,具体内容请查看对应的模块。

提示:这里有软件设计师资料,包含软件设计师考试大纲、软件设计师第五版官方教程、历年考试真题。

通过百度网盘分享的文件:软件设计师
链接: https://pan.baidu.com/s/1M6ZKuBJo9DEvdmLgbgDGvg?pwd=1024
提取码:1024
复制这段内容打开「百度网盘APP 即可获取」

系列文章目录

第一章 计算机系统基础知识
第二章 程序设计语言基础知识
第三章-数据结构


文章目录

  • 前言
  • 系列文章目录
  • 第2章 程序设计语言基础知识
    • 2.1 程序设计语言概述
      • 2.1.1 程序设计语言基本概念
        • 1. 低级语言和高级语言。
        • 2. 编译程序和解释程序
      • 2.1.2 程序设计语言的基本成分
        • 1. 数据成分
        • 2. 控制成分包含
        • 3. 函数
      • 2.2.2 编译程序基本原理
        • 1. 词法分析
        • 2. 语法分析
        • 3. 语义分析
        • 4. 中间代码生成
        • 6. 目标代码生成


第2章 程序设计语言基础知识

2.1 程序设计语言概述

2.1.1 程序设计语言基本概念

1. 低级语言和高级语言。

低级语言包括机器语言和汇编语言。
高级语言包括java、c、c++、php、python等。

2. 编译程序和解释程序

计算机只能理解由0、1序列构成的机器语言,因此高级程序设计语言需要翻译,担负这一任务的程序称为“语言处理程序”。语言之间的翻译形式有多种,基本方式为汇编、解释和编译。

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

解释器:翻译源程序时不生成独立的目标程序。
解释程序和源程序要参与到程序的运行过程中。

编译器:翻译时将源程序翻译成独立保存的目标程序。
机器上运行的是与源程序等价的目标程序,源程序和编译程序都不再参与目标程序的运行过程。

2.1.2 程序设计语言的基本成分

包括数据、运算、控制和传输等。

1. 数据成分

数据必须具有类型,其作用是:

  1. 便于为数据合理分配存储单元。
  2. 便于对参与表达式计算的数据对象进行检查。
  3. 便于规定数据对象的取值范围及能够进行的运算。

2. 控制成分包含

  1. 顺序结构
  2. 选择结构
  3. 循环结构

3. 函数

函数的定义:
函数的定义包括两部分:函数首部和函数体。函数的定义描述了函数做什么和怎么做。函数定义的一般形式为

	返回值的类型 函数名(形式参数表)   //函数首部
	{
		 函数体;
	}

函数首部说明了函数返回值的数据类型、函数的名字和函数运行时所需的参数及类型。
函数所实现的功能在函数体部分进行描述。

函数的调用:

形式为 : 函数名(实参);

(1)值调用(Call by Value)。若实现函数调用时将实参的值传递给相应的形参,则称为是传值调用。在这种方式下形参不能向实参传递信息。
实参可以是变量、常量、表达式。

(2)引用调用(Call by Reference)。引用是C++中引入的概念,当形式参数为引用类型时,形参名实际上是实参的别名,函数中对形参的访问和修改实际上就是针对相应实参所做的访问和改变。
实参可以变量,不能是常量和表达式。

2.2.2 编译程序基本原理

编译方式:词法分析、 语法分析、语义分析、中间代码生成、代码优化、目标代码生成。
**解释方式:**词法分析、语法分析、语义分析。

编译器和解释器都不可省略词法分析、语法分析、语义分析且顺序不可交换即词法分析、语法分析、语义分析是必须的。

编译器方式中中间代码生成和代码优化不是必要,可省略。
即编译器方式可以在词法分析、语法分析、语义分析阶段后直接生成目标代码

符号表:

不断收集、记录和使用源程序中一些相关符号的类型和特征等信息,并将其存入符号表中。记录源程序中各个字符的必要信息,以辅助语义的正确性检查和代码生成。

软件设计师学习笔记-程序设计语言基础知识_第1张图片

1. 词法分析

词法分析的任务是对源程序从前到后(从左到右)处个字符的扫描,从中识别出一个个“单词”符号。“单词”符号是程序设计语言的基本语法单位,如:关键字(或称保留字)、标识符、常数、运算符和分隔符等。
词法分析依据语言的词法规则。
词法分析程序输出的“单词”常以二元组的方式输出,即单词的词别和自身的值。(记号流)

词法分析输入源程序,输出二元组(记号流)

正规式与正规集

软件设计师学习笔记-程序设计语言基础知识_第2张图片

有限自动机

有限自动机是词法分析的一个工具,它能正确地识别正规集。
确定的有限自动机(DFA):对每一个状态来说识别字符后转移的状态是唯一的。
不确定的有限自动机(NFA):对每一个状态来说识别字符后转移的状态是不唯一的。

2. 语法分析

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

语法分析:输入记号流,输出语法树((分析树)
语法分析阶段的主要作用是:对各条语句的结构进行合法性分析,分析程序中的句子结构是否正确
语法分析可以发现全部语法错误。

1.上下文无关文法

软件设计师学习笔记-程序设计语言基础知识_第3张图片
2. 自顶向下语法分析
3.自底向上语法分析

3. 语义分析

语义分析阶段分析各语法结构的含义,检查源程序是否包含静态语义错误,并收集类型信息供后面的代码生成阶段使用。只有语法和语义都正确的源程序才能翻译成正确的目标代码。
语义分析的一个主要工作是进行类型分析和检查。程序设计语言中的一个数据类型一般包含两个方面的内容:类型的载体及其上的运算。例如,整除取余运算符只能对整型数据进行运算,若其运算对象中有浮点数就认为是类型不匹配的错误。

语义分析:输入语法树(分析树)
语义分析阶段的主要作用是进行类型分析和检查

语义分析阶段不能发现的程序中的全部语义错误。
语义分析阶段可以发现静态语义错误
不能发现动态语义错误,动态语义错误运行时才能发现

4. 中间代码生成

中间代码生成阶段的工作是根据语义分析的输出生成中间代码。“中间代码”是一种简单且含义明确的记号系统,可以有若干种形式,它们的共同特征是与具体的机器无关。最常用的一种中间代码是与汇编语言的指令非常相似的三地址码,其实现方式常采用四元式

常见的中间代码有:后缀式、三地址码、三元式、四元式和树(图)等形式。
中间代码与具体的机器无关(不依赖具体的机器),
可以将不同的高级程序语言翻译成同一种中间代码。
中间代码可以跨平台。
因为与具体的机器无关,使用中间代码有利于进行与机器无关的优化处理和提高编译程序的可移植性。

6. 目标代码生成

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

目标代码生成阶段的工作与具体的机器密切相关
寄存器的分配工作处于目标代码生成阶段

后缀式:(后序遍历树)左右根
中缀式:(中序遍历树)左根右
树形表示

软件设计师学习笔记-程序设计语言基础知识_第4张图片

本章到此结束。

你可能感兴趣的:(软件设计师,学习)