软考中级软件设计师专项-程序设计语言篇

本文涉及的产品
多模态交互后付费免费试用,全链路、全Agent
简介: 本文系统介绍了编程语言基础,涵盖低级与高级语言、编译与解释程序的区别、程序结构、数据类型、函数调用方式、编译过程各阶段(词法、语法、语义分析等)、正规式与有限自动机、上下文无关文法、表达式转换及语法树遍历等内容,并对常见语言特性与杂项知识点进行总结,适用于程序设计与编译原理学习。

一、低级语言和高级语言

  1. 计算机只能识别0或1(机器语言)
  2. 汇编语言
  1. 例:ADD X1 2
  1. 低级语言分类:
  1. 机器语言
  2. 汇编语言
  1. 高级语言分类:
  1. java
  2. js
  3. python

二、编译程序和解释程序

解释程序

  1. 解释程序对应脚本语言
  1. 例如:PHP、js、python
  1. 解释程序
  1. 会直接解释源程序执行
  2. 或者
  3. 翻译成某种中间代码再加以执行
  1. 解释器:
  1. 翻译源程序不会生成独立的目标程序
  2. 解释程序和源程序要参与到程序的运行过程中

编译程序

  1. 编译程序:
  1. 是用编译器将源程序翻译为目标语言程序,在执行
  2. 例如:java
  1. 编译器
  1. 翻译时将源程序翻译成独立保存的目标程序
  2. 机器上运行的是源程序等价的目标程序
  3. 源程序和编译程序都不再参与目标程序的运行过程

三、程序设计语言的结果成本

  1. 顺序结构
  2. 逻辑结构
  3. 循环结构(重复)

四、数据类型

  1. 许多程序中规定,程序中的数据必须具有类型,作用是:
  1. 便于为数据合理分配存储单元
  2. 便于对参与表达式计算的数据对象进行检查
  3. 便于规定数据对象的取值范围及能够进行运算
  1. 隐式转换:容量小的的数据类型相容量大的数据类型转换
  2. 显式转换:容量大的的数据类型相容量小的数据类型转换
  3. 变量具有对应的存储单位,常量则没有,常量是存储在常量池中
  4. 与或非
  1. 优先级(高到低):not>and>
  2. and or 为左结合
  3. not为右结合
  1. 例:not 2>3   (先算2>3)

五、函数

  1. 传值调用:
  1. 将实参的值传递给形参,实参可以是变量,常量和表达式。
  2. 不可以实现形参和实参间双向传递数据的效果
  1. 引用调用:
  1. 将实参的地址传递给形参,形参必须有地址,实参不能是常量(值),表达式
  2. 可以实现形参和实参之间双向传递数据的效果,即改变形参的值的同时也改变了实参的值。

六、编译、解释程序翻译阶段

  1. 编译方式(六种):
  1. 词法分析、语法分析、语义分析、中间代码分析、代码优化、目标代码生成
  2. 编译器方式中中间代码生成、和代码优化不是必要的,可以省略
  1. 解释方式:
  1. 词法分析、语法分析、语义分析
  1. 编译器和解释器都不可省略词法分析、语法分析、语义分析且顺序不可交换

符号表管理

  1. 符号表是不断收集,记录和使用源程序中的一些相关符号的类型和特征等信息,并将其存储到符号表中。
  2. 记录源程序中各个字符的必要信息,以辅助语义的正确性检查和代码生成。
  3. 做题技巧:
  1. 选项中出现数据结构名词,排除即可。

词法分析

  1. 输入:源程序
  2. 输出:记号流
  3. 作用作用:是分析程序的字符及由字符按照构造规则构成的符号是否符合程序语言的规定。
  1. 例:inn a=10;   (错误:inn应该为:int)

语法分析

  1. 输如:记号流
  2. 输出:语法数(分析数)
  3. 主要作用:
  1. 对各条语句的结构进行合法性分析
  2. 分析程序中的语句结构是否正确,
  3. 可以发现程序中的所有语法错误
  1. 例题:
  1. inta =1  (错误:没有分号)

语义分析

  1. 输入:语法数(分析数)
  2. 主要作用:
  1. 进行类型分析和检查
  1. 注意点:
  1. 语义分析不能发现程序中所有的语义错误
  2. 可以发现静态语义错误
  3. 不可以发现动态语义错误(动态语义错误只能在程序运行时发现)
  1. 例子:
  1. Boolean a=1;  (类型错误)

目标代码生成

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

动态语义错误

  1. 动态语义错误只能在程序运行时发现
  1. 例子:
  1. 死循环
  2. 除数为0

中间代码生成

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

七、正规式

  1. 词法分析的工具
  1. |表示或
  2. *表示具有0个或多个

  1. 例子:
  1. 由a,b构成且包含偶数个a的集合:
  1. 解:(b*(ab*a)*)*

八、有限自动化

  1. 词法分析工具
  2. 能够正确的识别正规集
  3. 图形解释
  1. 两种状态,
  1. 初态
  2. 终态(两种表现形式)

  1. 符号解释:
  1. 图形出现a,b表示为a或b
  2. ε表示为空,可以直接跳转
  3. 例图:

  1. 分类:
  1. 确定有限自动化(DFA):对每一个状态来说识别字符后转移的状态是唯一的
  1. 例:a只能转移到终态

  1. 不确定有限制动化(NFA):对每一个状态来说识别字符后转移的状态不是唯一的。
  1. 例:a既可以到终态也可以是本身

九、上下文无关文法

  1. 上下文无关文法:广泛的用于表示各种程序设计语言的语法规则
  2. 题目形式:(给一个相关的表达式,可以用E、T、F文法推到出来)

  1. 例题:
  1. 以S为开始符号,通过中间的字符推到终结到T
  1. 产生式意思:表示S可以推出某一个P的某个形式

  1. 例题:

  1. 例题:
  1. 分析:先分析结果需要的数学符号,再选在需要推产生式

  1. 例题:
  1. 技巧:
  1. 括号根本推不出来,B排除
  2. 产生式中没有除好,D排除
  3. 终结式中的id表示为a~z,没有数字,C排除

  1. 例题:
  1. 中缀表达式(符号往上提了)

十、中缀、后缀表达式转换

  1. 中缀表达式语法
语法格式: a?b
a和b表示数字,?表示运算符号
例如:2+3
  1. 后缀表达式(逆波兰式)语法
语法格式: ab?
a和b表示数字,?表示运算符号
例如:23+
  1. 符号优先级
优先级(高到低):
() >>   *  >> /  >> +  >> -  
>  >> and  >>  or
注意点:优先级相同,从右向左算
  1. 中缀转后缀

中缀表达式:1-(2+3)*4/9
第一步:23+
第二步:23+9/
第三步:23+9/4*
第四步:123+9/4*-
  1. 后缀转中缀
  1. 可以用栈进行转换
  2. 利用栈存取和弹出的思想,从第一个数字开始入栈,遇到符号后,将前两个弹出计算
中缀表达式:123+9/4*-
第一步:2+3
第二步:(2+3)/9
第三步:(2+3)/9*4
第四步:1-(2+3)/9*4

十一、语法树中、后序遍历

  1. 语法树中序遍历可推出====>>中缀表达式

中序遍历读法:左根右

  1. 语法树后序遍历可推出====>>后续表达式

后序遍历读法:左右根

十二、杂题总结

  1. 编译是将高级语言源程序翻译成机器语言程序(汇编形式或机器代码形式),反编译是编译的逆过程
  2. 反编译通常不能还原成高级语言源代码,只能转换成功能上等价的汇编程序。
  3. 脚本语言都是动态语言,动态语言都是解释型语言
  1. 如:js、php
  1. 在C和C++中,指针变量可以是全局变量也可以是局部变量
  2. 链表中的结点空间需要程序员根据需要申请和释放,因此,数据空间应采用堆存储分配策略
  3. 标记语言:
  1. html
  2. xml
  3. wml
  1. 可视化程序设计是开发应用程序不用编写或只需编写很少的程序代码,就能完成程序设计。
  2. 编译过程中为变量分配存储单位所用的地址为逻辑地址,程序运行时再映射为物理地址
  3. C语言中全局变量存储在静态代码区,
  4. C语言程序运行时,
  5. 递归下降分析方法和预测分析法是一种自上而下的语法分析方法
  6. 算符优先分析法和LR分析法属于自底向上的语法分析方法
  7. 在源程序中,程序员可以对变量,数据类型,函数进行命名
  8. Lisp是一种函数式编程语言,Prolog是逻辑式程序语言
  9. 语法制导翻译是一种静态语义分析方法
  10. 栈是函数调用时所需保存的存储区域。
  11. 是一块动态存储区域,由程序员在程序中进行分配和释放
  12. C/C++编译过程:预处理》》编译》》汇编》》链接
  13. Java语言特征;
  1. 采用及时编译
  2. 对象在堆空间分配
  3. 自动垃圾回收机制
  1. Python:
  1. 元组(tuptle):不可变
  2. 字符串(str):不可变
  3. 集合(set):不可重复
  4. 列表(List):可变的、有序的、可重复的
  1. Python机器学习库:
  1. TensorFlow
  2. PyTorch
  3. Keras
  1. Python可视化库:
  1. Matplotlib
目录
相关文章
|
21天前
|
存储 机器学习/深度学习 人工智能
软考中级软件设计师专项-数据结构与算法上篇
软件设计师考试数据结构模块涵盖数组、链表、栈、队列、树、图等基础结构及其操作,重点考查二分查找、快排与归并排序、树/图的DFS/BFS遍历算法,要求掌握时间与空间复杂度分析,理解哈希、堆的应用场景,强调通过合理选择数据结构优化程序性能,解决存储管理与计算效率问题,为系统设计奠定核心逻辑基础。
282 0
软考中级软件设计师专项-数据结构与算法上篇
|
21天前
|
设计模式 算法 Java
软考中级软件设计师专项-设计模式篇
备战软考中级软件设计师?本文聚焦高分设计模式模块,详解23种模式的核心意图与场景,结合UML图、Java代码实例及历年真题,覆盖创建型、结构型、行为型三大类,助你打通理论到实战。
91 0
软考中级软件设计师专项-设计模式篇
|
21天前
|
存储 JSON 数据建模
鸿蒙 HarmonyOS NEXT端云一体化开发-云数据库篇
云数据库采用存储区、对象类型、对象三级结构,支持灵活的数据建模与权限管理,可通过AGC平台或本地项目初始化,实现数据的增删改查及端侧高效调用。
63 0
|
21天前
|
存储 算法 搜索推荐
软考算法破壁战:从二分查找到堆排序,九大排序核心速通指南
专攻软考高频算法,深度解析二分查找、堆排序、快速排序核心技巧,对比九大排序算法,配套动画与真题,7天掌握45%分值模块。
78 0
软考算法破壁战:从二分查找到堆排序,九大排序核心速通指南
|
22天前
|
安全 网络安全 开发工具
vulnhub靶机实战_DC-2
本文介绍了DC-2靶机的渗透测试实战过程,涵盖靶机下载、环境搭建、信息扫描、漏洞利用、权限提升及最终提权获取flag的完整流程。内容包括使用nmap扫描、WPScan和Hydra工具爆破登录信息,绕过rbash限制,利用git提权等关键技术步骤。
86 0
|
22天前
|
关系型数据库 MySQL 网络安全
vulnhub靶机实战_DC-7
本文介绍DC-7靶机渗透测试全过程,包括靶机下载、VMware导入、网络配置、Nmap扫描发现开放80和22端口,通过信息搜集获取数据库凭证,尝试登录SSH成功,获得系统访问权限。适合网络安全学习者实践渗透流程。
72 0
|
22天前
|
安全 网络安全 数据库
vulnhub靶机实战_DC-1
本实验通过启动靶机、扫描漏洞、攻击Drupal服务、获取数据库权限、提权至root,最终成功获取所有flag,完成渗透测试目标。
140 0
vulnhub靶机实战_DC-1
|
5月前
|
UED
网络性能指标
本内容详细介绍了网络性能中的三个关键指标:时延、抖动和丢包率。时延指数据传输所需时间,影响实时性;抖动表示延迟变化程度,反映网络稳定性;丢包率衡量数据丢失比例,评估传输可靠性。这些指标对在线游戏、视频会议等实时应用至关重要,高时延、大抖动或高丢包率会显著降低用户体验。通过类比快递寄送和语音通话,清晰解释了各指标的定义及应用场景。
605 8
|
缓存
📣阿里云百炼大语言模型618限量资源包活动来袭
阿里云百炼推出大语言模型推理资源包优惠活动,所有主账号用户均可参与,无论是否完成实名认证。活动提供qwen-max、qwen-plus及qwen-turbo三种资源包,分别支持对应模型的实时推理费用抵扣,折扣力度达8.8折至9折不等。每种资源包限量发售,有效期为1年,自订购之日起计算。活动期间购买的资源包不可用于抵扣Batch调用、上下文缓存等其他服务费用。如有疑问可加入官方支持群(77600022533)交流反馈,优惠名额有限,先到先得。
832 0
|
8月前
|
自然语言处理 监控 安全
2025年阿里云短信验证码价格多少钱?计费模式与场景选型指南
随着企业数字化转型,短信验证码作为用户身份验证的重要工具,其成本与效率的平衡至关重要。阿里云短信服务以高可靠性、灵活计费和多场景适配著称。按量付费模式适合需求波动大的场景,而短信套餐包则为长期稳定需求提供了成本优势。针对不同业务场景,如高频验证、跨境业务及中小型企业轻量级需求,阿里云提供了定制化的选型策略。此外,通过阶梯定价、防盗刷监控等措施实现成本优化与风险规避,并不断进行技术升级以确保服务的安全性和稳定性。根据2025年最新数据,企业可根据自身需求选择最适合的阿里云短信验证码服务方案。