浅谈编译原理

author author     2022-08-04     133

关键词:

什么是编译原理?

编译原理顾名思义,编译就是将源语言(高级程序语言)翻译成等价的目标语言(机器语言即计算机可以识别的语言即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提供的。

浅谈javascript预编译原理

这两天又把js的基础重新复习了一下,很多不懂得还是得回归基础,大家都知道js是解释性语言,就是编译一行执行一行,但是在执行的之前,系统会做一些工作:1,语法分析;2,预编译;3,解释执行。语法分析很简单,就是引擎... 查看详情

jvm原理浅谈

  jvm包含了堆栈区、方法区等存储区域、类装载子系统以及执行引擎。  jvm执行流程:编译(字节码)——》类装载(加入内存)——》类执行(分配内存执行)  jvm内存机制:堆内存(new出来的所有对象)      ... 查看详情

v8编译浅谈(代码片段)

简介:本文是一个V8编译原理知识的介绍文章,旨在让大家感性的了解JavaScript在V8中的解析过程。作者|子弈来源|阿里技术公众号一简介本文是一个V8编译原理知识的介绍文章,旨在让大家感性的了解JavaScript在V8中的解... 查看详情

浅谈html运行原理

  浅谈HTML运行原理,所谓的HTML简单的来说就是一个网页,虽然第一节就讲html原理可能大家会听不懂,就当是给一个初步印象把,至少大概知道一个网页的运行流程是怎样的,下面上一张图:     大致的一个html的运... 查看详情

浅谈操作系统原理

注: 文中讲述的原理是推理和探讨,和现实中的实现不一定完全相同。 操作系统,主要分为5个部分:1进程调度2虚拟内存3文件系统4网络通信5设备驱动 进程调度,   查看详情

浅谈spring事务底层原理(代码片段)

点击关注公众号,实用技术文章及时了解@EnableTransactionManagement工作原理Spring事务基本执行原理Spring事务详细执行流程Spring事务传播机制Spring事务传播机制分类案例分析情况1情况2情况3情况4Spring事务强制回滚TransactionSynchron... 查看详情

浅谈java反射的实现原理(代码片段)

从一段示例代码开始Classclz=Class.forName("ClassA");Objectinstance=clz.newInstance();Methodmethod=clz.getMethod("myMethod",String.class);method.invoke(instance,"abc","efg 查看详情

todo:浅谈pm2基本工作原理

TODO:浅谈pm2基本工作原理要谈Node.jspm2的工作原理,需要先来了解撒旦(Satan)和上帝(God)的关系。撒旦(Satan),主要指《圣经》中的堕天使(也称堕天使撒旦),他是反叛上帝耶和华的堕天使(FallenAngels),曾经是上帝座前... 查看详情

浅谈hashmap的底层原理

本文整理自漫画:什么是HashMap?-小灰的文章。已获得作者授权。HashMap是一个用于存储Key-Value键值对的集合,每一个键值对也叫做Entry。这些个Entry分散存储在一个数组当中,这个数组就是HashMap的主干。HashMap数组每一个元素的初... 查看详情

php模板原理php模板引擎smarty模板原理浅谈

 mvc是开发中的一个伟大的思想,使得开发代码有了更加清晰的层次,让代码分为了三层各施其职、无论是对代码的编写以及后期的阅读和维护,都提供了很大的便利。  我们在php开发中,视图层view是不允许有php代码来操作... 查看详情

浅谈arraylist的底层扩容的原理(代码片段)

ArrayList扩容机制的源码详解一:ArrayList的构造函数:ArrayList的构造函数源码有三种:先来看看ArrayList底层定义的一些变量的含义:/**Defaultinitialcapacity*默认的容量大小*/privatestaticfinalintDEFAULT_CAPACITY=10;/**Sharedemptyarrayinstanceusedforempty... 查看详情

浅谈react工作原理

Reactjs起源于Facebook内部项目,是一个用来构建用户界面的javascript库,相当于MVC架构中的V层框架,与市面上其他框架不同的是,React把每一个组件当成了一个状态机,组件内部通过state来维护组件状态的变化,当组件的状态发生变... 查看详情

浅谈mybatis连接原理

    众所周知数据库连接的过程,但是最近面试的人(菜面菜),都说用的SSM框架,但是我问了一下,mybatis是怎么连接上mysql的,基本上都会说:配置好的,直接用了,今天我来抛砖引玉一下,欢迎拍砖!  &nbs... 查看详情

ssl和tls的技术原理浅谈

背景程序员小明想给隔壁红写信表白,但是又不想让信件内容被其他人看见,希望只有小红才能看见信件内容,迫不及待的小明的大脑飞快运转起来。预备基础知识对称密钥加密(SymmetricKeyCryptography):加密与解密使用相同密钥... 查看详情

浅谈androidmatrix使用原理(代码片段)

前言看了一下关于对Android性能监控框架Matrix的介绍九个模块的内容,已经有jym阐述过,就不对赘述了,找不到的再说.🤣分别为:Matrix介绍内存泄漏监控及原理介绍内存泄漏监控源码分析Hprof文件分析卡顿监控... 查看详情

浅谈androidmatrix使用原理(代码片段)

前言看了一下关于对Android性能监控框架Matrix的介绍九个模块的内容,已经有jym阐述过,就不对赘述了,找不到的再说.🤣分别为:Matrix介绍内存泄漏监控及原理介绍内存泄漏监控源码分析Hprof文件分析卡顿监控... 查看详情

浅谈jvm及原理

 1、什么是JVM?JVM,中文名是Java虚拟机,正如它的名字,是一个虚拟机器,来模拟通用的物理机。JVM是一个标准,一套规范, 规定了.class文件在其内部运行的相关标准和规范。及其相关的内部构成。比如:所有的JVM都是基... 查看详情

浅谈前端路由原理hash和history(代码片段)

浅谈前端路由原理hash和history🎹序言🎸一、前端路由原理1、SPA2、什么时候需要路由🎷二、Hash模式1、定义2、网页url组成部分(1)了解几个url的属性(2)演示3、hash的特点🎺三、History模式1、定义... 查看详情