程序设计语言(做题)

news2024/12/23 1:16:23

程序设计语言部分

    • 一、高级语言与低级语言
      • 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、知识点

  • 声明语句存入符号表,执行语句是翻译成中间代码或目标代码

五、上下文无关文法(做题)

大多数程序设计语言的语法规则用上下文无关文法描述其语法。
包含开始符号和终止符号,每一部分称为产生式。一般的题目都是根据下面的产生式,可以推导出什么公式…
在这里插入图片描述

六、语法树的中缀式、后缀式(逆波兰式)

语法树根据中序遍历遍历出来的树为中缀式,根据后序遍历遍历出来的树为后缀式。
语法树其实就是二叉树,最顶部为根节点,左边为左子树、右边为右子树,既无左子树又无右子树的节点称为叶子结点。
中序遍历语法树的规则是:左中右
后序遍历语法树的规则是:左右中
(啧,不好表示,后面增加动画演示)
我们经常见的式子就是中缀式,题目一般是给你中缀式,求后缀式,或者给你语法树,求后缀式(或者反着)。

当提供了后缀式时,可借助**栈(先入后出)**来表现语法树或者求中缀式。将数字挨个放入栈中,一旦遇到运算符号,就将栈中的两位取出,分别放在运算符的右边和左边,然后将其看做一个整体,放入栈中。

当提供了中缀式,要求后缀式时,按照优先级大小遍历,当优先级相同时,从右向左遍历。

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

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

相关文章

(指针内容)当你申请一个变量,在这期间内存会发生什么?

一. 前言C语言是比较偏底层的语言,为什么他比较偏底层,就是因为他的很多操作都是直接针对内存操作的。这篇我们就来讲解C语言的一大特点,也是难点,指针和指针操作。这篇文章我会先从基本类型的存储过程和原理讲起,然后…

【Docker】命令总结

目录 1.镜像命令 1.1拉取镜像 1.2查看镜像 1.3保存镜像 1.4导入镜像 2.容器命令 2.1创建并运行容器 2.2删除容器 2.3进入容器 2.4查看容器状态 2.5暂停容器 2.6恢复容器 2.7停止容器 2.8启动容器 2.8查看容器日志 3.数据卷命令 3.1创建数据卷 3.2查看所有数据…

C语言刷题(2)——“C”

各位CSDN的uu们你们好呀,今天小雅兰来复习一下之前所学过的内容噢,复习的方式,那当然是刷题啦,现在,就让我们进入C语言的世界吧 当然,题目还是来源于牛客网 完完全全零基础 编程语言初学训练营_在线编程题…

OP-TEE使用过程记录

1 项目概述 1.1项目需求 为确保用户的数据的安全,ARM公司提出了trustzone技术,个人将trustzone理解为cortex的虚拟化技术。在不增加硬件的情况下,使用trustzone技术达到硬件加密的效果。 1.2重点概念简要介绍 1.2.1 TrustZone机制&#x…

电子科技大学数据库与软件工程三

适用于网工和物联网专业 目录 一、实验目的 二、实验内容 三、实验软件 四、实验步骤及数据记录 1.子查询 2. 伪列 3.数据库对象 4. 块、存储过程和触发器 五、实验结论及思考题 实验结论: 思考题: 六、总结及心得体会 七、对本实验过程及方…

【华为OD机试模拟题】用 C++ 实现 - 关联子串(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 获得完美走位(2023.Q1) 文章目录 最近更新的博客使用说明关联子串题目输入输出示例一输入输出说明示例一输入输出Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华…

Spring的Bean的生命周期,Bean的装配和注入

Spring容器启动获得BeanDefinition对象中有一个scope 属性。该属性控制着bean对象的作用域。本章节介绍Bean的作用域及生命周期,了解bean是怎么来的又怎么没的。 一、Bean的作用域 在Bean容器启动会读取bean的xml配置文件,然后将xml中每个bean元素分别转…

Bean作用域和生命周期

目录 Bean作用域的例子 作用域定义 Bean的六种作用域 设置作用域 Spring的执行过程和Bean的生命周期 Spring的主要执行流程 Bean的生命周期 在上篇博客中我们使用Spring存储和获取Bean,因此Bean是Spring中最重要的资源,今天这篇博客就深入了解Bean对象 Bean作用域的例子 …

redis(8)有序集合Zset

有序集合Zset Redis 有序集合 zset 与普通集合 set 非常相似,是一个没有重复元素的字符串集合。 不同之处是有序集合的每个成员都关联了一个评分(score),这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的&#xf…

如何在Linux中实现进程间通信

致前行路上的人: 要努力,但不要着急,繁花锦簇,硕果累累都需要过程! 目录 1.进程间通信介绍 1.1进程间通信的目的 1.2进程间通信发展 1.3进程间通信分类 1.4进程间通信的本质 2.管道 2.1什么是管道 2.2管道与进程的关系…

华为OD机试题,用 Java 解【玩牌高手】问题

最近更新的博客 华为OD机试 - 猴子爬山 | 机试题算法思路 【2023】华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】华为OD机试 - 非严格递增连续数字序列 | 机试题算法思路 【2023】华为OD机试 - 消消乐游戏(Java) | 机试题算法思路 【2023】华为OD机试 - 组成最大数…

智能算法实现PID智能车控制系统

智能算法实现PID智能车控制系统摘要关键词第一章绪论1.1智能车概述1.2智能PID研究现状1.3本文工作第二章 PID控制简介第三章 内模PID简介3.1 内模PID控制第四章内模智能PID智能车控制系统设计4.1 系统设计4.2内模控制原理第五章 系统仿真及结果分析5.1 系统仿真分析5.2 控制效果…

前端资源浏览器渲染原理

浏览器的渲染页面过程 HTML解析过程 一般情况下服务器会给浏览器返回 xx.html 文件 解析html 其实就是 Dom 树的构建过程 我们可以根据以下html 结构 来简单的分析出 html 的解析过程 解析CSS 规则树 在解析的过程中,如果遇到CSS的link元素,那么会由浏览…

分享 7 个有用的 JavaScript 库,也许你会用的上

使用这7个库,加速你的项目开发当我们可以通过使用库轻松实现相同的结果时,为什么还要编写自定义功能?开发人员最好的朋友和救星就是这些第三方库。我相信一个好的项目会利用一些可用的最佳库。本系列就是帮助前端开发者整理一些相关的优秀的J…

一文了解互联网中的UI设计师

(点击即可收听)一文了解UI设计师UI设计师是什么岗位,以及它的职责所在是什么,初入职场,今天带你一起来了解一下宏观上:设计师微观上: 上游对接产品经理,根据产品经理产出的PRD(也就是产品文档手册),以及产品原型,设计产品的UI界面,产出设计稿(如:蓝湖,Sk…

vite:常见的配置

最近在捣鼓一下vite,因为自己一直在使用react,就选择vite、react来体验一下vite。 使用最简单的方法创建一个应用:yarn create vite,然后选择react框架。 vite默认配置是使用了defineConfig工具函数: import { defi…

TCP协议原理二

文章目录四、滑动窗口二、流量窗口三、拥塞控制四、滑动窗口 前面我们学习了 确认应答,超时重传,连接管理,这些机制都为我们TCP的可靠性提供了保证,当然在保证TCP的可靠性的同时,传输效率也受到了一定的影响&#xff…

[创业之路-56] :职场真相:越便宜的员工其实越贵

引言:创业公司由于资金的限制,喜欢招聘经验不多、价格便宜的员工,殊不知,放在宏观的视角看,越发发现,越便宜的员工其实越贵,虽然他们能加班、好学习、听话,但创业公司不是大学&#…

【华为OD机试模拟题】用 C++ 实现 - 剩余可用字符集 or @分割可用字符集(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 获得完美走位(2023.Q1) 文章目录 最近更新的博客使用说明剩余可用字符集 or @分割可用字符集题目输入输出示例一输入输出说明Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才…

LLVM高级架构介绍

LLVM 为什么要开一个LLVM的新坑呢? 我从智能穿戴转行到芯片软件行业,从事编译器开发,不过是AI编译器。不过基本的传统编译器还是绕不过去啊,所以开始学习LLVM,后面开始学习TVM,MLIR。 LLVM GitHub地址 L…