软考 - 程序语言设计

news2025/7/21 9:55:38

程序设计语言基本概述

程序设计语言是为了书写计算机程序而人为设计的符号语言,用于对计算过程进行 描述、组织和推导。

  • 低级语言:机器语言(计算机硬件只能识别0和1的指令序列),汇编语言。

  • 高级语言:功能更强,抽象级别更高,与人们使用的自然语言比较接近。

各程序设计语言特点:

  • Fortran语言(科学计算,执行效率高)
  • Pascali语言(为教学而开发的,表达能力强,Delphi)
  • C语言(指针操作能力强,高效)
  • LisP语言(函数式程序语言,符号处理,人工智能)
  • C++语言(面向对象,高效,和C一起常用于系统级软件开发)
  • Java语言(面向对象,中间代码,跨平台)
  • C#语言(面向对象,中间代码,.Net)
  • Prolog语言(逻辑推理,简洁性,表达能力,数据库和专家系统)

常见的程序脚本语言

脚本语言是为了缩短传统的编写-编译-链接-运行过程而创建的计算机编程语言。脚本语言一般指无需编译,逐行解释执行的语言。

  • python语言 (快速脚本语言)
  • JavaScript(脚本语言)
  • PHP(嵌入HTML文档的脚本语言)
例题:
脚本语言不是通用的程序设计语言!!!
程序设计语言通过编译方法实现,需要编译器
而脚本语言通过结束方式实现,不需要编译器,但需要解释器

解释和编译:

都是将高级语言翻译成计算机硬件认可的机器语言加以执行。不同之处在于

  • 编译程序生成独立的可执行文件,直接运行,运行时无法控制源程序,效率高。

  • 而解释程序不生成可执行文件,可以逐条解释执行,用于调试模式,可以控制源程序,因为还需要控制程序,因此执行速度慢,效率低。

程序设计语言组成:

语法(一组规则)、语义(语法成分的含义)、语用(构成语言的各个记号和 使用者的关系)。

程序设计语言的基本成分

数据成分:指一种程序设计语言的数据和数据类型。数据分为常量(程序运行时不可改变)、变量(程序运行时可以改变)、全局量(存储空间在静态数据区分配)、局部量(存储空间在堆栈区分配)。数据类型有整型、字符型、双精度、单精度浮点型、布尔型等。

运算成分:指明允许使用的运算符号及运算规则。包括算术运算、逻辑运算、关系运算、位运算等。

控制成分:指明语言允许表述的控制结构。包括顺序结构、选择结构、循环结构(初始化+循环体+循环条件)。

传输成分:指明语言允许的数据传输方式。如赋值处理、数据的输入输出等

例题:
确定数据类型的优点:
1. 有利于确定存储空间
2. 有利于确定取值范围
3. 有利于数据检查

函数

传值调用:将实参的值传递给形参,形参的改变不会导致调用点所传的实参的值改 变。实参可以是合法的变量、常量和表达式。

传址调用:即引用调用,将实参的地址传递给形参,即相当于实参存储单元的地址 引用,因此其值改变的同时就改变了实参的值。实参不能为常量,只能是合法的变 量和表达式。

因此,在编程时,要改变参数值,就传址,不改变,就传值。

函数调用时基本的参数传递方式有传值与传地址两种。
传值调用是将实参的值传给被调用函数的形参,因此实参可以是常量、变量、表达式或函数调用;
传地 址调用(或引用调用)的实质是将实参的地址传给被调用函数的形参,因此实参必须具有地址。

编译程序基本原理

编译程序的功能是把某高级语言书写的源程序翻译成与之等价的目标程序(汇编语 言或机器语言)。编译程序工作过程分为6个阶段,如下图所示:

在这里插入图片描述

  • 词法分析:是编译过程的第一个阶 段。这个阶段的任务是从左到右 个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然 后根据构词规则识别单词(也称单 词符号或符号)。
    • 有限自动机是实现的适当工具
  • 语法分析:是编译过程的一个逻辑阶段。语法分析的任务是在词法分析的基础上将单词序列组合成各类 语法短语,如“程序”,“语句”, “表达式”等等.语法分析程序判断源 程序在结构上是否正确
    • 自上而下 – 递归向下分析法
    • 自下而上 – 移进归约分析法
  • 语义分析:是编译过程的一个逻辑阶段.语义分析的任务是对结构上正确的源程序 进行上下文有关性质的审查,进行类型审查。如类型匹配、除法除数不为0等。又分为静态语义错误(在编译阶段能够查找出来)和动态语义错误(只能在运行时不一定被发现,比如死循环)
  • 中间代码生成:中间代码是根据语义分析产生的,需要经过优化链接, **最终生成可执行的目标代码。引入中间代码的目的是进行与机器无关的代码优化处理。常用的中间代码有后缀式(逆波兰式)、三元式(三地址码)、四元式和树等形式。**需要考虑三个问题(一是如何生成较短的目标代码;二是如何充分利用计算 机中的寄存器,减少目标代码访问存储单元的次数;三是如何充分利用计算机指令 系统的特点,以提高目标代码的质量)。
  • 目标代码生成:这个阶段的任务是把中间代码变换成特定机器上的绝对指令代码、可重定位的指令代码或汇编指令代码,这个阶段的工作与具体的机器密切相关。(分配寄存器)
例题:
1. 
中间代码生成 和 代码优化 不是编译器必需的!

2. 
词法分析输入是 记号流
字符流是java中的知识
语法分析后就能构造出分析树

3.
符号表 --  记录变量等
始于词法分析

中间代码 – 后缀式(逆波兰式)

【图】

要掌握上述三种表达式即可,其实就是树的三种遍历,一般正常的表达式是中序遍历 即中缀表达式,根据其构造出树,再按题目要求求出前缀或后缀式。

例:a+(b-c)*d的后缀式是(?)。

abc-d*+
简单求法:后缀表达式是从左到右开始,先把表达式加上括号,再依次把运算符加到本层次的括号后面。

文法

文法定义

一个形式文法是一个有序四元组G=(V,T,S,P),其中:

  • V:非终结符。不是语言组成部分,不是最终结果,可理解为占位符。
  • T:终结符。是语言的组成部分,是最终结果。V⌒T=θ
  • S:起始符。是语言的开始符号。
  • P:产生式。非终结符推导出终结符的公式。形如α->β
例:已知文法G:S->A0|B1 , A->S1|1 , B->S0|0,其中S是开始符。从S出发可以推导出(?)。

带入:S->(S1|1)0 | (S0|0)1
     S->S10 | 10 | S01 | 01
     S-> 1
     某些0和1个数相等的字符串
    ????还不会!

闭包,概念如下图,一般考察闭包可以为0个的情况代入运算:

  • 正则闭包:A+=A^1 U A^2 U A^3 U…U A^n U…(也就是所有幂的组合)。

  • 闭包:A*=A^0 U A^+(在正则闭包的基础上,加上A0={ε})。

例:
a*={a,aa,aaa,…,ε}
而(ab)*={ab,abab,ababab,.,ε}

文法类型

在这里插入图片描述

正规式

即 正则表达式

  • https://www.runoob.com/regexp/regexp-syntax.html

有限自动机

确定的有限自动机和不确定的有限自动机

输入一个字符,看是 否能得出唯一的后继(相同条件能有多种选择),若能,则是确定的,否则若得出多个后继则是不确定的。

例: 知道 初态 和 终态 推到即可!

语法分析方法【了解】

自上而下语法分析:最左推导,从左至右。给定文法G和源程序串r。从G的开始符号S出发,通过反 复使用产生式对句型中的非终结符进行替换(推导),逐步推导出r。

递归下降思想:原理是利用函数之间的递归调用模拟语法树自上而下的构造过程,是一种自上而下 的语法分析方法。

自下而上语法分析:最右推导,从右至左。从给定的输入串开始,不断寻找子串与文法G中某个产 生式P的候选式进行匹配,并用P的左部代替(归约)之,逐步归约到开始符号S。

移进规约思想:设置一个栈,将输入符号逐个移进栈中,栈顶形成某产生式的右部时,就用左部去 代替,称为归约。很明显,这个思想是通过右部来推导出左部,因此是自下而上语法分析的核心思.

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

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

相关文章

从http请求过程分析为何不同业务的http请求都可以使用默认的缺省端口80,8080等

问题: http上传请求时url地址中一般无显示指定端口号,这时会使用默认的80端口;但是可能不止一个业务需要用到http请求,技术上web服务端那边肯定无法根据业务逻辑的数据格式去分别解析区分它们;因为业务是事先无法预知的&#xff…

【Spring Cloud实战】Consul服务注册与发现

个人博客上有很多干货,欢迎访问:https://javaxiaobear.gitee.io/ 1、简介 https://www.consul.io/docs/intro Consul is a service mesh solution providing a full featured control plane with service discovery, configuration, and segmentation f…

Flink-经典案例WordCount快速上手以及安装部署

2 Flink快速上手 2.1 批处理api 经典案例WordCount public class BatchWordCount {public static void main(String[] args) throws Exception {//1.创建一个执行环境ExecutionEnvironment env ExecutionEnvironment.getExecutionEnvironment();//2.从文件中读取数据//得到…

[附源码]java毕业设计基于Web留学管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Linux下C++开发笔记--编译静态链接库和动态链接库

目录 1--前言 2--生成静态链接库 3--生成动态链接库 1--前言 承接上一篇Linux下C开发笔记(g命令的使用笔记),依据教程记录学习笔记。 2--生成静态链接库 ①回顾项目结构: ​ ②汇编,生成swap.o文件 cd srcg sw…

基于simulink的牛鞭效应模型建模与仿真

欢迎订阅《FPGA学习入门100例教程》、《MATLAB学习入门100例教程》 目录 一、理论基础 二、核心程序 三、测试结果 一、理论基础 牛鞭效应,是经济学中的一个术语,它也被称为需求放大效应。牛鞭效应指的是当信息流从最终客户端传输到原始供应商时&…

9.行为建模(Behavioral modeling)

9.1行为模型概述 Verilog行为模型包含控制模拟和操纵先前描述的数据类型变量的过程语句。这些语句包含在程序中。每个过程都有一个与其关联的活动流。活动开始于initial和always语句。每个initial语句和每个always语句都会启动一个单独的活动流。所有活动流都是并发的&…

【机器学习】线性分类【上】广义线性模型

主要参考了B站UP主“shuhuai008”,包含自己的理解。 有任何的书写错误、排版错误、概念错误等,希望大家包含指正。 由于字数限制,分成两篇博客。 【机器学习】线性分类【上】广义线性模型 【机器学习】线性分类【下】经典线性分类算法 1. 线…

C语言实现线索化二叉树(先序、中序、后序)

》》如何用C语言构建一颗二叉树? 第一种方法: ThreadTree A = (ThreadTree)malloc(sizeof(ThreadNode));A->data = { A };A->ltag = 0;A->rtag = 0;A->lchild = NULL;A->rchild = NULL;ThreadTree B = (ThreadTree)malloc(sizeof(ThreadNode));B->data =…

【python自动化】使用关键字驱动实现appium自动化

在写app自动化用例时,尝试用了关键字驱动的框架 记录一下自己对关键字驱动的理解: 1 关键字驱动指将用例步骤的操作封装为关键字,比如定位元素、点击元素、获取元素属性值、断言,这些都是操作关键字 2 在excel中按照用例执行过程&…

Java8方法引用和Lambda表达式实例源码+笔记分享

前言 Java8的lambda表达式,通过lambda表达式可以替代我们之前写的匿名内部类来实现接口。lambda表达式本质是一个匿名函数。 1、lambda表达式本质是一个匿名函数。 1 package com.demo.main;2 3 public class LambdaMain {4 5 public static void main(String[…

环辛炔衍生物DBCO-NH2,amine,Acid,NHS,Maleimide无铜点击反应

DBCO对叠氮化物具有非常高的反应选择性,可用于修饰生物分子,包括肽、蛋白质、酶、活细胞、整个生物体等。在生理温度和pH值范围内,DBCO基团不与胺或羟基反应,DBCO也与叠氮化物基团发生反应DBCO也称为ADIBO(氮杂二苯并环…

2022.11.15-二分图专练

目录 50 years, 50 colors(HDU-1498) Uncle Toms Inherited Land*(HDU-1507) Matrix(HDU-2119) Arbiter(HDU-3118) [ZJOI2007]矩阵游戏(黑暗爆炸1059) Jimmy’s Assignment(HDU-1845) 50 years, 50 colors(HDU-1498) 原题链接:传送门 题意:一个n*n的矩阵中,…

第四章. Pandas进阶—数据格式化

第四章. Pandas进阶 4.1 数据格式化 1.设置小数位数(round函数) DataFrame.round(decimals0,*args,**kwargs)参数说明: decimals:用于设置保留的小数位数 args,kwargs:附加关键字的参数 返回值:返回DataFrame对象 1).示例&#…

HTML常用标签的使用

HTML常用标签的使用 文章目录HTML常用标签的使用1.排版标签1.1 标题标签(h)1.2 段落标签(p)1.3 换行标签(br)1.4 水平线标签(hr)2.文本格式化标签(strong、ins、em、del&…

Vue(七)——Vue中的Ajax

目录 Vue脚手架配置代理 插槽 默认插槽 具名插槽 作用域插槽 Vue脚手架配置代理 本案例需要下载axios库:npm install axios 1.配置类方式(实现WebMvcConfigurer) 2.使用CrossOrigin注解 3.使用nginx反向代理解决跨域 4.Vue中配置代理服务器 代理服务器怎…

懒人的法宝——办公自动化!

没错!办公自动化他来了!果然,代码都是懒人发明出来的。接下来让我们一起来看看这个批改作业的自动化脚本吧!学会了这种思想可以帮助我们高效解决许多重复性的工作,比如说批量修改文件的名称、类型、位置等等&#xff0…

【附源码】计算机毕业设计JAVA计算机系教师教研科研管理系统

项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: Springboot mybatis Maven Vue 等等组成,B/…

计算机网络-网络层(BGP协议,IP组播,IGMP协议与组播路由选择协议)

文章目录1. BGP协议BGP协议报文格式2. RIP,OSPF,BGP协议对比3. IP组播4. IGMP协议与组播路由选择协议1. BGP协议 与其他自治系统的邻站BGP发言人(BGP边界路由器)交换信息 BGP边界路由器之间交换网络可达性的信息,即要…

C++Qt开发——SMTP协议

1. SMTP协议简介 SMTP协议:全称为 Simple Mail Transfer Protocol,简单邮件传输协议。它定义了邮件客户端软件和SMTP邮件服务器之间,以及两台SMTP邮件服务器之间的通信规则。 SMTP是一个相对简单的基于文本的协议。在其之上指定了一条消息的…