软件设计师笔记系列(二)

2023-09-21 09:32:37

😀前言
在计算机科学的世界里,程序设计语言是一个核心组成部分,它不仅仅是计算机和程序员之间的交流桥梁,更是实现各种软件和应用的基石。理解程序设计语言的基本概念和原理是每一个 aspiring 程序员和计算机科学学生的必修课程。
.
在本章中,我们将深入探讨程序设计语言的基本概念,包括解释器和编译器的工作原理,函数的定义和调用方式,以及编译程序的各个阶段和它们的作用。我们还将讨论符号表的重要性和它在编译过程中的角色。
.
通过学习本章,你将建立一个坚实的基础,理解程序是如何从源代码转换成可以在计算机上运行的程序的,以及程序设计语言如何帮助我们创建复杂的软件系统。

🏠个人主页:尘觉主页
在这里插入图片描述

🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,您的满意是我的动力😉😉

在csdn获奖荣誉: 🏆csdn城市之星2名
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 💓Java全栈群星计划top前5
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 🤗 端午大礼包获得者
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 🥰阿里云专家博主
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 😉亚马逊DyamoDB结营

💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看🥰
如果文章有什么需要改进的地方还请大佬不吝赐教 先在次感谢啦😊

第二章 程序设计语言基础知识(3~6分)

2.1 程序设计语言概述

2.1.1 程序设计语言的基本概念

解释器:翻译源程序时不生产独立的目标程序。

解释程序和源程序要参与到程序的运行过程中。

编译器:翻译时将源程序翻译成独立保存的目标程序。

机器上运行的是与源程序等价的目标程序,源程序和编译程序都不再参与目标程序的运行过程。

许多程序设计语言规定,程序中的数据必须具有类型,其作用是:

  1. 便于为数据合理分配存储单元
  2. 便于对参与表达式计算的数据对象进行检查
  3. 便于规定数据对象的取值范围及能够进行的运算
2.1.2 程序设计语言的基本成分
函数定义

函数的定义包括两部分:函数首部和函数体。函数的定义描述了函数做什么和怎么做。

函数定义的一般形式为:

返回值的类型 函数名(形式参数表) //函数首部 函数名(实参表);

{

​ 函数体;

}

(1)值调用(Call by Value)。若实现函数调用时将实参的值传递给相应的形参, 则称为是传值调用。在这种方式下形参不能向实参传递信息。

(2)引用调用(Call by Reference)。引用是 C++ 中引入的概念,当形式参数为引用类型时,形参名实际上是实参的别名,函数中对形参的访问和修改实际上就是针对相应实参所做的访问和改变。

传值调用:

将实参的值传递给形参,实参可以是变量、常量和表达式。

不可以实现形参和实参间双向传递数据的效果。

传引用(地址)调用:

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

2.2.2 编译程序基本原理

编译方式:词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成
解释方式:词法分析、语法分析、语义分析

编译器和解释器都不可省略词法分析、语法分析、语义分析且顺序不可交换
即词法分析、语法分析、语义分析是必须的。

编译器方式中中间代码生成和代码优化不是必要,可省略。
即编译器方式可以在词法分析、语法分析、语义分析阶段后直接生成目标代码

符号表:不断收集、记录和使用源程序中一些相关符号的类型和特征等信息,并将其存入符号表中。记录源程序中各个字符的必要信息,以辅助语义的正确性检查和代码生成。

1)词法分析

输入:源程序

输出:记号流

词法分析阶段的主要作用是 分析构成程序的字符及由字符按照构造规则构成的符号,是否符合程序语言的规定。

2)语法分析

输入:记号流

输出:语法树(分析树)

语义分析阶段可以发现程序中所有的语法错误

语法分析阶段的主要作用是 对各条语句的结构进行合法性分析,分析程序中的句子结构是否正确。

3)语义分析

输入:语法树(分析树)

语义分析阶段的主要作用是进行类型分析和检查

语义分析阶段不能发现程序中所有的语义错误

语义分析阶段可以发现静态语义错误,不能发现动态语义错误,动态语义错误运行时才能发现

4)中间代码生成
常见的中间代码有:后缀式、三地址码、三元式、四元式和树(图)等形式。

中间代码与具体的机器无关(不依赖具体的机器),可以将不同的高级程序语言翻译成同一种中间代码。

中间代码可以跨平台。

因为与具体的机器无关,使用中间代码有利于进行与机器无关的优化处理和提高编译程序的可移植性。

6)目标代码生成

目标代码生成阶段的工作与具体的机器密切相关

寄存器的分配工作处于目标代码生成阶段

有限自动机是词法分析的一个工具,它能正确地识别正规集

确定的有限自动机( DFA ):对每一个状态来说识别字符后转移的状态是唯一的

不确定的有限自动机( NFA ):对每一个状态来说识别字符后转移的状态是不唯一的

😄总结

经过本章的学习,我们已经掌握了程序设计语言的基本知识和原理。我们了解了解释器和编译器的区别和各自的工作方式,以及函数定义和调用的不同方式。

我们还深入探讨了编译程序的基本原理,包括词法分析、语法分析、语义分析和代码生成等阶段,以及它们在将源代码转换成目标代码的过程中的作用。我们也了解了符号表的重要性和它在帮助编译器检查源代码的正确性和生成目标代码的过程中的角色。

通过理解程序设计语言的这些基本概念和原理,我们为自己打下了一个坚实的基础,为进一步学习程序设计和开发复杂的软件系统做好了准备。

希望通过本章的学习,你已经对程序设计语言有了一个更深更全面的理解,为你未来的学习和职业生涯打下了坚实的基础。

😁热门专栏推荐
想学习vue的可以看看这个

java基础合集

数据库合集

redis合集

nginx合集

linux合集

手写机制

微服务组件

spring_尘觉

springMVC

mybits

等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持

🤔欢迎大家加入我的社区 尘觉社区

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁
希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

更多推荐

基于Qt实现的可视化大屏监控

基于Qt实现的可视化大屏监控先上图基于Qt实现的可视化大屏监控总有人质疑QWidget实现不了炫酷的界面,其实QWidget已经很强大了,虽然很多效果没有现成的框架,所以比不上html5或者安卓这种,但是也能实现很多不错的效果了,而且在嵌入式设备上一样能达到这种效果,这是其他很多框架所不能实现的。本次大屏监控主要使用以

安达发APS|生产计划部门如何提升产量?

在当下制造业中,生产计划的制定和执行对于提高产量、降低成本、保证交货期等方面具有重要意义。随着科技的发展,越来越多的企业开始使用APS生产排程软件来优化生产计划,提高生产效率。本文将从以下几个方面介绍如何利用APS生产排程软件提升产量。1.需求预测与订单管理首先,企业需要对市场需求进行准确预测,以便合理安排生产计划。A

三、数学建模之非线性规划

1、定义2、例题matlan代码求解一、定义1.非线性规划(NonlinearProgramming,简称NLP)是一种数学优化问题的方法,它处理的目标函数或约束条件包含非线性项。与线性规划不同,非线性规划涉及到在非线性约束下寻找最优解。在许多领域都有广泛的应用,包括工程、经济学、物流、金融等。它可以用来解决各种实际问

Vue-01:MVVM数据双向绑定与Vue的生命周期

一、Vue介绍1.1什么是Vue?Vue是一个渐进式的JavaScript框架,用于构建用户界面。"渐进式"意味着Vue的设计理念是逐步增强应用的功能和复杂性,而不是一次性地引入所有功能。这使得开发者可以根据项目需求选择性地使用Vue的不同特性和功能。1.2Vue的优点Vue具有许多实际应用的优点,以下是其中一些:易学

全面了解SpringBoot拦截器

在本文中,我们将详细介绍SpringBoot中的拦截器,包括拦截器的概念、作用、实现方式、执行顺序、生命周期以及高级应用。最后,我们还将探讨拦截器的性能优化策略和常见问题。1.拦截器的概念和作用1.1什么是拦截器拦截器(Interceptor)是一种特殊的组件,它可以在请求处理的过程中对请求和响应进行拦截和处理。拦截器

前端代码规范

HTML编码规约(WC-HTML)-HTML编码规约前言本规约涉及HTML语言的编码风格、最佳实践。参与和反馈对规约有任何意见和建议,欢迎留言讨论:)1【推荐】使用2个空格缩进。统一使用2个空格缩进,不要使用4个空格或tab缩进:<!DOCTYPEhtml><html><head><title>Pagetitle</t

Rust中的结构体

专栏简介:本专栏作为Rust语言的入门级的文章,目的是为了分享关于Rust语言的编程技巧和知识。对于Rust语言,虽然历史没有C++、和python历史悠远,但是它的优点可以说是非常的多,既继承了C++运行速度,还拥有了Java的内存管理,就我个人来说,还有一个优点就是集成化的编译工具cargo,语句风格和C++极其相

rom修改----安卓系列机型如何内置app 如何选择so文件内置

系统内置app的需求在与各工作室对接中操作单中,很多需要内置客户特定的有些app到系统里,这样方便客户刷入固件后直接调用。例如内置apk去开机引导去usb调试默认开启usb安全设置等等。那么很多app内置有不同的反应。有的可以直接内置。有的需要加so才能解决我们先来看一张图片1---直接内置方法将需要的app直接放置系

应急响应LINUX&Windows

应急响应LINUX&Windowslinux文件名说明/etc/passwd用户信息文件/etc/crontab定时任务文件/etc/anacrontab异步定时任务文件/etc/rc.d/rc.local开机启动项/var/log/btmp登录失败日志,使用last命令查看/var/log/cron定时任务执行日志/

内存管理之虚拟内存

本篇遵循内存管理->地址空间->虚拟内存的顺序描述了内存管理、地址空间与虚拟内存见的递进关系,较为详细的介绍了作为在校大学生对于虚拟内存的理解。内存管理引入RAM(内存)是计算机中非常重要的资源,由于造价的昂贵,我们家用的计算机一般是8/16G。对于如此紧俏的资源我们当然需要对它好好管理,尽力做到不浪费,高效压榨它的每

助力工业物联网,工业大数据之服务域:Shell调度测试【三十三】

文章目录知识点07:Shell调度测试知识点08:依赖调度测试知识点09:Python调度测试知识点10:Oracle与MySQL调度方法知识点11:大数据组件调度方法知识点07:Shell调度测试目标:实现Shell命令的调度测试实施需求:使用BashOperator调度执行一条Linux命令代码创建#默认的Airf

热文推荐