浅谈编译原理

什么是编译原理?

编译原理顾名思义,编译就是将源语言(高级程序语言)翻译成等价的目标语言(机器语言即计算机可以识别的语言即0和1或汇编语言)的过程。原理就是研究这一过程的思想方法、理论和技术。从本质上来讲编译是一个算法问题,但由于它的问题相当复杂,导致设计解决这个问题的算法也十分复杂。这里的算法和我们学习的数据结构和算法中的算法有些不同,后者讲述的是基础算法,是解决我们生活中遇到的问题,而编译中的算法则是在人与计算机交流时需要解决的“沟通”问题的算法,比较专注解决一种的算法。编译的过程包括:源程序->词法分析->语法分析->语义分析->中间代码生成->代码优化->目标代码生成->目标程序

为什么我们要编译程序?
因为在计算机发展的初期,我们要想操作计算机则需要学习如何与计算机沟通,当时沟通的方法只有0和1,只有熟练使用0和1来表示程序的科学家才能通过打孔卡或纸带操控计算机,由于直接使用二进制编程的门槛过高,使得除特定的科学家以外的人学习使用计算机较为困难且周期较长,不利于计算机的发展,所以之后的计算机科学家就设计了很多的高级语言使得程序代码更贴近自然语言,但还是有其特定的结构,通过高级语言解决了对学习编程门槛高的问题,但这也照成了机器不能识别高级语言的问题,这是就需要一个翻译程序(就像我们用翻译程序将英文翻译为中文)来使计算机“读懂”程序员写的高级语言。编译程序油然而生。

学习编译原理的作用?
1、学习编译原理,了解高级语言是如何翻译成机器语言的,这有助于提高我们代码编译的效率,提高代码的质量。
2、了解计算机的运作原理,能写出更高效的代码。
3、由于编译过程是将高级语言等价的翻译成机器语言,这样我们就知道了它们之间是如何等价转换的,这对于我们学习其他语言更加得心应手,因为我们学习了它们的核心思想。
4、对于计算机编程及计算机整体运作方式开始有更深一层次的理解。
5、可能可以在自然语言语义分析方面会后一些了解。
6、获得分析、设计、实现和维护编译系统的初步能力,理解运用编译技术解决工程实践中的变换和转换问题的方法。
7、感受到经典理论和先进技术之间的紧密联系。

不学习编译原理,会使自己的计算机思维停留在程序之上,虽然可以用程序解决生活实际问题,但没有真正走进计算机的0,1世界,你和它的交流始终隔着一个编译器,不能自由、灵活的表达自己的意思,同时也受限于高级语言给你的思维。

如何学习编译原理?
我觉得在深入学习编译原理之前,需要先对其有一个感性的认识。
1、可以先通过教材了解编译的流程,以及各个步骤的作用、目的。
2、在通过Github或开源中国中找一些小实例聊看看,可能一开始是看不懂,但可以通过对代码各模块功能的猜想和结合课本中理论的理解,应该会对编译器的运作原理有些初步的认识。
3、在有了一定了解后,开始对课上所学的理论与之前的感性认识进行整理结合,加深对所学理论的理解。
4、到最后看是否能写一个小型编译器,来检验自己的学习成果,并巩固理论基础。
PS:因为学习编译原理会涉及到离散数学、数据结构、汇编语言、高级语言、算法、计算机原理等,所以需要对这些课程有一定深度的理解,应该巩固这些学科的知识。

部分概念:
1、编译型语言:通过编译程序直接将源程序编译成机器语言。优点:编译效率比解释性语言高,但由于现在计算机的计算能力有了显著的提高,编译效率高的优点渐渐不明显了。(如C语言)
解释性语言:通过一个解释程序,将源程序翻译成机器语言。优点:可以逐行编译,这可以完成一些特殊的任务,比如R语言和Python。
2、垃圾回收机制:用于以不定时的方式动态回收程序在内存中占用空间但不再使用的部分的一种措施。Java就有垃圾回收机制,其是由JVM提供的。

时间: 2024-08-09 22:00:49

浅谈编译原理的相关文章

浅谈xss原理

近日,论坛上面XSS满天飞,各处都可以见到XSS的痕迹,前段时间论坛上面也出现了XSS的迹象.然后我等小菜不是太懂啊,怎么办?没办法只有求助度娘跟谷歌这对情侣了. 可以说小菜也算懂了一些,不敢藏私,故发文出来大家一块学习,讨论. 下面是正文: 0x00:xss的来由 记得之前看过一篇文章,这样来形容XSS " 如果把浏览器看作WEB2.0后时代的操作系统,那么客户端脚本就相当于传统的应用程序,而XSS的攻击方式其实就相当于在被攻击者的系统上执行了一个木马程序.但这种"木马"有

谈编译原理

一:编译在我看来是一个将高级语言转换成机器语言的一个中转站,有点类似于我们生活中的翻译,而“编译原理”就是编译原理是一门关于编译实现的课程,就是想要编译必须通过学习编译原理才能实现. 二:可以对自己所写的程序和程序语言有更深的本质认识,让你学习新语言的效率更高,可以更加客观的比较各种不同语言的差异. 三:也不是一定要求要学,只是学了的好处会更大,你和一个学了编译原理的人对比,他的核心竞争力肯定比你高,而且他能对程序语言有更深的本质认识. 四:立足与课堂,课外可以更多地延伸,龙虎鲸书,也要更多地接

我对软件测试行业的个人理解 6 - 浅谈自动化测试原理

   自动化测试是我从进入这个行业开始,听到最多的词汇之一了.大家,特别是手工测试工程师,很多都想了解自动化测试,学习工具,并以此提高自己的收入.今天我不讲工具.而是讲讲这个词背后的原理,为读者从事自动化测试工作打一个理论基础.如果打算从事专职自动化测试工作,不论是你原来是开发人员,还是手工测试人员,都必须了解这个基础.以我实际上的工作中遇到的新人来看,最缺的就是这个理论基础,而工具大家都能学会.我下面用自顶向下的方式来解释自动化测试的原理,从高度抽象讲到具体内容.当然这些只是我的个人理解,整理

浅谈编译过程和符号表重定位问题

对于代码的编译问题千头万绪从何说起呢,首先来说一下计算机是如何处理应用程序的,实质上应用程序是通过操作系统来应用机器指令操控硬件设施完成各种任务的,就从编译的环节开始谈起吧,众所周知,程序开发人员所写的代码实际上计算机是没有办法去认识的,那么就必须通过编译将其转换为计算机可以认识的机器指令,在有操作系统根据具体指令从硬件上分配内存处理程序段.以下从预编译,编译,汇编,链接,来简单的说一下程序的编译过程. 2.1编译预处理 在这个阶段主要是宏定义的展开,以及头文件的递归处理,即展开所有的以#开头的

浅谈编译kernel+busybox构建拥有远程ssh登录和web功能最小linux系统

实验环境win7+VM11.1 本文的源码的版本了 dropbear-2013.58.tar.bz2    busybox-1.21.1.tar.bz2 linux-3.13.6.tar.xz  nginx-1.4.7 大致过程总揽 1,硬件准备以及查看硬件设备型号(不用担心,这些都是VM虚拟出来的) 2,编译环境的配置以及下载内核源码以及编译内核 3,编译busybox,以及提供系统正常运行的配置文件,初步运行linux系统 4,编译安装dropbear提供ssh服务 5,安装nginx:提供

浅谈编译高通android5.1源代码

为什么会编译高通5.1源代码,原因很简单,因为公司做高通平台的手机,所以有必要编译下 Linux基础学习篇 1.常用指令 ls 显示文件或目录 –l  列出文件详细信息 l(list)   –a   列出当前目录下所有文件及目录,包括隐藏的a(all) mkdir 创建目录 -p 创建目录,若无父目录,则创建p(parent) cd 切换目录 touch 创建空文件 echo 创建带有内容的文件. cat 查看文件内容 cp 拷贝 mv 移动或重命名 rm 删除文件 -r 递归删除,可删除子目录

浅谈 操作系统原理

注 :  文中讲述的原理是推理和探讨 , 和现实中的实现不一定完全相同 . 操作系统 , 主要分为 5 个部分 : 1 进程调度 2 虚拟内存 3 文件系统 4 网络通信 5 设备驱动 进程调度 , 原文地址:https://www.cnblogs.com/KSongKing/p/9495999.html

浅谈搜索引擎原理

http://t.qq.com/nanjingxia7551 http://t.qq.com/p/t/466214001064098 http://t.qq.com/lishuixiaojiebao http://t.qq.com/p/t/441720100016863 http://t.qq.com/wuxixiaojiebaoye http://t.qq.com/p/t/457708060557722 http://t.qq.com/jiangyinxi1705 http://t.qq.co

浅谈 zookeeper 原理,安装和配置

当前云计算流行, 单一机器额的处理能力已经不能满足我们的需求,不得不采用大量的服务集群.服务集群对外提供服务的过程中,有很多的配置需要随时更新,服务间需要协调工作,那么这些信息如何推送到各个节点?并且保证信息的一致性和可靠性?我们知道分布式协调服务很难正确无误地实现, 因为他们很容易在竞争条件和死锁上犯错误.那么zookeeper将是一个不错的选择 Zookeeper是什么? 引用官方的说法:“Zookeeper是一个高性能,分布式的,开源分布式应用协调服务.它提供了简单原始的功能,分布式应用可