编译原理-程序设计语言的设计

news2024/11/24 5:33:45

机器语言:二进制、机器相关
汇编语言:助记符、机器相关(机器语言与汇编语言都是低级语言)
高级语言:接近自然语言、机器无关
 

把一种语言程序编写的转换成完全等效的另一种语言编写的程序为翻译

编译程序: 源程序语言是高级语言,目标程序语言是汇编语言或机器语言之类的低级语言,这样的翻译程序称为编译程序

翻译汇编语言的程序称为汇编程序

翻译高级语言的程序称为编译程序。所以编译程序是一种翻译程序。

编译程序与解释程序:

(1)编译程序会产生目标程序;而解释程序不产生目标程序; (2)编译程序实现起来比较复杂;而解释程序本身实现起来比较简单; (3)编译程序效率比较高;而解释程序运行效率比较低,需对语法、词法、语义等进行检测;可移植性高。

变量 存储单元及它的名称由变量的概念来代替;
     可以代表一个或一组单元,可以修改。

编译程序结构

词法分析、语法分析、语义分析与中间代码生成、代码优化、目标代码生成

其中(中间代码生成和代码优化不是每个编译程序必须的)

​​​​​​​

绑定

绑定:一个实体(或对象)与其某种属性建立起某种联系的 过程,称为绑定。
静态绑定:凡是在编译时能确定的属性,称为静态属性;
      若绑定在编译时完成,运行时不改变,称为静态绑定。
动态绑定:凡是在运行时才能确定的属性称为动态的。
          若绑定在运行时完成,称为动态绑定。
 

变量及其属性

变量是对一个(或若干个)存储单元的抽象,赋值语句则是修改存储单元内容的抽象

变量除名字外,具有四个属性:作用域、生存期、值和类型。

变量的作用域:可以访问该变量的程序范围。

静态作用域绑定:按照程序的语法结构定义变量的作用域。
动态作用域绑定:按照程序的执行动态地定义变量的作用域。

变量的生存期:

一个存储区绑定于一个变量的时间区间,称为变量的生存期。

变量的值:即变量对应存储区单元的内容,变量与它的值的绑定是动态的

    变量的初始化,几种处理方法:
        不初始化则出错
        随机
        缺省值0

变量的类型

类型的定义:    变量的类型是与变量相关联的值的类,以及对这些值进行的操作的说明。

静态绑定:通过说明语句完成 如:Pascal、Fortran、C

动态绑定:执行时隐式说明,且动态变化

         
虚拟机

虚拟机是由软件实现的机器。

翻译汇编语言的程序称为汇编程序(器)

翻译高级语言的程序称为编译程序(器)

机器语言就是二进制。汇编语言类似三元式

高级语言:

直观、自然、易于理解

易读、易写、易于交流、出版和存档

一般都是独立于机器的,易于移植

程序单元

程序单元:程序执行过程中的独立调用单元; 如子程序、分程序、过程等。

在编译时,单元表示是该单元的源程序。

运行时,单元表示由一个代码段和一个活动记录组成,称为单元实例
活动记录:执行单元所需要的信息,以及该单元的局部变量所绑定的数据对象的存储区。

引用环境:局部变量+非局部变量

别名:同一单元的引用环境中有两个变量绑定于同一数据对象,称这些变量具有别名。

副作用:对绑定于一个非局部变量的对象进行修改时,将产生副作用。

程序单元可以递归激活,从而一个单元可以有很多个实例,但代码段相同。不同的仅仅是活动记录。

数据类型  

数据类型实质上是对存储器中所存储的数据进行抽象。 它包含一组值的集合和一组对这组值的操作的集合


数据类型的作用

实现了数据抽象
使程序员从机器的具体特征中解脱出来
提高了编程效率

数据类型的分类

内部类型:语言定义的
自定义类型:用户定义的

内部类型的优越性

内部类型是对硬件基本位串的抽象。

1.基本表示的不可见性:基本位串对程序员是不可见的。
优点(程序员): 导致不同的程序设计风格、可写性、可读性、可修改性

2.编译时能检查变

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

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

相关文章

*MySQL事务

目录 一、概念理解: 二、回滚(rollback) 三、事务的四大特性(ACID): 1)原子性(Atomicity) 2)一致性(Consistency) 3)隔…

k8s nginx.conf配置文件配置

无状态nginx配置nginx.conf覆盖容器配置nginx.conf 代码:events {worker_connections 1024; }http {include /etc/nginx/mime.types;default_type application/octet-stream;log_format main $remote_addr - $remote_user [$time_local] "$request&q…

服务器数据恢复—vxfs文件系统元数据被破坏的数据恢复案例

服务器存储数据恢复环境: 某品牌MSA2000服务器存储中有一组由8块SAS硬盘组建的raid5磁盘阵列,其中包含一块热备盘。分配了6个LUN,均分配给HP-Unix小机使用。磁盘分区由LVM进行管理,存放的数据主要为Oracle数据库及OA服务端。 服务…

iOS--oc对象,类,和元类本质

iOS--oc对象,类,和元类本质 前言实例对象的具体结构自定义类对象的结构继承关系 类信息的存放对isa、superclass总结 前言 最近在学习runtime的过程中,发现其中消息发送-动态方法解析-消息转发中涉及到了大量的类与对象的底层知识&#xff0…

【LeetCode滑动窗口算法】长度最小的子数组 难度:中等

我们先看一下题目描述&#xff1a; 解法一&#xff1a;暴力枚举 时间复杂度&#xff1a;o(n^3) class Solution { public:int minSubArrayLen(int target, vector<int>& nums){int i 0, j 0;vector<int> v;for (;i < nums.size();i){int sum nums[i];fo…

从ES的JVM配置起步思考JVM常见参数优化

目录 一、真实查看参数 &#xff08;一&#xff09;-XX:PrintCommandLineFlags &#xff08;二&#xff09;-XX:PrintFlagsFinal 二、堆空间的配置 &#xff08;一&#xff09;默认配置 &#xff08;二&#xff09;配置Elasticsearch堆内存时&#xff0c;将初始大小设置为…

.net8 blazor auto模式很爽(二)用.net8创建Blazor自动模式项目

在vs2022中创建新项目&#xff0c;在搜索框里输入blazor&#xff0c;选择blazor web app 在其他信息里框架选.net8&#xff0c;模式选择auto,点创建。 我们可以看到&#xff0c;vs自动创建了两个项目。一个叫BlazorApp1&#xff0c;另外一个叫BlazorApp1.Client。没有Client就…

链表题目之指定区间处理

前言 链表中有一些题目是需要知道并且记住对应的技巧的&#xff0c;有一些题目就是基本的链表技巧手动模拟推演注意细节等。 对于需要知道并且记住对应技巧的题目会有专门的一栏进行讲解&#xff0c;此类题目主要有&#xff1a;相交链表、环形链表、回文链表等&#xff0c;这些…

网络地图的发展历程

位置以及我们与位置的互动方式已在我们的生活中无处不在。我们的网络地图技术发展到今天这一步&#xff0c;涉及一系列个人、公司和想法&#xff0c;这些最终塑造了我们与世界的互动方式。这篇文章能帮助您了解我们是如何一步步走到今天的。即网络地图的发展历史! 制图学的简要…

笨蛋学算法之LeetCodeHot100_4_移动零(Java)

package com.lsy.leetcodehot100;public class _Hot4_移动零 {public static int[] moveZeroes(int[] nums){//判断数组是否为nullif(numsnull && nums.length0){return null;}/*** 初始化两个指针 i 和 noZero&#xff0c;其中 i 用于遍历数组&#xff0c;noZero 用于…

【讲解下Stylus入门方法】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

探索Facebook对世界各地文化的影响

随着数字化时代的到来&#xff0c;社交媒体已成为连接世界各地人们的重要平台之一。而在这个领域的巨头之一&#xff0c;Facebook不仅是人们沟通交流的场所&#xff0c;更是一座桥梁&#xff0c;将不同地域、文化的人们联系在一起。本文将探索Facebook对世界各地文化的影响&…

vue2.0和vue3.0获取当前文件夹下的所有vue文件区别

文章目录 vue2.0vue3.0当前文件夹下的所有vue文件区别 vue2.0 在Vue 2.0项目中&#xff0c;要获取当前文件夹下的所有.vue文件&#xff0c;你可以使用Node.js的文件系统模块&#xff08;fs&#xff09;和路径模块&#xff08;path&#xff09;来实现。以下是一个简单的示例&am…

IO流打印流

打印流 IO流打印流是Java中用来将数据打印到输出流的工具。打印流提供了方便的方法来格式化和输出数据&#xff0c;可以用于将数据输出到控制台、文件或网络连接。 分类:打印流一般是指:PrintStream&#xff0c;PrintWriter两个类 特点1:打印流只操作文件目的地&#xff0c;…

SwiftUI中自定义Shape与AnimateableData的使用

上一篇文章主要介绍了一下在SwiftUI中如何自定义Shape&#xff0c;本篇文章主要介绍Shape中的 一个关键的属性AnimatableData&#xff0c;它用于定义可以被动画化的数据。通过实现 Animatable 协议&#xff0c;可以让自定义视图或图形响应动画变化。 AnimatableData 是 Animata…

Github 2024-06-13 Go开源项目日报Top10

根据Github Trendings的统计,今日(2024-06-13统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10TypeScript项目1Shell项目1多存储文件列表/WebDAV程序 创建周期:1265 天开发语言:Go协议类型:GNU Affero General Public License v…

【安装笔记-20240612-Linux-内网穿透服务之cpolar极点云】

安装笔记-系列文章目录 安装笔记-20240612-Linux-内网穿透服务之 cpolar 极点云 文章目录 安装笔记-系列文章目录安装笔记-20240612-Linux-内网穿透服务之 cpolar 极点云 前言一、软件介绍名称&#xff1a;cpolar极点云主页官方介绍 二、安装步骤测试版本&#xff1a;openwrt-…

.net8 blazor auto模式很爽(一)Blazor WebAssembly(WASM)与Server在.net8中的完美结合

我们在上一章中说到Blazor的WASM和Server模式各有优缺点。在.net8之前&#xff0c;这两种模式是独立的&#xff0c;你的项目只能选其中之一。但是.net8出现了一种叫自动模式&#xff0c;官方解释是&#xff1a;开发者在创建 Blazor 项目时不再显式区分是 Blazor Server 还是 Bl…

TIA博途Wincc与S7-1500 (V2.9) 或S7-1200 (V4.5) 及更高版本固件PLC通信失败的原因汇总

TIA博途Wincc与S7-1500 (V2.9) 或S7-1200 (V4.5) 及更高版本固件PLC通信失败的原因汇总 从TIA Portal V17开始,对于S7-1500PLC新增了V2.9的固件,S7-1200新增了V4.5的固件,PLC侧默认激活了“仅支持PG/PC和HMI的安全通信”, 注意事项1 如果PLC侧激活了“仅支持PG/PC和HMI的安…

java基础知识漏洞二

位移运算符 移位运算符是最基本的运算符之一&#xff0c;几乎每种编程语言都包含这一运算符。移位操作中&#xff0c;被操作的数据被视为二进制数&#xff0c;移位就是将其向左或向右移动若干位的运算。 移位运算符在各种框架以及 JDK 自身的源码中使用还是挺广泛的&#xff…