【软考二】程序设计语言(做题)
程序设计语言部分
- 一、高级语言与低级语言
- 1、低级语言(面向机器)
- 2、高级语言(面向对象)
- 二、编译程序与解释程序
- 1、区别
- 2、流程(加粗点为不可省略过程,顺序不可变)
- (1)词法分析
- (2)语法分析
- (3)语义分析
- (4)目标代码生成
- (5)中间代码生成
- (6)词法分析工具:正规式(做题)
- (7) 词法分析工具:有限自动机(做题)
- 三、程序设计语言
- 1、数据成分
- (1)划分数据类型的作用
- 2、控制成分
- 3、知识点
- 四、传值调用与传地址调用(这里要多做题)
- 1、函数定义
- 2、传值调用
- 3、传地址调用(传引用调用)
- 4、符号表(贯穿于编译过程)
- 5、知识点
- 五、上下文无关文法(做题)
- 六、语法树的中缀式、后缀式(逆波兰式)
注意:该笔记是根据zst_2001的学习路线记录的,所以和书本上面的有偏差
一、高级语言与低级语言
1、低级语言(面向机器)
- 机器语言:计算机只能识别由0、1组成的机器指令序列,所以最基本的计算机语言就是机器语言。
- 汇编语言:因为机器指令序列可读性差,所以出现了使用容易记忆的符号代替指令的汇编语言,比如ADD(加法),SUB(减法),MOV(赋值)…
2、高级语言(面向对象)
- C
- C++
- java
- js
- python
…
二、编译程序与解释程序
由于计算机只能识别1/0构成的指令,所以对于汇编语言、高级语言需要进行翻译,这一程序称为语言处理程序。翻译的基本方式为汇编、编译、解释。
汇编:针对汇编语言翻译成机器指令。
解释:解释器,一般是解释脚本语言(PHP、Python、js)。有两种方式:1、直接将源程序解释执行。2、将源程序解释成一种中间代码后执行。
编译:编译器,将源程序翻译成目标语言程序,在计算机上执行目标程序。
1、区别
解释器
翻译源程序时不生成独立的目标程序;
解释程序与源程序参与目标程序的执行;
编译器
翻译源程序时生成与源程序对等的独立保存的目标程序;
编译程序与源程序不参与目标程序的执行;
2、流程(加粗点为不可省略过程,顺序不可变)
解释器:词法分析、语法分析、语义分析
编译器:词法分析、语法分析、语义分析、中间代码生成、代码优化、生成目标代码
(1)词法分析
输入:源程序
输出:记号流
分析构成程序的字符及由字符按照字符规则构成的符号是否符合程序语言的规定
(2)语法分析
输入:记号流
输出:语法树(分析树)
语法分析可以找出所有的语法错误
分析代码的结构是否有问题,比如:int a= 3 其后不带分号就会报错
(3)语义分析
输入:语法树
语义分析只能找出静态语义错误,动态语义错误只能在运行时发现。
分析代码的类型
静态语义错误:比如 int a = “11”;
动态语义错误:无语法错误和静态语义错误,运行时的死循环、除数为0
(4)目标代码生成
目标代码生成阶段与具体的机器密切相关,寄存器的分配与使用也需考虑
(5)中间代码生成
常见的中间代码有:后缀式、三地址码、四元式、树(图)等
生成中间代码提高了编译程序的可移植性,且与具体的机器无关,可做与机器无关的优化处理;可将不同高级程序语言翻译成同一种中间代码,中间代码可以跨平台
(6)词法分析工具:正规式(做题)
当选择都符合题意时,选择可表示的最大的集合
(7) 词法分析工具:有限自动机(做题)
有限自动机可正确识别正规集,推导正规式。
分为确定的有限自动机DFA(每种状态的转移只有一个选择)和不确定的有限自动机NFA(一种状态的转移可以有多种)。
状态分为初态和终态,初态也可为终态,可以有多个终态。最终都要停留在终态
三、程序设计语言
程序设计语言的基本成分包含数据、运算、控制和传输等
1、数据成分
- 常量和变量
- 全局量和局部量
- 数据类型
(1)划分数据类型的作用
- 便于为数据合理分配存储单元
- 便于对参与表达式计算的数据对象进行检查
- 便于规定数据对象的取值范围与可执行的运算
2、控制成分
- 顺序
- 选择
- 循环
3、知识点
- 变量具有对应的存储单元,常量没有(这个地方疑惑),它是放在常量区的
- 常量不可被赋值
- 短路运算(假&?:不用确认右侧?的假与真,其结果一定是假;真||?:不用确定右侧的?的假与真,其结果一定是真)
- 左结合:从左向右算;右结合:从右向左算
四、传值调用与传地址调用(这里要多做题)
1、函数定义
返回值类型 函数名f(形参) {
函数体
}
调用时:f(实参)
2、传值调用
- 将实参的值传给形参,实参可以是常量、变量、表达式
- 不会实现实参与形参之间的双向的数据传递
3、传地址调用(传引用调用)
- 将实参的地址传给形参,实参不能是常量、表达式
- 会实现实参与形参之间双向的数据传递,改变了形参的值也就相当于改变了实参的值
4、符号表(贯穿于编译过程)
不断收集、记录和使用源程序中一些相关符号的类型和特征信息,并将其存入符号表;记录源程序中各字符的必要信息,以辅助语义的正确性检查和代码生成
5、知识点
- 声明语句存入符号表,执行语句是翻译成中间代码或目标代码
五、上下文无关文法(做题)
大多数程序设计语言的语法规则用上下文无关文法描述其语法。
包含开始符号和终止符号,每一部分称为产生式。一般的题目都是根据下面的产生式,可以推导出什么公式…
六、语法树的中缀式、后缀式(逆波兰式)
语法树根据中序遍历遍历出来的树为中缀式,根据后序遍历遍历出来的树为后缀式。
语法树其实就是二叉树,最顶部为根节点,左边为左子树、右边为右子树,既无左子树又无右子树的节点称为叶子结点。
中序遍历语法树的规则是:左中右
后序遍历语法树的规则是:左右中
(啧,不好表示,后面增加动画演示)
我们经常见的式子就是中缀式,题目一般是给你中缀式,求后缀式,或者给你语法树,求后缀式(或者反着)。
当提供了后缀式时,可借助**栈(先入后出)**来表现语法树或者求中缀式。将数字挨个放入栈中,一旦遇到运算符号,就将栈中的两位取出,分别放在运算符的右边和左边,然后将其看做一个整体,放入栈中。
当提供了中缀式,要求后缀式时,按照优先级大小遍历,当优先级相同时,从右向左遍历。
【软考二】程序设计语言(做题)相关推荐
- 【软考】程序设计语言复习指南
1.根据考纲 根据考纲: (1)汇编.编译.解释系统的基础知识和基本工作原理. (2)程序设计语言的基本成分:数据.运算.控制和传输,程序调用的实现机制. (3)各类程序设计语言的主要特点和适用情况: ...
- 软考软件设计师下午真题-面向对象的程序设计与实现-状态设计模式(2011年下半年试题六))Java代码讲解
软考软件设计师下午真题-面向对象的程序设计与实现-状态设计模式(2011年下半年试题六))代码讲解 说明 Java代码 注释 说明 某大型商场内安装了多个简易的纸巾售卖机,自动出售2元钱一包的纸巾,且 ...
- 软考软件设计师下午真题-面向对象的程序设计与实现-生成器设计模式(2018年上半年试题六))Java代码讲解
软考软件设计师下午真题-面向对象的程序设计与实现-生成器设计模式(2018年上半年试题六))代码讲解 说明 Java代码 注释 说明 生成器(Builder)模式的意图是将一个复杂对象的构建与它的表示 ...
- 【软考-软件设计师】(下午题).
[软考-软件设计师](下午题). 一,数据流图 二,数据库 三,UNL 四,算法题 ,c语言 五,c++ / java ,程序填空 数据流图 数据流图基本概念 数据流图:没有联系() 数据字典 数据流 ...
- cisco 模拟器安装及交换机的基本配置实验心得_软考网络工程师级配置题总结 | 交换机配置、路由器配置、广域网接入配置、L2TP配置、IPSec配置、PIX防火墙配置...
软考网络工程师级配置题总结 一. 交换机配置 1. 交换机的基本配置 Enable 进入特权模式 Config terminal 进入配置模式 Enable password cisco 设置enab ...
- 2022年下半年软考网络规划设计师下午真题及答案解析
2022年下半年软考网络规划设计师下午真题及答案解析 试题一 案例一 某单位网站受到攻击,首页被非法篡改.经安全专业机构调查,该网站有一个两年前被人非法上传的后门程序,本次攻击就是因为其他攻击者发现该 ...
- 2021年11月软考网络规划设计师下午真题及答案解析
2021年11月软考网络规划设计师下午真题及答案解析 试题一 阅读以下说明,回答问题1至问答4,将解答填入答题纸对应得解答栏内. (说明) 某园区组网图如图1-1所示,该网络中接入交换机利用QinQ技 ...
- 视频教程-2020软考软件设计师-上午真题解析视频课程-软考
2020软考软件设计师-上午真题解析视频课程 河北师范大学软件学院优秀讲师,项目经理资质,担任操作系统原理.软件工程.项目管理等课程教学工作.参与十个以上百万级软件项目管理及系统设计工作.在<计 ...
- 2022年下半年软考网络规划设计师论文真题
2022年下半年软考网络规划设计师论文真题 试题 一 论5G与校园网络融合的规划与设计 近年来,教育部等部门印发了<教育信息化2 .0行动计划>: <关于推进教育新型基础设施建 设构 ...
- 系统集成项目管理工程师软考辅导——3年真题透解与全真模拟
全国计算机技术与软件专业技术资格(水平)考试用书 系统集成项目管理工程师软考辅导--3年真题透解与全真模拟 3年软考 试题科学编排 专家360°透彻剖析 3次模拟 名师心血结晶 阶梯演练能 ...
最新文章
- 驴友生涯的开始--香八拉路线精选
- facade 提供一个接口,通过这个接口,可以使一个子系统更容易使用。
- mysql截取栏目字符_substring从指定字符串开始截取(图)
- osgi框架和spring区别_最全153道Spring全家桶面试题,你都知道哪些?(含答案解析)...
- python文件解除占用_如何使用Python解锁锁定的文件和文件夹(mac)
- 12对胸椎对应体表标志_铁路信号之信号表示器及标志(三)
- [css] css3的:nth-child和:nth-of-type的区别是什么?
- pcb板子制作各层的解释和用法
- python中isort的使用
- TCP/IP协议详解内容总结(怒喷一口老血)
- 基于卷积神经网络模型的MSTAR高分辨率图像数据集识别实践【后续:网络层可视化分析】
- Python游戏编程(Pygame)
- 从0开始的技术美术之路(十)伽马校正
- mysql 易语言 邮件_易语言实现163邮箱登录获取邮件列表等操作的代码
- easyBCD修改系统启动项
- 记录String.valueOf()和toString()注意问题
- 获取晋江优质小说(按章节数量选择、python多进程)
- 风险预测模型评价第二弹:NRI的R语言计算
- jQuery Media Plugin 插件实现在线视频播放业务
- flash与PHP的交互技巧