前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >《软考高分必备!程序语言设计6分速通:编译VS解释全拆解+函数调用通关秘籍,词法/语法/语义三阶冲刺!》【附真题解析】

《软考高分必备!程序语言设计6分速通:编译VS解释全拆解+函数调用通关秘籍,词法/语法/语义三阶冲刺!》【附真题解析】

作者头像
摘星.
发布于 2025-05-20 06:15:59
发布于 2025-05-20 06:15:59
1250
举报
文章被收录于专栏:博客专享博客专享

2. 程序序言设计

本文参考b站UP主zst,原视频:动态的语义错误_哔哩哔哩_bilibili

本文旨在从题目出发,只保留真题考到的相关的概念,都是浓缩过的知识点,所以简练而精髓,每一个知识点后都附带真题解析,各位小伙伴可以自行点开观看,方便复习。

2.1. 编译器和解释器

2.1.1. 编程语言

低级语言:

  • 机器语言:由01组成的机器序列
  • 汇编语言:用符号表示指令

高级语言:与人类使用的自然语言相似,将自然语言翻译成机器语言

2.1.2. 编译器

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

2.1.3. 解释器

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

2.1.4. 真题合集

2.2. 程序设计语言的基本成分

2.2.1. 控制结构
  • 顺序结构
  • 选择结构
  • 循环结构
2.2.2. 数据类型
  • 便于为数据合理分配存储单元
  • 便于对参与表达式计算的数据对象进行检查
  • 便于规定数据对象的取值范围以及能够进行的运算
2.2.3. 真题合集

2.3. 函数

函数的定义:函数首部和函数体。描述了函数做什么和怎么做。

2.3.1. 传值调用

传值调用:将实参的值传递给形参,实参可以是变量、常量和表达式,不可以实现形参和实参双向传递信息的效果。

2.3.2. 引用调用

引用调用:将实参的地址传递给形参,形参必须有地址,不能是常量或表单时,可以实现形参和实参双向传递信息的效果。

2.3.3. 代码验证
2.3.4. 真题合集

2.4. 编译、解释程的序翻译阶段

2.4.1. 工作阶段示意图
2.4.2. 编译方式

编译方式:词法分析-语法分析-语义分析-中间代码生成-代码优化-目标代码生成

编译器可以省略:中间代码生成-代码优化,即在完成前三个阶段之后直接生成目标代码

编译器和解释器都不可省略:词法分析-语法分析-语义分析,且顺序不可交换

2.4.3. 解释方式

解释方式:词法分析-语法分析-语义分析

编译器和解释器都不可省略:词法分析-语法分析-语义分析,且顺序不可交换

2.4.4. 真题合集

2.5. 符号表

2.5.1. 符号表

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

2.5.2. 真题合集

2.6. 编译器的工作阶段

2.6.1. 词法分析
  • 大多以干扰选项出现
  • 输入:源程序
  • 输出:记号流
  • 作用:分析构成程序的字符以及由字符按照构造规则构成的符号是否符合程序语言的规定
2.6.2. 语法分析
  • 输入:记号流
  • 输出:语法树(分析树)
  • 作用:对各条语句的结构进行合法性分析,分析程序中的句子结构是否正
  • 常见的语法错误:括号不匹配、缺失冒号
  • 可以发现所有语法错误
2.6.3. 语义分析
  • 输入:语法树(分析树)
  • 作用:可以发现静态语义错误
  • 不能发现所有语义错误
  • 不能发现动态语义错误,动态语义错误运行时才能发现
2.6.4. 目标代码生成
  • 与具体机器密切相关,寄存器的分配处于目标代码生成阶段
2.6.5. 真题合集

2.6.6. 动态语义错误
  • 不能发现所有语义错误
  • 不能发现动态语义错误,动态语义错误运行时才能发现
2.6.7. 真题合集

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

2.6.10. 正规式

正规式是词法分析中的一个工具,正规集由正规式推理得来

|代表左边右边二选一,或

*代表左边第一个数的0个或个多

2.6.11. 真题合集

2.6.12. 有限自动机
  • 有限自动机是词法分析的一个工具,它能正确的识别正规集。
  • 确定的有限自动机(DFA):对每一个状态来说,识别字符后转移的状态是唯一的,例如识别1的时候只有一种路径可以识别1
  • 不确定的有限自动机(NFA):对每一个状态来说,识别字符后转移的状态是不唯一的,例如识别1的时候有多种路径可以识别1
  • 可以存在多个终态,一个状态既可以是初态也可以是终态
2.6.13. 真题合集

2.7. 上下文无关文法

2.7.1. 上下文无关文法

上下文无关文法被广泛地用于表示各种程序设计语言的语法规则。

2.7.2. 真题合集

2.8. 中缀、后缀表达式转换

2.8.1. 中缀表达式
2.8.2. 后缀表达式
2.8.3. 优先级

优先级从高到低,优先级相同从右向左算

  1. ()
  2. * /
  3. + -

相当于两个数的消消乐,算完两个数就合并,用整体继续算

2.8.4. 语法树中序遍历

中序遍历顺序:左根右

例子:

2.8.5. 语法树后序遍历

后序遍历顺序:左右根

2.8.6. 真题合集
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-04-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
HaspMap的原理
前几天有想法弄懂HashMap的实现的原理,我自己也YY了一个想法去实现一个简单的Map, 代码如下:
付威
2018/12/05
5560
【Java_14】Map
一、Map 1. Map集合介绍 * Map集合是双列集合,键、值成对存在,其中键不能重复,值可以重复。 2. Map中的常用方法 ① put(K key, V value) 把指定的键与指定的值添加到Map集合中。 ② remove(Object key 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。 ③ get(Object key) 根据指定的键,在Map集合中获取对应的值。 ④ containsKey(Object key) 判断集合中是否
用户8250147
2021/02/04
3470
第四阶段-Java集合框架:【第五章 Map接口】
Map是一种存储元素对的集合(元素对分别称作 键 和 值 也称键值对)它将键映射到值的对象。一个映射不能包含重复的键,并且每个键最 多只能映射到一个值。
BWH_Steven
2019/08/09
6820
笔记17-Map「建议收藏」
​ 创建一个HashMap集合,键是学号(String),值是学生对象(Student)。存储三个键值对元素,并遍历
全栈程序员站长
2022/10/04
4530
狗屎的Java规范
写这篇文章,主要是在接触Java之后,有一些感想。但对我震撼最大的莫过于Java程序员的思想束缚。
java小雅
2020/12/21
5140
狗屎的Java规范
【背诵⑥】保姆级 | 零基础备赛蓝桥杯Java组| List 和Map
List 和 Map 是 Java 中常用的集合类,用于存储和操作数据。List 是有序集合,可以存储重复元素;Map 是键值对的集合,每个键对应一个值,键不能重复。以下是关于 List 和 Map 的知识点和例子:
命运之光
2024/04/15
920
java基础学习_集合类04_Map接口、Collections工具类_day18总结
============================================================================= =============================================================================
黑泽君
2018/10/11
8210
java基础学习_集合类04_Map接口、Collections工具类_day18总结
Java基础笔记18
18.01_集合框架(Map集合概述和特点) A:Map接口概述 查看API可以知道: 将键映射到值的对象 一个映射不能包含重复的键 每个键最多只能映射到一个值 B:Map接口和Collection接口的不同 Map是双列的,Collection是单列的 Map的键唯一,Collection的子体系Set是唯一的 Map集合的数据结构值针对键有效,跟值无关;Collection集合的数据结构是针对元素有效 18.02_集合框架(Map集合的功能概述) A:Map集合的功能概述 a:添加功能 V p
dreamkong
2018/06/21
7170
Java学习笔记(三):集合类与常用数据结构的典型用法
foochane :https://foochane.cn/article/2019122801.html 1 Collection集合 1.1 集合概述 在前面基础班我们已经学习过并使用过集合A
foochane
2020/02/13
9300
java之集合(Set、List、Map)
HashSet是Set接口的典型实现,大多数时候使用Set集合时都会使用这个实现类。我们大多数时候说的Set集合指的就是HashSet。
西西嘛呦
2020/08/26
5290
12:集合map、工具类
一、map集合 Map:一次添加一对元素。Collection 一次添加一个元素。 Map也称为双列集合,Collection集合称为单列集合。 其实map集合中存储的就是键值对(结婚证书), map
六月的雨
2018/05/14
1K0
java中Map,List与Set的区别
数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),而JAVA集合可以存储和操作数目不固定的一组数据。 所有的JAVA集合都位于 java.util包中! JAVA集合只能存放引用类型的的数据,不能存放基本数据类型。
似水的流年
2019/12/13
1.7K0
深入探索Java集合框架:List、Set和Map的使用和特性
当谈到Java程序开发中的集合框架时,了解集合的使用和特性是至关重要的。集合框架提供了一组接口和类,用于存储和操作数据。在本篇博客文章中,我们将深入探讨Java中的集合框架,包括List、Set和Map等常用的数据结构。
默 语
2024/11/20
2320
【愚公系列】2022年01月 Java教学课程 51-集合对象Map
Set<Map.Entry<K,V>> entrySet():获取所有键值对对象的集合
愚公搬代码
2022/01/15
4000
【愚公系列】2022年01月 Java教学课程 51-集合对象Map
Java之集合初探(一)
一、集合概述、区别 集合是一种容器,数组也是一种容器 在Java编程中,装各种各样的对象(引用类型)的叫做容器。 为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,Java就提供了集合类。 数组和集合类同是容器,有何不同? A:长度区别   数组的长度固定   集合长度可变 B:内容不同   数组存储的是同一种类型的元素   而集合可以存储不同类型的元素 C:元素的数据类型问题   数组可以存储基本数据类型,也可以存储引用数据类型   集合只能存储引用类型 集合类
二十三年蝉
2018/02/27
1K0
Java之集合初探(一)
Java基础:浅析List、Set、Map的特点和区别(整合版)
几乎所有的集合都是基于数组来实现的,因为集合是对数组的封装,所以,数组永远比任何一个集合要快;但任何一个集合比数组提供的功能要多。
鲲志说
2025/04/07
1920
Java基础:浅析List、Set、Map的特点和区别(整合版)
java_Collection、Map、泛型的使用
集合按照其存储结构可以分为两大类,分别是 单列集合 java.util.Collection 双列集合 java.util.Map
咕咕星
2020/08/19
1.2K0
java_Collection、Map、泛型的使用
Java集合【超详细】2 -- Map、可变参数、Collections类
还记得 Java集合框架体系、Collection、List、ArrayList、LinkedList、Set、TreeSet、HashSet 吗?如果忘记可以到这里重新温习: Java集合【超详细】
寻求出路的程序媛
2024/05/31
1820
Java集合【超详细】2  --  Map、可变参数、Collections类
Map接口和其子类HashMap遍历、LinkedHashMap
现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射。Java提供了专门的集合类用来存放这种对象关系的对象,即java.util.Map接口。 我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同,如下图。
共饮一杯无
2022/11/28
2670
Map接口和其子类HashMap遍历、LinkedHashMap
Java集合类
集合类其实就是为了更好地组织、管理和操作我们的数据而存在的,包括列表、集合、队列、映射等数据结构。
用户9645905
2023/10/23
2950
Java集合类
推荐阅读
相关推荐
HaspMap的原理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档