<软考>软件设计师-3程序设计语言基础(总结)

(一) 程序设计语言概述

1 程序设计语言的基本概念

1-1 程序设计语言的目的

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

1-2 程序语言分类

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

1-3 各程序设计语言特点

Fortran语言:	科学计算,执行效率高。
Pascal语言:		为教学开发,表达能力强。
C语言:			指针操作能力强,可以开发系统级软件,高效。
C++语言:		面向对象,高效。
Java语言:		面向对象,中间代码,跨平台。
C#语言:			面向对象,中间代码,.Net框架。
Python:			是一种面向对象、解释型计算机程序设计语言。
Prolog			是逻辑型程序设计语言。

1-4 汇编

汇编语言翻译成目标程序执行。

1-5 解释和编译

高级语言翻译成目标程序执行。不同之处在于编译程序生成独立的可执行文件,直接运行,运行时无法控制源程序,效率高。而解释程序不生成可执行文件,可以逐条解释执行,用于调试模式,可以控制源程序,因为还需要控制程序,因此执行速度慢,效率低

1-6 程序设计语言定义三要素(语法 语义 语用)

  • 1 语法: 是指由程序设计语言的基本符号组成程序中的各个语法成分(包括程序)的一组规则,其中由基本字符构成的符号(单词)书写规则称为词法规则,由符号构成语法成分的规则称为语法规则
  • 2 语义: 是程序设计语言中按语法规则构成的各个语法成分的含义,可分为静态语义动态语义。静态语义指编译时可以确定的语法成分的含义,而运行时刻才能确定的含义是动态语义。一个程序的执行效果说明了该程序的语义,它取决于构成程序的各个组成部分的语义。
  • 3 语用: 表示了构成语言的各个记号和使用者的关系,涉及符号的来源、使用和影响。

1-7 语境

语境是指理解和实现程序设计语言的环境,包括编译环境运行环境

1-8 程序设计语言的分类

  • (1)命令式和结构化程序设计语言,包括Fortran、PASCAL和C语言。
  • (2)面向对象程序设计语言,包括C++、JAVA和Smalltalk语言。
  • (3)函数式程序设计语言,包括LISP、Haskell、Scala、Scheme、APL等。
  • (4)逻辑型程序设计语言,包括PROLOG。

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

  • 1.数据成分 :指一种程序设计语言的数据数据类型。数据分为常量(程序运行时不可改变)、变量(程序运行时可以改变)、全局量(存储空间在静态数据区分配)、局部量(存储空间在堆栈区分配)。数据类型有整型、字符型、双精度、单精度浮点型、布尔型等。

  • 2.运算成分 :指明允许使用的运算符号及运算规则。包括算术运算、逻辑运算、关系运算、位运算等。

  • 3.控制成分 :指明语言允许表述的控制结构。包括顺序结构、选择结构、循环结构
    在这里插入图片描述

  • 4.传输成分 :指明语言允许的数据传输方式。如赋值处理、数据的输入输出等。

  • 5.函数 :C程序由一个或多个函数组成,每个函数都有一个名字,其中有且仅有一个名字为main的函数作为程序运行时的起点。

函数的使用涉及3个概念:函数定义函数声明函数调用

  • 函数定义 :包括两部分:函数首部和函数体。函数的定义描述了函数做什么和怎么做。函数定义的一般形式为:
    返回值的类型 函数名(形式参数表)//函数首部
    {
    函数体;
    }
  • 函数声明 :在首部说明了函数返回值的数据类型、函数的名字和函数运行时所需的参数及类型。函数所实现的功能在函数体部分进行描述。
  • 函数调用 :函数应该先声明后引用。如果程序中对一个函数的调用在该函数的定义之前进行,则应该在调用前对被调用函数进行声明。函数原型用于声明函数。函数声明的一般形式为:
    返回值类型 函数名(参数类型表);

函数调用的一般形式为:函数名(实参表);

函数调用时实参与形参间交换信息的方法有值调用和引用调用两种。
(1)值调用: 若实现函数调用时将实参的值传递给相应的形参,则称为是传值调用。在这种方式下形参不能向实参传递信息。在c语言中,要实现被调用函数对实参的修改,必须用指针作为参数。即调用时需要先对实参进行取地址运算,然后将实参的地址传递给指针形参。其本质上仍属于值调用。这种方式实现了间接内存访问。
(2)引用调用: 引用是C++中引入的概念,当形式参数为引用类型时,形参名实际上是实参的别名,函数中对形参的访问和修改实际上就是针对相应实参所做的访问和改变。

(二) 语言处理程序基础

1 编译程序基本原理

编译程序对高级语言源程序进行编译的过程中,要不断收集、记录和使用源程序中一些相关符号的类型和特征等信息,并将其存入符号表中

编译过程图:
在这里插入图片描述

  • 词法分析: 是编译过程的第一个阶段。这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构词规则识别单词(也称单词符号或符号)。

  • 语法分析: 是编译过程的一个逻辑阶段。语法分析的任务是在词法分析的基础上将单词序列组合成各类语法短语,如“程序”,“语句”,“表达式"等等.语法分析程序判断源程序在结构上是否正确

  • 语义分析: 是编译过程的一个逻辑阶段.语义分析的任务是对结构上正确的源程序进行上下文有关性质的审查,进行类型审查。如类型匹配、除法除数不为0等。又分为静态语义错误(在编译阶段能够查找出来)和动态语义错误(只能在运行时发现)。

中间代码和目标代码

中间代码是根据语义分析产生的,需要经过优化链接,最终生成可执行的目标代码。引入中间代码的目的是进行与机器无关的代码优化处理。常用的中间代码有后缀式(逆波兰式)、三元式(三地址码)、四元式等形式。

需要考虑三个问题(一是如何生成较短的目标代码;二是如何充分利用计算机中的寄存器,减少目标代码访问存储单元的次数;三是如何充分利用计算机指令系统的特点,以提高目标代码的质量)。

前缀表达式: +ab
中缀表达式:a+b
后缀表达式: ab+

在这里插入图片描述

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

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

2 文法定义

在这里插入图片描述◆文法G是一个四元组,可表示为G= (V,T, P,S),其中:

V:非终结符,不是语言组成部分,不是最终结果,可以推导出其他元素。
T:终结符,是语言的组成部分,是最终结果,不能再推导其他元素。
S:起始符,是语言的开始符号。
P:产生式,用终结符代替非终结符的规则,例如a->b。

乔姆斯基(Chomsky)把文法分成4种类型,即0型、1型、2型和3型。

  • 0型文法也称为短语文法,其功能相当于图灵机,任何0型语言都是递归可枚举的;反之,递归可枚举集也必定是一个0型语言。
  • 1型文法也称为上下文有关文法这种文法意味着对非终结符的替换必须考虑上下文,并且一般不允许替换成e串。例如,若αAB→avβ是1型文法的产生式,α和β不全为空,则非终结符A只有在左边是α,右边是β的上下文中才能替换成γ。
  • 2型文法就是上下文无关文法非终结符的替换无须考虑上下文。程序设计语言中的大部分语法都是上下文无关文法,当然语义上是相关的,要注意区分语法和语义。
  • 3型文法等价于正规式,因此也被称为正规文法或线性文法。

3 正规式

  • 语言中具有独立含义的最小语法单位是符号(单词),如标识符、无符号常数与界限符等。词法分析的任务是把构成源程序的字符串转换成单词符号序列。

  • 词法规则可用3型文法(正规文法)或正规表达式描述,它产生的集合是语言规定的基本字符集(字母表)上的字符串的一个子集,称为正规集。

  • 正规式和正规集:
    在这里插入图片描述

  • 仅通过有限次地使用上述3个步骤定义的表达式才是z上的正规式,其中,运算符“|” “·” “*”分别称为“或” “连接” 和 “闭包”。在正规式的书写中,连接运算符“·”可省略,运算的优先级从高到低顺序排列为“*” “·” “I”。设∑={a, b},下表列出了∑上的一些正规式和相应的正规集。

在这里插入图片描述

4 有限自动机

有限自动机是一种识别装置的抽象概念,它能准确地识别正规集。有限自动机分为确定的有限自动机和不确定的有限自动机两类。

  • (1)确定的有限自动机(DFA)

一个确定的有限自动机是个五元组(S,∑,f,s0,z),其中:

  • s是一个有限集,其每个元素称为一个状态。
  • ∑是一个有穷字母表,其每个元素称为一个输入字符。
  • f是S×∑ -> S上的单值部分映像。
  • f(A, a)=Q表示当前状态为A、输入为a时,将转换到下一状态Q。称Q为A的一个后继状态。
  • S∈S,是唯一的一个开始状态。
  • z是非空的终止状态集合,Z⊆S。

状态转换图:
在这里插入图片描述

  • (2)不确定的有限自动机(NFA)

一个不确定的有限自动机也是一个五元组,它与确定有限自动机的区别如下:

  • f是S×∑ -> S上的映像。对于S中的一个给定状态及输入符号,返回一个状态的集合。即当前状态的后继状态不一定是唯一的。
  • 有向弧上的标记可以是ε。

状态转换图:
在这里插入图片描述

确定的有限自动机和不确定的有限自动机:输入一个字符,看是否能得出唯一的后继,若能,则是确定的,否则若得出多个后继,则是不确定的。

5 语法分析方法

  • 自上而下语法分析:最左推导,从左至右。给定文法G和源程序串r。从G的开始符号s出发,通过反复使用产生式对句型中的非终结符进行替换(推导),逐步推导出r。
  • 递归下降思想:原理是利用函数之间的递归调用模拟语法树自上而下的构造过程,是一种自上而下的语法分析方法。
  • 自下而上语法分析:最右推导,从右至左。从给定的输入串r开始,不断寻找子串与文法G中某个产生式P的候选式进行匹配,并用P的左部代替(归约)之,逐步归约到开始符号s.
  • 移进-规约思想:设置一个,将输入符号逐个移进栈中,栈顶形成某产生式的右部时,就用左部去代替,称为归约。很明显,这个思想是通过右部来推导出左部,因此是自下而上语法分析的核心思想。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/255796.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Unity动画】Unity 2D动画创建流程

本文以2D为案例,讲解Unity 播放动画的流程 准备和导入2D动画资源 外部导入序列帧生成的 Unity内部制作的 外部导入的3D动画 2.创建动画过程 打开时间轴Ctrl6 选中场景中的一个未来需要播放动画的物体 回到时间轴点击Create一个新动画片段 拖动2D动画资源放入…

龙良曲PyTorch入门到实战 深度学习

文章目录 笔记激活函数与Loss的梯度lesson5 手写数字识别问题lesson6 基本数据类型lesson7 创建tensorlesson8 索引和切片lesson9 维度变换lesson10 broadcastinglesson11 分割和合并lesson12 数学运算lesson13 Tensor统计lesson14 Tensor高阶lesson16 什么是梯度lesson17 常见…

“智能批量复制文件:轻松实现高效且有序的编号复制“

在日常工作中,我们经常需要批量复制文件并给它们编号。这是一项非常繁琐的任务,但是现在,我们向你介绍一种全新的解决方案,帮助你轻松实现文件批量复制并编号。 首先,第一步我们要进入“文件批量改名高手”的主页面并…

Python搭建代理IP池实现接口设置与整体调度

目录 前言 1. 搭建免费代理IP爬虫 2. 将获取到的代理IP存储到数据库中 3. 构建一个代理IP池 4. 实现调度器来调度代理IP池 5. 实现带有代理IP池的爬虫 总结 前言 在网络爬虫中,代理IP池是一个非常重要的组件。由于许多网站对单个IP的请求有限制,…

深入理解Sentinel系列-2.Sentinel原理及核心源码分析

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring源码、JUC源码、Kafka原理、分布式技术原理🔥如果感觉博主的文章还不错的话&#xff…

Bounding boxes augmentation for object detection

Different annotations formats Bounding boxes are rectangles that mark objects on an image. There are multiple formats of bounding boxes annotations. Each format uses its specific representation of bouning boxes coordinates 每种格式都使用其特定的边界框坐标…

毕设:《基于hive的音乐数据分析系统的设计与实现》

文章目录 环境启动一、爬取数据1.1、歌单信息1.2、每首歌前20条评论1.3、排行榜 二、搭建环境1.1、搭建JAVA1.2、配置hadoop1.3、配置Hadoop环境:YARN1.4、MYSQL1.5、HIVE(数据仓库)1.6、Sqoop(关系数据库数据迁移) 三、hadoop配置内存四、导…

Docker网络原理

docker中的桥接模式介绍 桥接模式:用于连接两个不同网络段的设备,使他们能够共享通信的一种方式 桥接设备:工作在OSI模型的第二层,数据链路层,转发数据帧(根据mac地址)。 类似于交换机&#x…

兰州电力博物馆 | OLED透明展示台:创新展示,增强互动体验

产品:8片55寸OLED透明屏 应用场景:OLED透明屏利用其高透明度的特点,可以叠加在文物展示台上面,这种展示方式既让观众看到了文物原貌,又能了解其内部结构和细节特点,打破空间的束缚。 项目时间&#xff1a…

linux之buildroot(3)配置软件包

Linux之buildroot(3)配置软件包 Author:Onceday Date:2023年11月30日 漫漫长路,才刚刚开始… 全系列文章请查看专栏: buildroot编译框架_Once_day的博客-CSDN博客。 参考文档: Buildroot - Making Embedded Linux Easymdev.t…

Linux 系统渗透提权-Server2204-(解析)

B-3:Linux 系统渗透提权 任务环境说明: 服务器场景:Server2204(关闭链接) 用户名:hacker 密码:123456 1.使用渗透机对服务器信息收集,并将服务器中 SSH 服务端口号作为 flag 提 交; Flag:2283/tcp

LeetCode 1038. 从二叉搜索树到更大和树:(反)中序遍历

【LetMeFly】1038.从二叉搜索树到更大和树:(反)中序遍历 力扣题目链接:https://leetcode.cn/problems/binary-search-tree-to-greater-sum-tree/ 给定一个二叉搜索树 root (BST),请将它的每个节点的值替换成树中大于…