第一章 编译原理绪论(1)——编译原理基本概念

编译原理学习笔记——第一章:绪论 哈工大《编译原理》课程笔记视频链接:https://www.bilibili.com/video/av17649289/?from=search&seid=14811699217915033185课件下载:https://github.com/zhaohang921/Files/tree/master/%E8%AF%BE%E4%BB%B6/%E7%BC%96%E8%AF%91%E5%8E%... 阅读详情

       计算机硬件只懂自己的指令系统,即只能直接执行相应机器语言格式的代码程序,而不能直接执行用高级语言或汇编语言编写的程序。因此,要在计算机上实现除机器语言之外的任一程序设计语言,就首先应使此种语言为计算机所“理解”。解决这一问题的方法有两种:一种是对程序进行翻译;另一种是对程序进行解释。

(1)、翻译程序

       所谓翻译,是指在计算机中放置一个能由计算机直接执行的翻译程序,它以某一种程序设计语言(源语言)所编写的程序(源程序)作为翻译或加工的对象,当计算机执行翻译程序时,就将它翻译为与之等价的另一种语言(目标语言)的程序(目标程序)。“源”和“目标”这两个术语,总是相对于一类特定的翻译程序和翻译过程而言的。如果一个翻译程序的源语言是某种高级语言,其目标语言是相应于某一计算机的汇编语言或机器语言,则称这种翻译程序为编译程序(或编译器)。汇编程序也是一种翻译程序,它的源语言和目标语言分别是相应的汇编语言和机器语言。

       由此可觅,欲按编译方式在计算机上执行用高级语言编写的程序,一般须经过两个阶段:第一阶段称为编译阶段,其任务是由编译程序将源程序编译为目标程序,若目标程序不是机器代码,而是汇编语言程序,则尚需汇编程序再行汇编为机器代码程序;第二阶段称为运行阶段,其任务是在目标计算机上执行编译阶段所得到的目标程序。在执行目标程序时,一般还应有一些子程序配合进行工作,例如:常见的数据格式转换子程序、标准函数计算子程序、浮点解释子程序、数组动态存储分配子程序、下标变量地址计算子程序等都属此类。这些子程序组成一个子程序库,称为运行系统。

       编译程序与运行系统合称为编译系统。源程序的编译(或汇编)和目标程序的执行不一定在同一种计算机上完成。当源程序由另一种计算机进行编译(或汇编)时,我们将此种编译(或汇编)称为交叉编译(或汇编)。

(2)、解释程序

       用高级语言编写的程序也可以通过解释程序来执行。解释程序也以源程序作为它的输入,它与编译程序的主要区别是在解释程序的执行过程中不产生目标程序,而是解释执行源程序本身。这种边翻译边执行的方式工作效率很低,但由于解释程序的结构比编译程序简单,且占用内存较少,在执行过程中也易于在源程序一级对程序进行修改,因此一些规模较小的语言,如BASIC,也常采用此种方式。然而就目前的情况来看,纯粹的解释程序并不多见,通常的做法是把编译和解释作某种程度的结合。

《编译原理》完整笔记 阅读详情

相关推荐

【编译原理】龙书第一章作业答案

【编译原理】龙书第一章作业答案 练习1.6.1 :对图1-13a中的块结构的C代码,指出赋给w、x、y和z的值 答案: w=13,x=11,y=13,z=11。可以把图中块结构看作块B1,第一个大括号内是块B2,第二个内是块B3。块B2有变量j的声明,因此w的定义中对j的使用被绑定到这个声明,没有i的声明,只能指向块B1中i的声明,同时B2重新定义该声明的i值为6,所以w=6+7=13。由于x在...

作业报告杂物间 2272

编译原理之编译器的前端技术

文章目录编译器的前端技术 编译器的前端技术 “前端”指的是编译器对程序代码的分析和理解过程。它通常只跟语言的语法有关,跟目标机器无关。而与之对应的“后端”则是生成目标代码的过程,跟目标机器有关。 程序也有定义良好的语法结构,它的语法分析过程,就是构造这么一棵树。一个程序就是一棵树,这棵树叫做抽象语法树(Abstract Syntax Tree,AST)。树的每个节点(子树)是一个语法单元,这个单元的构成规则就叫“语法”。每个节点还可以有下级节点。 词法分析是把程序分割成一个个 Token 的过程

Carroll的博客 4360

【编译原理】LR(1)分析方法(c++实现)

前文回顾 【编译原理】LR(0)分析方法(c++实现) 【编译原理】SLR(1)分析方法(c++实现)   代码 和SLR的区别其实只是DFA中多了一个搜索符,构建分析表的时候规约项的列是相应的搜索符而已 代码基本上就在SLR的代码上修修补补,但是写的有点乱,以后有时间再整理一下吧 Item类 #include <iostream> #include <fstream> #include <string.h> #include <string> #i

qq_43417265的博客 8542

脚本语言编译前端原理笔记

一、编译器的前端技术 1. 编译原理中的“前端(Front End)”指的是编译器对程序代码的分析和理解过程。它通常只跟语言的语法有关,跟目标机器无关。而与之对应的“后端(Back End)”则是生成目标代码的过程,跟目标机器有关。编译过程如下所示: 可以看到,编译器的“前端”技术分为词法分析、语法分析和语义分析三个部分。通常,编译器的第一项工作叫做词法分析(Lexical Analysis)。就像阅读文章一样,文章是由一个个单词组成的,程序处理也一样,只不过这里不叫单词而是叫做“词法记号”即Tok

书忆江南的IT博客 3593

05-SA8155 QNX Display框架及代码分析(1)

显示是非常重要的一个模块,人机交互的桥梁。那么SA8155 Hypervisor显示是如何处理的呢。对处理流程非常的好奇O(∩_∩)O哈哈~。TODO。

静虚待令,有物混成 1万+

5分钟搞定:用Ollama在MacBook上本地运行Qwen3大模型(附避坑指南)

本文详细介绍了如何在MacBook上使用Ollama快速部署和运行Qwen3大模型,包括安装步骤、性能优化技巧及常见问题解决方案。Ollama作为一款轻量级工具,特别适合M系列芯片的Mac用户,支持多种量化版本,显著降低资源消耗,提升推理速度。

sql99的博客 822

《编译原理》复习第1章~第5章

前言 练习题来自超星《吉林大学编译原理》课程的第一次作业,全文仅为自己学习使用,如果有错,欢迎指正。 一. 概括(思维导图) 二. 练习题 1. 以下关于高级语言实现方式的说法中错误的是( D)。 A. 编译方式与解释方式的根本区别在于是否生成目标代码; B. 编译方式对源程序的处理是先翻译后执行; C. 解释方式是按源程序中语句的动态顺序逐句地进行分析解释,并立即执行; D. 解释方式并不对源程序进行翻译; 答案解析:解释方式也需要对源程序进行翻译,只不过是边翻译边执行,不生成目标程序。 2. “

KQ的博客 1万+

LeGo-LOAM源码篇:源码分析(3)

mapOptmization.cpp,主要内容包括回环检测、scan-to-map位姿优化、因子图。

slamml 1382

编译原理复习习题

编译原理题型选填题简答题1.编译程序包括那几个阶段?简述各个阶段的主要任务。2.给出产生语言L(G3)={a的n次方b的n次方|N>=1}的文法G13.已知文法G(E):4.把下面文法改为无二义的:S→SS|(S)|()5.写出下列文法的每个非终结符的FIRST和FOLLOW的集合6.什么是局部优化?有哪些技术?7.什么是属性文法?它分为哪两类?8.简述算符优先分析法的特点及过程9.给出产生语言L(G)={a的m次方和b的n次方|m,n>1}的文法G10.给出文法G(S):S→aSa|bbSbb

qq_43285863的博客 7192

从频谱入手搞定ESD:手把手教你用示波器和频谱仪分析静电干扰(以Type-C接口为例)

本文详细介绍了如何利用示波器和频谱仪分析Type-C接口的ESD干扰问题。通过频谱特性分析、耦合路径诊断和实战测试,提供了一套完整的ESD防护方案,包括三级防护设计和器件选型建议,帮助工程师有效解决静电放电导致的系统故障。

weixin_42662293的博客 346

Open3D 计算点云配准的旋转和平移误差

通过计算旋转误差和平移误差来量化配准结果与真实变换之间的偏差。

点云侠的博客 250

编译原理:构造文法例题

请设计能产生下面语言的文法。 ①L1={anban|n>=1}(3分)②L={anbnambm|n,m>=0}(3分)③L={0m1n0n1m|n,m>=0}(4分)

nicec1的博客 9550

GStreamer —— 2.1、Windows搭建GStreamer环境,Qt加载GStreamer库后运行 - “教程1:Hello world!“(附:完整源码)

GStreamer —— 2、Windows搭建GStreamer环境,Qt加载GStreamer库后运行"教程1:Hello world!"

797

【编译原理】第一章 绪论

1.1 什么是编译 将高级语言(源语言)翻译成汇编语言或机器语言(目标语言)的过程 编译器在语言处理系统中的位置 预处理器:把存储在不同文件中的源程序聚合在一起;把被称为宏的缩写语句转换为原始语句 可重定位:在内存中存放的起始位置L不是固定的 加载器:修改可重定位地址;将修改后的指令和数据放到内存中适当的位置 链接器:将多个可重定位的机器代码文件(包括库文件)连接到一起;解决外部内存地址问题 ...

无极阁 761

机器人控制基础:伺服驱动器的泄放电阻

摘要:伺服驱动器泄放电阻用于消耗电机减速或制动时产生的再生电能,防止母线电压过高损坏元件。其核心作用是将多余电能转化为热能,规避硬件损坏和停机风险。选型需关注功率、阻值和封装三大参数,功率应匹配再生能量,阻值需符合驱动器要求,封装应满足散热需求。可通过动态监测母线电压或静态检测电阻阻值来判断其是否正常工作。

start_up_go的博客 381

YOLO算法:关于目标检测算法的基本介绍(小白入门必读)

目标检测算法是一种计算机视觉算法,用于在图像或视频中识别和定位特定的目标物体。本节课就给大家重点介绍下基于深度学习的目标检测算法!

小哥谈 2525

编译原理绪论

前言:近期正在学b站上哈工大的编译原理课,但是越学越崩溃。所以干脆停止看视频,慢下来汇总、理清知识。我搜索了几篇关于编译原理的文章,读完后提取出有用的知识。当做入门吧,争取搞清why。[若侵权,请联系我删除~] “语言是怎么诞生的?为什么不能用一个语言解决所有问题?” 追寻程序设计语言的本质 从现实的方面来说,编译原理学过之后的益处(不考虑最后都没有入门的情况)包括: 1、可以更加容易的理...

肉丸不肉 916

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

编译原理[笔记] 第一章-绪论

概论操作系统概念基本概念1.高级语言与低级语言2.几种重要程序3.源程序的翻译与运行4.源程序的解释执行5.“编译-解释执行”系统编译过程1.词法分析2.语法分析3.语义分析、生成中间代码4.代码优化 操作系统概念 基本概念 1.高级语言与低级语言 语言 包括 特点 低级语言 字位码、机器语言、汇编语言 与特定机器有关(可移植性不好),功效高,使用困难且易出错 高级语言 C语言...

Minamo的博客 1238

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

编译原理学习基本概念汇总

对于计算机专业的学生来说,肯定听说过或者上过一门课,叫做——编译原理,被称为计算机专业的天书,反正不管是学习这门课的时候,还是现在,我都是没搞懂其中的技术和知识。但就期末考试而言,提前做了几道题目,得到了90+的分数,也算是可喜可贺。各位ITer如果想检验自己的智商的话,大可以去学习编译原理,你会收获很多的。现在我把大学时整理的编译原理最基本的概念分享出来。 第一章-绪论 1. 翻译,是指

乞力马扎罗的雪CYF的博客 5789

【编译原理】第一章,什么是编译原理?

我们写代码是通过通过高级程序语言,因为它易于理解,但计算机能够执行处理的只能是机器代码。编译就是将高级程序语言转为机器代码的流程。我们要学的就是知道怎么转化它,并且能够完成编译过程的每一个步骤。

小梁说代码的博客 1206

编译原理 | 第一章课后习题答案

本文为编译原理(第三版)【清华大学出版社】第一章部分课后习题答案。本答案均截取自网络,如有错误,望指正

鷾 7016

编译原理复习笔记 第一章 绪论

编译原理第一章 1-1 1.计算机设计语言 2. 编译系统 可重定位:内存中存放的起始位置不定 加载器:修改可重定位地址 连接器:链接库文件;将多个可重定位代码连接到一起;解决外部内存地址 1-2 编译系统结构 词法分析:分析词性 语法分析:识别句子中的各类短语,分析句子结构 语义结构:根据句子结构,分析短语成分 编译器结构 中间表示形式:独立于任何语言 1-3 词法分析概述 “从左向右”扫描源程序字符,识别单词,确定单词类型,表示为token形式 Token:<种别码,属性值&g

qq_40301196的博客 351

编译原理笔记及例题

编译原理笔记及例题

weixin_40185366的博客 5208

编译原理基本概念和术语

一、字母表(有穷符号集合) 1.1 字母表定义 字母表也即符号集,用∑表示,它是一个包含各种符号的有穷非空集合。 以汉语为例,汉语字母表就是各种汉字、数字、标点符号的集合;以英语为例,英语字母表就是各种字母、数字、标点符号的集合…那么到了编程,字母表就可能是字母、数字、各种专用符号和保留字了。 1.2 字母表上的运算: 乘积 n次幂 正闭包 克林闭包 二、符号串/串 2.1 符号串相关...

肉丸不肉 8738

编译原理(第3版)第1章引论课后题答案

编译原理第一章课后答案

weixin_45939614的博客 3424
上一篇: 数组名(a)和对数组名取地址(&a)的区别
下一篇: 第一章 编译原理绪论(2)——编译程序的八个部分
Web客栈
博客等级 码龄18年 23粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值