Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【编译原理】第一讲:绪论【笔记】
特别声明:以下内容,源自 大学慕课 《编译原理》哈尔滨工业大学 陈鄞,文章经个人整理所得,仅供学习交流
BWH_Steven
2020/04/23
6540
【编译原理】第一讲:绪论【笔记】
hiphop原理分析1
Hiphop是Facebook开发一款PHP二进制化的一个工具,最开始是由php转为C++,但是后来发现编译为c++的话,许多的时间会花费在编译代码上面,调试不方便,对于代码来说也不是即见即所得。 所以hiphop经历了这么几个阶段: HPHPC=>HPHPI=>HHVM HPHPC是静态编译,也就是把php转为c++ HPHPI是一个过渡产品,类似php zend虚拟机,性能还不如zend虚拟机,但是可以运行查看效果; HHVM是在HPHPI基础上,应用了JIT技术,性能已经接近了HPHPC,目前face
小小科
2018/05/02
1.5K0
hiphop原理分析1
编译原理学习(到LL1文法部分)
机器语言:计算机只认识由0和1构成的机器语言,每台机器自己独特的指令系统即机器语言。 机器语言->汇编语言->高级语言 编译程序最初的定义是把一种高级语言设计的源程序(面向人的)翻译成另一种等价的低级程序设计语言(面向硬件的)即机器语言或汇编语言。
且陶陶
2023/04/12
8260
编译原理学习(到LL1文法部分)
编译原理 第一章: 编译概述 重点总结(翻译程序的过程,解释程序,编译程序的结构)
强化记忆:源程序编写分两类,汇编语言和高级语言,都能生成目标程序机器语言,但是高级语言还可以生成机器语言,翻译程序各不相同,汇编对应汇编程序,高级对应编译程序。
小徐在进步
2024/09/18
4660
编译原理 第一章: 编译概述 重点总结(翻译程序的过程,解释程序,编译程序的结构)
《Kotlin 程序设计》第七章 Kotlin 编译过程分析第七章 Kotlin 编译过程分析
http://mp.weixin.qq.com/s/lEFRH523W7aNWUO1QE6ULQ
一个会写诗的程序员
2018/08/17
1.8K0
编译原理 | 期末复习笔记
warning: 这篇文章距离上次修改已过396天,其中的内容可能已经有所变动。
Ranlychan
2023/03/05
1.7K0
编译原理 | 期末复习笔记
编译原理(第四版)复习 (一)
编译过程的5个阶段:词法分析,语法分析,语义分析及中间代码生成,代码优化,目标代码生成;
meihuasheng
2021/03/18
4900
编译原理(1)总结
  本科是网络工程,由于没有学<<编译原理>>这门课,打算两个月把国科大的编译原理梳理完,把其中我认为的精髓概括一下,三天一篇,作为笔记。
huofo
2022/03/17
4590
编译原理(1)总结
用c语言手搓一个600行的类c语言解释器: 给编程初学者的解释器教程(2)- 简介和设计
用c语言手搓一个600行的类c语言解释器: 给编程初学者的解释器教程(1)- 目标和前言 用c语言手搓一个600行的类c语言解释器: 给编程初学者的解释器教程(2)- 简介和设计 用c语言手搓一个600行的类c语言解释器: 给编程初学者的解释器教程(3)- 词法分析 用c语言手搓一个600行的类c语言解释器: 给编程初学者的解释器教程(4)- 语法分析1:EBNF和递归下降文法 用c语言手搓一个600行的类c语言解释器: 给编程初学者的解释器教程(5)- 语法分析2: tryC的语法分析实现 用c语言手搓一个600行的类c语言解释器: 给编程初学者的解释器教程(6)- 语义分析:符号表和变量、函数
云微
2023/02/24
6390
编译原理入门-编译的全过程
程序里面的单词叫做Token,Token的类型包括:关键字、标识符、字面量、操作符等
没事就要多学习
2024/07/18
1320
编译原理入门-编译的全过程
编译原理:第一章 编译原理引论
编译程序最初的定义是把一种高级语言设计的源程序(面向人的)翻译成另一种等价的低级程序设计语言(面向硬件的)即机器语言或汇编语
Here_SDUT
2022/08/09
6160
编译原理:第一章 编译原理引论
编译原理复习总结-耗子尾汁
2. 上下文无关法 一个上下文无关法G是一个四元式 ,其中 :终结符集合(非空) :非终结符集合(非空),且
唔仄lo咚锵
2021/12/31
1.3K0
编译原理复习总结-耗子尾汁
计算机程序的编译和链接
在日常的应用程序开发过程中,我们很少需要关注软件的编译和连接过程,特别是对于常用的集成开发环境visual studio,它将编译和链接的过程封装起来,一步完成,称为“构建”。 但是在这样的开发过程中,我们往往依赖于集成开发环境的强大,而忽略了软件的运行机制和机理,导致对程序中的很多莫名其妙的错误无从下手,程序运行时的性能瓶颈分析也让我们束手无策,如果我们能够深入了解软件运行背后的机理以及支撑软件运行的各种平台和工具,那么解决这些问题相对来说就比较容易了。接下来让我们一起了解软件编译与链接的过程。
用户11036582
2024/04/02
1280
计算机程序的编译和链接
大学课程 | 编译原理知识点
令 X 为一个文法符号(一个终结符或非终结符)或 ε ,则集合 First (X) 由终结符组成,此外可能还有 ε ,它的定义如下:
Justlovesmile
2021/12/14
1.4K0
大学课程 | 编译原理知识点
词法分析、语法分析、语义分析
词法分析(Lexical analysis或Scanning)和词法分析程序(Lexical analyzer或Scanner)
jack.yang
2025/04/05
2170
计算机为什么能够读懂程序代码?
上一回,我们的主人公小A初次亮相,凭借基础的前后端理解,从技术实现的层面为我们剖析了微信扫码登录的几秒钟里,到底发生了什么。可能很多人因此会好奇,小A到底是做什么的呢?为什么能够弄懂这些原理呢?
帅地
2020/03/10
1.5K0
计算机为什么能够读懂程序代码?
编译器架构 ( Compiler Architecture )
简单讲,编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。一个现代编译器的主要工作流程:
一个会写诗的程序员
2021/06/29
1.9K0
编译原理学习笔记-1
机器不能理解我们用高级语言编写的代码,所以要在程序执行前将高级语言“翻译”为机器语言。这是一个将源语言程序转化为目标语言程序的过程,它依靠翻译程序来完成。
Chor
2020/03/17
7960
编译原理学习笔记-1
用c语言手搓一个500+行的类c语言解释器: 给编程初学者的解释器教程(2)- 简介和设计
通常我们说的 “编译器” 是一种计算机程序,负责把一种编程语言编写的源码转换成另外一种计算机代码,后者往往是以二进制的形式被称为目标代码(object code)。这个转换的过程通常的目的是生成可执行的程序。
云微
2020/06/05
1.7K0
再看编译原理
其实就是翻译,比如从字符串编译到机器码,就是把人能理解的代码语言翻译成机器能“理解”(识别执行)的机器语言,然后用户借助目标程序就可以与机器交互了:
ayqy贾杰
2019/06/12
9230
推荐阅读
相关推荐
【编译原理】第一讲:绪论【笔记】
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档