![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编译原理
carroll18
你想要拥有你从未有过的东西,你必须去做你从未做过的事情。
展开
-
编译原理之目标代码的生成和优化
文章目录目标代码生成正确的指令分配寄存器指令重排序LLVM 的实现Maximal Munch 算法目标代码生成一个正式的编译器后端,代码生成部分需要考虑得更加严密才可以。那么具体要考虑哪些问题呢?其实主要有三点:指令的选择。同样一个功能,可以用不同的指令或指令序列来完成,而我们需要选择比较优化的方案。寄存器分配。每款 CPU 的寄存器都是有限的,我们要有效地利用它。指令重排序。计算执行的次序会影响所生成的代码的效率。在不影响运行结果的情况下,我们要通过代码重排序获得更高的效率。正确的指令我原创 2020-11-03 10:37:50 · 2724 阅读 · 0 评论 -
编译原理之代码优化
文章目录代码优化的目标、对象、范围和策略代码优化的目标代码优化的对象代码优化的范围代码优化的策略一些优化的场景数据流分析实例图示半格理论代码优化的目标、对象、范围和策略代码优化的目标代码优化的目标,是优化程序对计算机资源的使用。我们平常最关心的就是 CPU 资源,最大效率地利用 CPU 资源可以提高程序的性能。代码优化有时候还会有其他目标,比如代码大小、内存占用大小、磁盘访问次数、网络通讯次数等等。代码优化的对象从代码优化的对象看,大多数的代码优化都是在 IR 上做的,而不是在前一阶段的 AS原创 2020-11-03 09:50:21 · 2173 阅读 · 0 评论 -
编译原理之后端技术
文章目录生成汇编代码LLVM生成汇编代码在存在操作系统的情况下,程序逻辑上可使用的内存一般大于实际的物理内存。程序在使用内存的时候,操作系统会把程序使用的逻辑地址映射到真实的物理内存地址。有的物理内存区域会映射进多个进程的地址空间。对于静态编译型语言,比如 C 语言和 Go 语言,编译器后端的任务就是生成汇编代码,然后再由汇编器生成机器码,生成的文件叫目标文件,最后再使用链接器就能生成可执行文件或库文件了。Java 的字节码,在运行时通常也会通过 JIT 机制编译成机器码。而汇编语言是完原创 2020-10-31 15:55:45 · 981 阅读 · 0 评论 -
编译原理之语义分析
作用域(Scope)作用域是指计算机语言中变量、函数、类等起作用的范围变量的作用域有大有小,外部变量在函数内可以访问,而函数中的本地变量,只有本地才可以访问。变量的作用域,从声明以后开始。在函数里,我们可以声明跟外部变量相同名称的变量,这个时候就覆盖了外部变量。生存期(Extent)生存期是变量可以访问的时间段,也就是从分配内存给它,到收回它的内存之间的时间。Java 对象所采用的内存超出了申请内存时所在的作用域,所以也就没有办法自动收回。所以 Java 采用的是自动内存管理机制原创 2020-10-28 13:55:09 · 2711 阅读 · 0 评论 -
编译原理之语法分析
文章目录解析变量声明语句解析变量声明语句语法分析的结果是生成 AST。算法分为自顶向下和自底向上算法,其中,递归下降算法是一种常见的自顶向下算法。“int age = 45”这个语句,语法分析算法的示意图:首先把变量声明语句的规则,用形式化的方法表达一下。它的左边是一个非终结符(Non-terminal)。右边是它的产生式(Production Rule)。在语法解析的过程中,左边会被右边替代。如果替代之后还有非终结符,那么继续这个替代过程,直到最后全部都是终结符(Terminal),也就是原创 2020-10-28 13:54:38 · 1100 阅读 · 0 评论 -
编译原理之正则文法和有限自动机
先来解析一下“age >= 45”这个关系表达式,这样就能理解有限自动机的概念,知道它是做词法解析的核心机制了。解析 age >= 45原创 2020-10-25 15:13:38 · 1458 阅读 · 0 评论 -
编译原理随笔记录
文章目录编译器的结构词法分析器语法分析器语义分析器中间代码生成器编译器的结构词法分析器语法分析器语义分析器中间代码生成器原创 2020-08-30 09:30:10 · 231 阅读 · 0 评论 -
编译原理之编译器的前端技术
文章目录编译器的前端技术编译器的前端技术“前端”指的是编译器对程序代码的分析和理解过程。它通常只跟语言的语法有关,跟目标机器无关。而与之对应的“后端”则是生成目标代码的过程,跟目标机器有关。程序也有定义良好的语法结构,它的语法分析过程,就是构造这么一棵树。一个程序就是一棵树,这棵树叫做抽象语法树(Abstract Syntax Tree,AST)。树的每个节点(子树)是一个语法单元,这个单元的构成规则就叫“语法”。每个节点还可以有下级节点。词法分析是把程序分割成一个个 Token 的过程原创 2020-08-30 09:23:05 · 3682 阅读 · 1 评论