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

news/2024/10/5 7:16:33

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

7.1 基本概念

7.1.1 低级语言和高级语言

通常称机器语言和汇编语言为低级语言。机器语言是指用0、1字符串组成的机器指令序列,是最基本的计算机语言。汇编语言是指用符号表示指令的语言。

高级语言是从人类的逻辑思维角度出发、面向各类应用的程序语言,其抽象程度大大提高,需要编译成特定机器上的目标代码才能执行。这类语言与人们使用的自然语言比较接近,大大提高了程序设计的效率。

程序设计语言的定义一般都涉及语法、语义、语用和语境等方面。

  1. 语法:由程序设计语言的基本符号组成程序中的各个语法成分的一组规则,其中由基本字符构成的符号书写规则称为词法规则,由符号构成语法成分的规则称为语法规则。程序语言的语法可通过形式语言进行描述。
  2. 语义:程序语言中按语法规则构成的各个语法成分的含义,可分为静态语义和动态语义
  3. 语用:表示构成语言的各个记号和使用者的关系,涉及符号的来源、使用和影响。
  4. 语境:理解和实现程序设计语言的环境,包括编译环境和运行环境。

7.1.2 程序设计语言的分类

  1. 命令式程序设计语言
    命令式程序设计语言是基于动作的语言,在这种语言中,计算被看作是动作的序列,命令式语言族开始于Fortran、Pascal和C语言,体现了命令式程序设计的关键思想。
  2. 面向对象的程序设计语言
    面向对象的程序设计在很大程度上应归功于从模拟领域发展而来的Simula,Simula提出了对象和类的概念。C++、Java和Smalltalk是面向对象程序设计语言的代表。
  3. 函数式程序设计语言
    函数式程序设计语言是一类以2-演算为基础的语言。该语言的代表是LISP,其中大量使用了递归。
  4. 逻辑型程序设计语言
    逻辑型程序设计语言是一类以形式逻辑为基础的语言。该语言的代表是建立在关系理论和一阶谓词理论基础上的Prolog。

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

数据成分

  1. 常量和变量
  2. 全局量和局部量
  3. 数据类型
    基本类型:整型(int)、字符型(char)、实型(float、double)和布尔类型(bool)。
    特殊类型:空类型(void)
    用户定义类型:枚举类型(enum)
    构造类型:数组、结构和联合
    指针类型:type
    抽象数据类型:类类型

运算成分
算术运算加减乘除、逻辑运算或与非、关系运算

控制成分
顺序结构、选择结构、循环结构

函数和函数的调用

7.2 编译与解释

汇编语言是为特定的计算机或计算机系统设计的面向机器的符号化的程序设计语言。用汇编语言编写的程序称为汇编语言源程序。汇编语言源程序由若干条语句组成。一个程序中可以有3类语句:指令语句、伪指令语句和宏指令语句。

编译程序的功能是把用高级语言书写的源程序翻译成与之等价的目标程序。编译过程划分成词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成六个阶段,实际的编译器可能会将其中的某些阶段结合在一起进行处理。

解释程序是一种语言处理程序,在词法、语法和语义分析方面与编译程序的工作原理基本相同,但在运行用户程序时,它直接执行源程序或源程序的内部形式(中间代码)。因此,解释程序并不产生目标程序,这是它和编译程序的主要区别。

image

  • 词法分析阶段的任务是:对源程序从前到后(从左到右)逐个字符进行扫描,从中识别出一个个“单词”符号。“单词”符号是程序设计语言的基本语法单位,如关键字、标识符等。

  • 语法分析阶段的任务是:在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类语法单位,如“表达式”“语句”和“程序”等。词法分析和语法分析本质上都是对源程序的结构进行分析

  • 语义分析阶段主要是:审查源程序是否存在语义错误,并收集类型信息供后面的代码生成阶段使用,只有语法和语义都正确的源程序才能翻译成正确的目标代码。语义分析的一个主要工作是进行类型分析和检查

  • 中间代码生成阶段的工作:是根据语义分析的输出生成中间代码。

  • 代码优化阶段的任务是:对前一阶段产生的中间代码进行变换或进行改造,目的是使生成的目标代码更为高效,即省时间和省空间。

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

7.3 文法

https://www.bilibili.com/video/BV1Qc411G7fB?p=17&vd_source=1a563cd2b3f3fdeb2a16cbbf18022d2f

有限自动机

正规式

表达式

传值与引用(传址)

7.8 各种程序语言特点

image

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

软件设计师:软件工程基础知识

能力模型 CMM(能力成熟度模型)初始级:没明确定义 可重复级:建立基本的项目管理过程和实践 已定义级:文档化、标准化 已管理级:管理层制定了软件过程和产品质量的详细度量标准 优化级:不断持续地改进CMMI(能力成熟度模型集成)基本不考已执行的:可标识的输入转换为可标…

TextMeshPro - 富文本标签

初始文本 粗体<b></b> 斜体<i></i> 颜色<#ff0000></color> 大小<size></size> <size=60%>中</size><size=1.2em>中</size> 下划线<u></u> 删除线<s></s> 上标<sup…

Linux 中 2>1 解释

在Linux系统中: 0 表示标准输入; 1表示标准输出; 2表示标准错误输出; 2>&1 表示将标准错误输出重定向到标准输入; 举一个例子: a、不将标准错误输出 重定向到标准输入中。[root@PC1 gffread-0.12.7.Linux_x86_64]# xxx ## 在终端随机输入一个命…

OpenResty

原文:https://www.cnblogs.com/liekkas01/p/12757576.htmlcosocket 是各种 lua-resty-* 非阻塞库的基础,没 有 cosocket,开发者就无法用 Lua 来快速连接各种外部的网络服务。 在早期的 OpenResty 版本中,如果想要去与 Redis、memcached 这些服务交互的话,需要使用 redis2-…

cannot execute binary file

001、问题,调用一个二进制文件,出现如下的报错[root@PC1 gffread-0.12.7.OSX_x86_64]# ls gffread [root@PC1 gffread-0.12.7.OSX_x86_64]# ./gffread -bash: ./gffread: cannot execute binary file 002、问题原因 出现如上报错的原因通常是: 该错误发生时,通常是在尝试执…

buuctf-pwn-[第五空间2019 决赛]PWN5-格式化字符串漏洞

题目地址:https://buuoj.cn/challenges#[第五空间2019 决赛]PWN5 先检查一下保护情况再拖进ida里分析找到一个格式化字符串漏洞,那么我们可以利用这个漏洞去获取或者改写dword_804C044的值 从而进入if语句中,拿到shell 什么是格式化字符串漏洞 所谓格式化字符串漏洞,就是我…

9.数字马力面试

9.1 Java基础9.1.1 volatile的概述和原理在Java中volatile是一个防止指令重排以及保证可见性的关键字。如果我们将变量声明为volatile,那么就指示JVM这个变量共享且不稳定,每次从主存中进行读取。AQS的status就是使用volatile修饰的。 借用Guide哥的图片:   如果将变量声明…

【vue3入门】-【21】 组件传递数据

组件传递数据_Props静态数据传递组件与组件之间不是完全独立的,而是有交集的,那就是组件与组件之间是可以传递数据的 传递数据的解决方案就是props app.vue <template><!--主要要生效Header中的样式,需要删除main.json中默认的main.css样式--><!--不需要再次…