【软件设计师】程序语言

1.程序设计语言基本概念

1.1 低级语言与高级语言

低级语言:机器语言和汇编语言称为低级语言

        机器语言指0.,1组成的机器指令序列

        汇编语言指用符号表示指令的语言,如MOV AX,2

 高级语言:从人类的逻辑角度出发,不依赖具体的机器硬件

 1.2 表达式

        前缀表达式:也被称之为波兰表达式,其特点是将操作符放于操作数之前,如:-x+3456

        中缀表达式:即我们常用的表示方法,(3+4)*5-6

        后缀表达式:又被称作逆波兰法,其特定是将操作符置于操作树之后,3 4 +5 * 6 -

前缀表达式:

        从右至左扫描表达式,遇到数字时,将数字压入栈堆,遇到运算符时,弹出栈顶的两个数,用运算符堆他们做运算,并将结果入栈;重复上述操作直到表达式最左端,最后运算得出的值即为表达式的结果

中缀表达式:

        按照平常时的习惯去计算即可

后缀表达式:

        与前缀表达式类似,但是扫描顺序是从左到右

1.3 操作符的优先级

        指针最优,单目运算优于双目运算,如正负号

        先乘除(模),后加减

        先算数运算,后移位运算,最后位运算:1《 3+2 & 7 相当于 (1<<(3+2)) & 7

        逻辑运算最后运算

 1.4 过程控制        

        参数传递方式:

        传值调用,数据传送是单向的

        引用调用(又称之为地址调用),数据传送是双向的

2.汇编、编译、解释系统

 2.1 编译程序和解释程序

高级语言和汇编语言编写的程序称为源程序,源程序不能直接在计算机上执行

        如果源程序是汇编语言写的,则需要一个称为汇报程序的翻译程序将其翻译为目标程序,然后才能执行

        如果源程序是为高级语言时,这个翻译程序称为编译程序(编译器)

        按源程序中语句的执行顺序,逐条翻译并立即执行相关功能的处理程序,称为解释程序

        编译方式生成逻辑上与源程序等价的目标程序,解释方式不生成;编译程序不参与用户程序的运行控制,而解释程序需要参加;编译方式下在机器上运行的目标程序完全独立与源程序

        将高级语言翻译程目标程序的是编译程序

        汇编程序先将源程序中的伪代码翻译成机器代码,然后再翻译指令语句

        使用汇编语言编写的程序需要汇编程序翻译程机器语言,汇编输入的是用汇编语言书写的源程序,输出的是用机器语言表示的目标程序

2.2 程序的执行方式

1.编译执行

       按编译方式在计算机上执行高级语言编写的程序,需经过两个阶段--编译阶段(把源程序翻译为目标程序)和运行阶段(真正执行此目标程序)

        优点:执行效率低,占用资源小

        缺点:兼容性差

        编译过程中为变量分配存储单元所用的地址是逻辑地址,程序运行时再映射为物理地址

2.解释执行

        源程序的每个语句一经解释就立即执行 

        优点:可移植性较好、开发速度快、与用户通讯方便

        缺点:效率低

2.3 编译程序工作过程 

         编译程序的工作过程包括:词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成 (必须按顺序)

       解释方式包含词法分析、语法分析、语义分析

       中间代码生成和代码优化不是每个编译器都必须要有的

      词法分析阶段:

        输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个单词,删掉无用的信息,报告分析时的错误

        一个程序语言的基本语法符号分为五类:关键字、标识符、常量、运算符、界符等

        词法分析器所输出的单词符号常常表示为如下二元式:(单词种别,单词符号的属性值),由于属性值长度不固定,所以我们这边主要放的是指针

        描述词法规则常用:正则式和有限自动机         

        语法分析阶段:

        词法分析以单词符号作为少数。分析单词符号是否形成符号语法规则的语法单位,如表达式、赋值、循环等,判断程序语句的形式是否正确

        输入:记号流

        按语法规则分析每条语句是否有正确的逻辑结构

        语法分析的方法:自上而下分析法、自下而上分析法 

        编译正确的程序必然不包括语法错误,如果出错就叫编译错误。

        语义分析阶段:

        检查源代码是否存在语义错误,并收集类型信息以供后面的代码生成阶段使用,只有语法和语义都正确的源程序才能翻译成正确的目标代码

        语义分析的主要工作是进行各类型分析和检查。赋值语句的右端和左端的类型不匹配。表达式的除法为0等         

        语义分析阶段不可以发现程序中所有的语义错误;程序运行过程中陷入死循环,则可能的原因是程序中存在动态的语义错误

        中间代码生成阶段:

        中间代码的生成阶段的工作是根据语义分析的输出生成中间代码

        中间代码是一种简单且有明确含义的记号系统,可以有若干个形式,常见的有逆波兰记号(后缀式)、四元式、三元式和树

        他们的共同特征是代码的方式与具体的机器无关,不需在指令结构上保存一致,可以提高移植性 

        代码优化阶段:

        代码优化阶段是对前阶段产生的中间代码进行变换或进行改造,目的是使生成的目标代码更加高级,即省时间和省空间 

        目标代码生成阶段:

        是把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。这是编译的最后阶段,它的工作与硬件系统的结构和指令的含义有关 

        分配寄存器的工作在此阶段,因为在这一阶段中间代码变换成特定机器上的绝对指令代码、可重定位的指令代码或汇编指令代码

2.4 词法分析阶段

        (状态转换图与正规表达式和正规集 )

状态转换图:

        功能:用于识别一定字符串

        要求:状态(即节点)个数有限,至少一个初始状态若干个终止状态,每条边上一定要有字符

正规表达式与正规集(定义和运算):

        状态转换图可以构造词法分析程序,但是属于非形式化描述,正规表达式(简称正规式)是词法分析的形式化表示方法。所谓形式化的方法,是指用一套带有严格规定的符号体系来描述问题的方法

        优点:更加清晰和准确

练习:

2.5 NFA

2.6 符号表

        在高级语言程序进行编译或者解释处理的时候(编译程序工作中),需要不断收集、记录和使用源程序中一些相关符号的类型和特征等信息,并将其存入符号表中        

        编译过程中,对高级程序语句的翻译主要考虑声明语句和可执行语句。对声明语句,主要是将所需要的信息正确地填入合理组织的符号表中,对可执行语句,则是翻译成中间代码或目标代码

2.7 反编译

        编译是将高级语言程序翻译成机器语言程序(汇编形式或机器代码形式),反编译是编译的逆过程。反编译不能把可执行文件还原程高级语言代码,只能转换程功能上等价的汇编程序 

2.8 程序设计语言

        程序设计语言基本成分:数据、运算、控制和传输等

        程序设计语言控制成分:顺序、选择、循环

        程序设计语言的语义:静态语义(分析方法:语法制导翻译;基本思想:将语言结构的语义以属性的形式赋予代表此结构的文法符号,而属性的计算以语义规则的形式赋予文法的产生式)和动态语义

2.9 计算机程序语言

         LISP是一种函数式编程语言(是第一个声名系内函数式程序设计语言),是一种通用高级计算机程序语言,长期以来垄断人工智能领域的应用。

        系内过程式:C、Fortran

        面向对象:java、C#、

        弱类型语言(动态类型语言)

2.10 语言 

        解释型程序设计语言:JAVA、PYTHON、JAVASCRIPT

        脚本语言(“扩建的语言”、动态语言):PYTHON、JAVASCRIPT

        编译型程序设计语言:C/C++(常用于进行系统级软件的开发,现行操作系统都是均由C/C++开发的)

        脚本语言是为了缩短编写-编译-链接-运行过程创建的计算机编程语言,用来控制软件应用程序。脚本通常以文本如ASCII保存,只在被调用的时候进行解释或编译。脚本语言常用于描述格式化和链接,编程效率不如编译型语言。脚本语言采用解释方式实现。脚本语言一般运行在解释器或虚拟机中,一般通过脚本引擎解释执行,不产生独立保存的目标程序。用以编写独立程序和快速脚本的语言.属于动态语言,其程序结构可以在运行中改变.脚本语言一般是面向字符的(缺点:不方便调试,命名不规范会读不懂/

        C语言是处于汇编语言和高级语言之间的一种中间型程序设计语言,常被称为中级语言,既有高级语言的基本特点,也有汇编语言面向硬件和系统可以直接访问硬件的功能,其属于静态语言,其所有成分可以在编译时确定

        脚本语言都是动态语言,而动态语言都是解释型语言,不管他们是否面向对象的语言

2.11 HTML

 关于样式表:     

          <!-- -->是注释,不能定义CSS样式表

        用@import引入样式表文件

        在<head>标签内定义CSS样式

        <link>用来链接网上可访问的CSS样式文件

        <align>对齐方式

        <mailto>可以定义一个指向电子邮件地址的超链接,通过该链接可以在internet发送电子邮件

        <HR>分割线

        <I>斜体

        <vlink>显示链接被点击之后的颜色

        <alink>表示正在被点击的链接的颜色

        background用于设置背景图片的URL

        bgcolor用以设置文档整体背景颜色

        tr表示行

        col表示列

        td是单元格

2.12 标记语言

        HTML:超文本标记语言,用于互联网的信息展示。用HTML编写的财务部称为HTML文档,它能独立于各种操作系统平台。HTML是纯文本文档,可以使用记事本,写字板等编辑工具来编写HTML,他们需要通过WWW浏览器解释并显示效果

        XML是可拓展的标记语言。1.0标准发布后被认为是继HTML和JAVA编程语言之后的又一个INTERNET技术。XML丰富了HTML的描述功能,可以描述非常复杂 web页面,如复杂的数学表达式、化学方程式等,XML的特点是结构化、自描述、可拓展浏览器自适应等

        WML是用于WAP的标记语言,其语法与XML一样,是XML的子集

XML语法规范:

        文档第一行必须声明该文件是XML文件以及它所使用的XML规范版本,在文件前面不能够有其他元素或注释

        所有XML文档必须有一个根元素(且只能有一个),XML文档的第一个元素就是根元素

        所有XML文档都必须包含一个单独的标记来定义,所有其他元素必须成对在根元素中嵌套

        所有的元素都可以有子元素,子元素必须正确的嵌套在父元素之间

2.13 传值传递传与引用

传值传递:

        传递方向:单方向

        传递内容:实参的值(可以是变量,函数调用,也可以是常量和表达式

        

引用传递:

        传递方向:双方向

        传递内容:实参的地址(要求实参一定要有地址)

2.14 其他

        程序中常量的值在运行的时候不能改变,变量可以;变量具有相应的存储单元,常量没有;可以对常量赋值,不能对常量赋值

        C语言中全局变量的存储空间在静态数据区分配,变量是内存空间的抽象

        变量常量都具有类型属性    

        程序运行时用户内存空间一般划分为代码区、静态数据区、动态数据区(栈区和堆区)

        对链表进行定义和运算时,数据空间必须采用堆存储分配策略

        

        函数体为空时,在运行时会出现动态语义错误

        强/弱类型指的是语言类型的类型检查的严格程度

        动态类型和静态类型是指变量与类型的绑定方法

        弱类型相对于强类型来说类型检查不严格,比如运行变量类型的隐式转换,运行强制类型转换等

        静态类型指编译源程序期间执行检查,动态类型指编译器(虚拟机)在重新运行时执行类型检查。简单来说,在声名一个变量之后,不能改变其类型的语言,是静态类型,能随时改变其类型的语言,就是动态类型

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

蓝卓入选工信部2023年度“揭榜挂帅”项目

蓝卓“面向多元异构和应用快速开发演化的智能工厂操作系统解决方案”&#xff0c;凭借行业领先的平台技术能力以及数智赋能的硬核实力成功揭榜挂帅。 本次入选不仅代表了蓝卓又一次获得工信部权威专家及国家认可&#xff0c;更是“工厂操作系统”首次在国家层面获得表彰。 智能…

听说京东618裁员?所以日常准备很重要呀

文末有最少必要的面试题&#xff0c;还准备了离线 PDF 版本。 京东也要向市场输送人才了? 这几天看到技术群里不少朋友在讨论京东裁员相关的信息。 我去看了下京东近期的操作&#xff0c;京东内部考勤调整和午休时间缩短&#xff0c;以及强化打卡机制等管理调整&#xff1b;有…

IDEA设置运行内存

1.开启内存指示条​​​​​​​ 查看idea右下角​​​​​​​ 2.环境变量查看ideaVM地址&#xff0c;没有的话那就是默认的配置文件&#xff1a; idea 安装 bin 目录下 idea64.exe.vmoptions 3.去对应路径修改内存参数大小 4.重启IDEA&#xff0c;end

开启Three之旅(二)射线、拾取模型、解决鼠标点击、Hover以及CSS3Renderer点击穿透问题

文章目录 射线RayRaycaster屏幕坐标 --> 设备坐标射线坐标计算&#xff08;Canvas尺寸变化&#xff09;射线拾取层级模型拾取Sprite控制场景场景一&#xff1a;用鼠标模拟hover事件场景二&#xff1a; 选中模型&#xff08;click事件&#xff09;场景三&#xff1a;处理射线…

德勤:中国、印度等对ChatGPT等生成式AI应用,处领先地位

全球四大会计事务所之一的德勤&#xff08;Deloitte&#xff09;在官网发布了一份&#xff0c;名为《Generative AI in Asia Pacific: Young employees lead as employers play catch-up》的深度调查报告。 主要查看中国、澳大利亚、印度、日本、新加坡、韩国、中国台湾等亚太…

2016届蓝桥杯大赛软件类国赛Java大学B组 愤怒小鸟 数学模拟

注意开浮点数 ​​​​ import java.util.Scanner;public class Main {static Scanner scnew Scanner(System.in);public static void main(String[] args) {double t0;int cnt0;double distance1000;while(distance>1){//相撞时间tdistance/60.0;distance-t*20;cnt;}Syste…

【深度学习】xformers与pytorch的版本对应关系

https://github.com/facebookresearch/xformers/tree/v0.0.23 找tag&#xff1a; tag下面写了对应关系&#xff1a; 安装指令就是&#xff1a; pip install xformers0.0.23 --no-deps -i https://download.pytorch.org/whl/cu118

minaActivatorA12+物主锁完美解信号,可登iCloud,有消息通知,支持iOS17.5.1+

原创 IOS福利部落 IOS福利部落 2024-05-26 19:35 福建 Mina Activator A12是一款绕过物主锁界面的解锁工具&#xff0c;可以激活所有iPhone恢复信号&#xff0c;并且支持插卡接打电话、收发短信、4G流量上网&#xff0c;支持iCloud登录&#xff0c;有消息通知&#xff0c;支持i…

如何保证员工在精益变革中始终保持积极的态度?

在当今日新月异的商业环境中&#xff0c;企业为了保持竞争力&#xff0c;需要不断寻求创新和变革。精益变革作为一种提升效率和质量的有效手段&#xff0c;已逐渐成为企业转型升级的关键。然而&#xff0c;变革往往伴随着挑战和不确定性&#xff0c;如何保证员工在精益变革中始…

高职高校实训教学实验室管理系统一体化

盛元广通高职高校实训教学实验室管理系统一体化是确保实验教学有序进行的关键环节。通过更加科学 、有效、合理的管理&#xff0c;明确排课原则、收集课程信息、评估实验室资源、制定排课计划、冲突检测与调整、发布排课信息、调课管理以及数据统计与分析等措施。实现了实验室资…

第14章-蓝牙遥控小车 手把手做蓝牙APP遥控小车 蓝牙串口通讯讲解

本文讲解手机蓝牙如何遥控小车&#xff0c;如何编写串口通信指令 第14章-手机遥控功能 我们要实现蓝牙遥控功能&#xff0c;蓝牙遥控功能要使用:1.单片机的串口、2.蓝牙通信模块 所以我们先调试好:单片机的串口->蓝牙模块->接到一起联调 14.1-电脑控制小车 完成功能…

目标检测——无人机图像数据集

引言 亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 …

【Linux安全】Firewalld防火墙基础

目录 一、Firewalld概述 二、Firewalld和iptables的关系 三、Firewalld网络区域 1、firewalld防火墙预定义了9个区域: 2、firewalld 数据包处理原则 3、firewalld数据处理流程 4、firewalld检查数据包的源地址的规则 四、Firewalld防火墙的配置方法 1、firewalld 命令…

气膜建筑:室内滑雪场的理想选择—轻空间

近年来&#xff0c;室内滑雪场成为越来越多投资者关注的热门项目。随着滑雪运动的普及&#xff0c;滑雪场的生意也愈加红火。对于投资者来说&#xff0c;选择一种省钱又实惠的搭建方案至关重要&#xff0c;而气膜建筑无疑是一个理想的选择。以下将详细介绍气膜建筑在室内滑雪场…

若依微服务实现分布式事务

一、基本介绍 1、什么是分布式事务 指一次大的操作由不同的小操作组成的&#xff0c;这些小的操作分布在不同的服务器上&#xff0c;分布式事务需要保证这些小操作要么全部成功&#xff0c;要么全部失败。从本质上来说&#xff0c;分布式事务就是为了保证不同数据库的数据一致…

RabbitMQ 交换机类型

常用交换机 发布订阅&#xff08;Publish/Subscribe&#xff09;交换机 一个生产者给多个队列发送消息&#xff0c;X 代表交换机。 交换机的作用&#xff1a;类似网络路由器&#xff0c;主要提供转发功能&#xff0c;解决怎么把消息转发到不同的队列中&#xff0c;让消费者从不…

国家数据局发布《数字中国发展报告 (2023年)》

2023年数字中国建设总体呈现发展基础更加夯实、赋能效应更加凸显、数字安全和治理体系更加完善、数字领域国际合作更加深入等四方面特点。 为贯彻落实党中央、国务院关于建设数字中国的重要部署&#xff0c;国家数据局会同有关单位系统总结2023年数字中国建设重要进展和工作成效…

【UE5.1 角色练习】08-传送技能

前言 在上一篇&#xff08;【UE5.1 角色练习】07-AOE技能&#xff09;基础上继续实现人物通过鼠标点击然后传送技能的功能。 效果 步骤 1. 首先需要显示鼠标光标&#xff0c;我们可以在玩家控制器中勾选“显示鼠标光标” 2. 在项目设置中添加一个操作映射&#xff0c;设置按…

2-Django项目进阶--继续学生管理系统

目录 项目框架: urls.py views.py modules.py class_data.html add_and_modify.html add_stu.html 笔记: 继承语法 模板继承总结&#xff1a; 班级添加 add_and_modify.html 修改添加公用一个页面即可 views.py 班级修改 views.py url.py 班级删除 views.py…

嵌入式UI开发-lvgl+wsl2+vscode系列:2、label(标签)+button(按钮)+slider(滑块)控件熟悉及其示例demo运行

文章目录 一、前言二、常见控件示例demo模拟环境运行及接口熟悉&#xff08;重要&#xff09;如何修改示例main函数测试各种示例1、label示例1.1、label示例1&#xff08;标签基础示例&#xff09;1.2、label示例2&#xff08;标签带阴影效果&#xff09;1.3、label示例3&#…