
编译原理
文章平均质量分 74
信海利世
一叶扁舟难明理,两条主线方对齐。燕过留痕强记忆,代码躬行破迷离。横批-与人分享我受益
大前端技术爱好者,9年项目经验,大前端技术研究、总结、分享者:包括但不限于node核心api、node服务端、前端工程化、三大mvvm框架、H5游戏开发、各类小程序、app混合开发等。
持续学习:编译原理、数据结构算法、设计模式、操作系统、容器化、计算机原理、嵌入式、网络协议等。
执拗练习:dota2 祈求者(卡尔)。
展开
-
antlr4使用
jsantlr4 -Dlanguage=JavaScript PlayScript.g4javaantlr4 PlayScript.g4javac Hello*.javagrun Hello tokens -tokens hello.play或者:grun Hello r -gui生成visitorantlr4 -Dlanguage=JavaScript -visitor PlayScript.g4原创 2021-04-21 20:49:40 · 158 阅读 · 0 评论 -
V8编译器
V8 这个词,原意是 8 缸的发动机,换算成排量,大约是 4.0 排量,属于相当强劲的发动机了。它的编译器,叫做 Ignition,是点火装置的意思。而它最新的 JIT 编译器,叫做 TurboFan,是涡轮风扇发动机的意思。2008 年 V8 发布时,就已经比当时的竞争对手快 10 倍了;到目前,它的速度又已经提升了 10 倍以上。从中你可以看到,编译技术有多大的潜力可挖掘!对 JavaScript 编译器来说,它最大的挑战就在于,当我们打开一个页面的时候,源代码的下载、解析(Par.原创 2021-04-06 19:36:19 · 608 阅读 · 0 评论 -
编译器-代码优化
两个维度第一个分类维度,是机器无关的优化与机器相关的优化。机器无关的优化与硬件特征无关,比如把常数值在编译期计算出来(常数折叠)。而机器相关的优化则需要利用某硬件特有的特征,比如 SIMD 指令可以在一条指令里完成多个数据的计算。第二个分类维度,是优化的范围。本地优化是针对一个基本块中的代码,全局优化是针对整个函数(或过程),过程间优化则能够跨越多个函数(或过程)做优化。本地优化是针对一个基本块中的代码,全局优化是针对整个函数(或过程),过程间优化则能够跨越多个函数(或过程)做优化。.原创 2021-04-06 13:13:38 · 792 阅读 · 0 评论 -
IR
IR,也就是中间代码(Intermediate Representation,有时也称 Intermediate Code,IC),它是编译器中很重要的一种数据结构。编译器在做完前端工作以后,首先就是生成 IR,并在此基础上执行各种优化算法,最后再生成目标代码。通常情况下,IR 有两种用途,一种是用来做分析和变换的,一种是直接用于解释执行的。编译器中,基于 IR 的分析和处理工作,一开始可以基于一些抽象层次比较高的语义,这时所需要的 IR 更接近源代码。而在后面,则会使用低层次的、更加接近目标.原创 2021-04-02 12:56:31 · 2455 阅读 · 0 评论 -
编译过程-运行时机制
通常情况下,程序有两种执行模式第一种执行模式是在物理机上运行。针对的是 C、C++、Go 这样的语言,编译器直接将源代码编译成汇编代码(或直接生成机器码),然后生成能够在操作系统上运行的可执行程序。为了实现它们的后端,编译器需要理解程序在底层的运行环境,包括 CPU、内存、操作系统跟程序的互动关系,并要能理解汇编代码。第二种执行模式是在虚拟机上运行。针对的是 Java、Python、Erlang 和 Lua 等语言,它们能够在虚拟机上解释执行。这时候,编译器要理解该语言的虚拟机的运行机制,并原创 2021-04-01 15:51:48 · 245 阅读 · 0 评论 -
语义分析
语义,就是程序要表达的意思。语义规则可以分为两大类。第一类规则与上下文有关。因为我们说了,语法分析只能处理与上下文无关的工作。而与上下文有关的工作呢,自然就放到了语义分析阶段。第二类规则与类型有关。在计算机语言中,类型是语义的重要载体。所以,语义分析阶段要处理与类型有关的工作。比如,声明新类型、类型检查、类型推断等。在做类型分析的时候,我们会用到一个工具,就是属性计算。某些与类型有关的处理工作,还必须到运行期才能去做。比如,在多态的情况,调用一个方法时,到底要采用哪个子类的实现,只有在运行时原创 2021-04-01 12:55:09 · 2755 阅读 · 0 评论 -
语法分析
两个基本功:第一,必须能够阅读和书写语法规则,也就是掌握上下文无关文法;第二,必须要掌握递归下降算法。两种算法思路:一种是自顶向下的语法分析,另一种则是自底向上的语法分析。上下文无关文法(Context-Free Grammar)start:blockStmts ; //起始block : '{' blockStmts '}' ; //语句块blockStmts : stmt* ; //语句块中的语句stmt = varDe...原创 2021-03-31 21:01:06 · 811 阅读 · 0 评论 -
词法分析器
词法分析(Lexical Analysis)词法分析器在英文中一般叫做 Tokenizer。有一个计算模型,叫做有限自动机(Finite-state Automaton,FSA),或者叫做有限状态自动机(Finite-state Machine,FSM)。状态机能够区分标识符和数字字面量正则表达式也可以用来描述词法规则。这种描述方法,我们叫做正则文法(Regular Grammar)。IntLiteral : [0-9]+; //至少有一个数字Id ...原创 2021-03-31 17:38:19 · 3902 阅读 · 0 评论 -
编译技术-语义分析-中间代码-优化
平台,这很重要的原因就是拥有很强的定制能力,比如流程定制、界面定制、业务逻辑定制,等等。而这些定制能力,依托的就是编译技术。为编程提供更高的抽象层次,从来就是编译技术的职责。...原创 2021-03-31 10:13:32 · 801 阅读 · 0 评论 -
转译器-解释器-编译器
树形的 ast 转换为另一个 ast,然后再打印成目标代码的字符串,这是转译器,把 ast 解释执行或者专成线性的中间代码再解释执行,这是解释器,把 ast 转成线性中间代码,然后生成汇编代码,之后做汇编和链接,生成机器码,这是编译器。...原创 2021-03-30 10:15:18 · 1035 阅读 · 0 评论 -
编译器前端概览
一、(Front End)(Back End)这里的“前端(Front End)”指的是编译器对程序代码的分析和理解过程。它通常只跟语言的语法有关,跟目标机器无关。而与之对应的“后端(Back End)”则是生成目标代码的过程,跟目标机器有关。二、包括哪儿些编译器的“前端”技术分为词法分析、语法分析和语义分析三个部分。而它主要涉及自动机和形式语言方面的基础的计算理论。三、词法分析(Lexical Analysis)可用词法分析器的生成工具来生成,比如 Lex(或其 ...原创 2020-12-30 10:55:48 · 1748 阅读 · 0 评论