首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏编程技术分享

    Vue3 模板编译原理

    模块是 Vue 编译的核心模块,并且是平台无关的。 Vue 的编译分为三个阶段,分别是:parse、transform、codegen。 其中 parse 阶段将模板字符串转化为语法抽象树 AST。 例如 @click="foo" 默认编译为 { onClick: foo },如果开启了这个选项,则编译为 { onClick: _cache[0] || (_cache[0] = e => _ctx.foo 我们知道编译模块 compiler-core 是平台无关的,而 compiler-dom 是浏览器相关的编译模块。 Vue3 系列文章 Vue3 响应式原理 Vue3 模板编译原理

    1.6K20发布于 2020-09-28
  • 来自专栏golang分享

    编译原理

    编译,其实就是把源代码变成目标代码的过程。如果源代码编译后要在操作系统上运行,那目标代码就是汇编代码,我们再通过汇编和链接的过程形成可执行文件,然后通过加载器加载到操作系统里执行。 编译器翻译源代码,也需要经过多个处理步骤 词法分析(Lexical Analysis) 在编译之前,源代码只是一长串字符而已,这显然不利于编译器理解程序的含义。 比如 int a = 10; //全局变量 int foo(int a){ //参数里有另一个变量a int b = a + 3; //这里的a指的是哪一个? return b; } 而把“a+3”中的 a,跟正确的变量定义关联的过程,就叫做引用消解(Resolve)。这个时候,变量 a 的语义才算是清晰了。 语义分析的重要特点,就是做上下文相关的分析。 ,而计算机语言的处理基本上都是在2型文法和3型文法的层面上,只有涉及意义处理才会做一些1型文法层面的事儿。

    5.4K81编辑于 2023-11-30
  • 来自专栏进步集

    编译原理

    基本方法b 对任何输入串,试图从开始符号出发, 自上而下地为输入串建立一棵语法树,或者说为输入串寻找一个最左推导。 过程本质 某文法符号对应当前输入符号时,有唯一的产生式进行替换并向下推导。

    1.9K20编辑于 2022-11-13
  • 来自专栏程序人生 阅读快乐

    编译原理

    《编译原理》作者Alfred V.Aho、Ravi Sethi和Jeffrey D.Ullman是世界著名的计算机 科学家,他们在计算机科学理论、数据库等很多领域都做出了杰出贡献。 《编译原理》 是编译领域无可替代的经典著作,被广大计算机专业人士誉为“龙书”。 《编译原理》一 直被世界各地的著名高等院校和科研机构(如贝尔实验室、哥伦比亚大学、普 林斯顿大学和斯坦福大学等)广泛用作本科生和研究生编译原理与技术课程的 教材,《编译原理》对我国计算机教育界也具有重大影响 书中深入讨论了编译器设计的重要主题,包括词法分析、语法分析、语法制 导分析、类型检查、运行环境、中间代码生成、代码生成、代码优化等,并在 最后两章中讨论了实现编译器的一些编程问题和几个编译器实例,而且每章都

    2.6K20发布于 2018-10-10
  • 来自专栏黯羽轻扬

    再看编译原理

    编译器 编译器也是个程序,可以阅读某一种语言(源语言)编写的程序,并把该程序翻译为一个等价的,用另一种语言(目标语言)编写的程序。 C语言编译得到可执行的二进制程序 中间字节码,例如Java编译得到面向JVM的.class文件 字符串,例如经Babel转过的JavaScript代码 其实就是翻译,比如从字符串编译到机器码,就是把人能理解的代码语言翻译成机器能 : 解释器 源程序 & 用户输入 -------> 输出 运行时解释执行,所以解释型语言的运行效率一般要低于编译型语言 编译过程 分为两部分: 分析:把源程序拆分成多个部分 id1对应的内存地址,完成赋值 不考虑机器相关优化的话,编译过程到这里就结束了。 实际实现中,这些环节并不一定都有清晰的边界,而是尽量一趟完成多道工序,以提高性能 参考资料 《编译原理》(龙书 第二版) http://infolab.stanford.edu/~ullman/dragon

    2.8K40发布于 2019-06-12
  • 来自专栏算法之名

    编译原理整理

    3、编译原理 所有高级语言的建立,最终都是要将其转化成机器语言,这是一个翻译的过程,我们称之为编译。 这是一个实现硬件加法器的代码,然后将编程语言翻译成电路布线,最后由3D打印机打印出来。 编译原理的"翻译"能力只能作用在形式语言上。 什么是编译器 ? 编译器将源程序编译成目标程序。编译成的目标程序才可以接受输出,产出输出,其代表为C语言 ? 什么是解释器 ? 解释器同时接受源程序和输入,执行并返回输出。 交叉编译 ? 在一个平台上编译产生多个平台的可执行代码。 我们现在来模拟一门新的语言,让其转化为Java。 + " to " + to); return } tower(n - 1,from,use,to) tower(1,from,to,use) } tower(3,1,3,2

    2.5K30发布于 2020-06-02
  • 来自专栏第一专栏

    编译原理4—6章案例复习总结【编译原理】

    4—6章总结 4、自上而下文法—LL(1)文法 (1)first集 (2)follow集 ——利用到select集 (3)select集 ——利用到first、select集合 (4)构造自上而下分析表 不太像回事,,再来一张表 (1)分析句子–使用LR文法表 初始化—步骤从0开始,状态栈存放一个0,符号栈存放一个# (2)LR(0)项目集规范族,(拓广文法S’,让开始的符号只出现在开头,) (3)

    2K20编辑于 2023-05-25
  • 来自专栏嵌入式视觉

    编译原理基础

    Contents 1 GCC 是什么 2 gcc 与 g++ 的区别 3 Clang 是什么 4 MinGW是什么 5 GTK 是什么 6 GNU 是什么 7 GNU工具链是什么 GCC 是什么 GNU GCC(特别是其中的C语言编译器)也常被认为是跨平台编译器的事实标准。 原名为GNU C语言编译器(GNU C Compiler),因为它原本只能处理C语言。 它的目标是提供一个GNU编译器套装(GCC)的替代品,支持了GNU编译器大多数的编译设置以及非官方语言的扩展。 这同时造成了 MinGW 开发的程序只能使用 Win32API 和跨平台的第三方库,而缺少 POSIX 支持[3],大多数 GNU 软件无法在不修改源代码的情况下用 MinGW 编译。 GNU 工具链中的部分工具也被 Solaris, Mac OS X, Microsoft Windows (via Cygwin and MinGW/MSYS) and Sony PlayStation 3 

    3.2K10编辑于 2022-09-05
  • 来自专栏梧雨北辰的开发录

    iOS编译原理

    ,例如C++、Objective-C、Java、C#等; 2.C++语言 兼容了C语言面向过程特点,但又进行了扩充和完善; 作为一种面向对象的语言,具有封装、多继承、多态等特性; 3.Objective-C ,运行后也可以随时增加和更新代码来改变程序逻辑; 代表语言:Javascript、Python等; 编译原理-语言的分类 三、编译器LLVM与CLang 1.编译器 概念:把一种编程语言(原始语言)转换为另一种编程语言 3倍: 3.理解iOS中的编译器 在iOS开发中,通常LLVM被认为是编译器的后端,而Clang是作为编译器的前端; 二者以 IR(中间代码)作为媒介,这样前后端分离,使得前后端可以独立的变化,互不影响 、编译、汇编、链接四个关键阶段,具体的流程如下图: 编译原理-编译流程 2.准备测试文件 以OC语言为例,详细分析代码的编译流程,准备一个main.m文件的内容如下: #import <Foundation .section __TEXT,__text,regular,pure_instructions .build_version macos, 11, 0 sdk_version 11, 3

    4.1K20发布于 2021-11-24
  • 来自专栏机器学习炼丹之旅

    编译原理:第一章 编译原理引论

    一、编译程序和解释程序 1.1 定义 编译程序最初的定义是把一种高级语言设计的源程序(面向人的)翻译成另一种等价的低级程序设计语言(面向硬件的)即机器语言或汇编语 1.2 程序执行方式 程序设计语言源程序的执行基本有两种方式 image-20210903105011271.png 1.4 高级语言程序的处理过程 image-20210903105656311.png 二、编译过程和编译程序的结构(重点) 2.1 编译过程概述 } 翻译成如下的四元式序列(中间代码): (操作符,左操作数,右操作数,存储位置) (1) (inttofloat, 10, _, T1 ) (2) ( *, count,T1,T2 ) (3) ( +, first,T2,T3 ) (4) ( =, T3, _, sum) 其中,Ti为语义分析程序为存放中间结果而生成的临时变量。 (动态) 报告出错信息和位置 处理和恢复 2.2 编译程序结构 image-20210908142606225.png 2.3 编译阶段的组合 2.3.1 前段和后端的概念 有时,

    2.6K10编辑于 2022-08-09
  • 来自专栏北洋csdn

    看懂编译原理:优化范围 & 原理

    优化目标原理分别是什么? 可以分为本地优化,全局优化,过程间优化 本地优化是_**针对基本快进行的(针对顺序的执行顺序)优化。 可以看到这三个范围越来越大:一个函数里面的一个基本快,一个函数里的多个基本快,多个函数 常见的本地优化场景有哪些,原理和做法是什么? 有些基本快分支一直不会运行,删除 公共子表达式删除:对于同一个表达式的变量,可以直接使用结果删除不必要的重复计算 删除无用变量和无用表达式(这里的无用表达式指的和上面不一样,这里特殊指代无用变量的表达式) 原理和做法是什么 删除不可达基本快和子表达式还有常熟折叠,代数优化的原理 是顺序遍历程序指令。 做法就是顺序遍历指令(如一图的子表达式删除和拷贝传播技术) 活跃性分析:删除无用变量和无用变量的计算表达式的原理是利用变量的活跃度分析进行检测。

    2.1K10编辑于 2023-12-07
  • 来自专栏佳爷的后花媛

    编译器的结构|编译原理

    正文之前,附上一点关于昨天编译器和解释器的思考: 编译器和解释器之间的区别是什么? 编译器相对于解释器的优点是什么?解释器相对于编译器的优点是什么? 在一个语言处理系统中,编译器产生汇编语言而不是机器语言的好处是什么? 把一种高级语言翻译成另一种高级语言的编译器称为源到源(source to source )的翻译器,编译器使用C语言作为目标语言有什么好处? 描述一下汇编器所要完成的一些任务。 今天的内容是冠以编译器的结构。 综合部分: 综合部分根据中间表示和符号表中的信息来构造用户期待的目标程序,分析部分经常被称为编译器的前端,而综合部分称为后端。 ? 一个编译器的各个步骤 ? 一个赋值语句的翻译 ?

    2.9K20发布于 2020-04-24
  • 来自专栏学习之路

    编译原理 期末速成

    翻译程序 vs 编译程序 翻译程序的三种方式 编译:将高级语言编写的源程序翻译成等价的机器语言或汇编语言。 编译程序的五个阶段 词法分析:对源程序的字符串进行扫描和分解,识别出每个单词符号。 语法分析:根据语言的语法规则,把单词符号分解成各类语法单位。 问题:源代码中括号不匹配的错误一般在编译的哪个阶段(采用五阶段划分模型)被检查出来,简述这一阶段的名称和主要任务 名称:语法分析 主要任务:读取词法符号,进行语法分析,判断源程序是否符合程序语法,并生成抽象语法树或语法符号 文法 G 所产生的句子的全体是一个语言,记为 L(G) 3. 语法分析树 编译原理笔记9:语法分析树、语法树、二义性的消除 语法分析树是语言推导过程的图形化表示方法。 因此终态组无需再分 然后再来看非终态组 由于 {2, 3} => {0,3}(a 路径下),{2,3} => {3}(b 路径下),前者不是当前集合子集,所以需要划分为 {2} {3},故最小化的结果为

    2.4K10编辑于 2025-05-25
  • webpack之编译原理

    webpack 的作用是根据入口文件将源代码编译(构建、打包)成最终代码。 中间经过webpack打包,打包的过程就是编译 整个过程大致分为三个步骤:初始化、编译(最重要)、输出 「初始化」 在初始化这个阶段webpack会将CLI参数、配置文件、默认配置进行融合,形成一个最终的配置对象 /src/index.js 模块,发现该模块并未加载过 第3步:读取该模块中的内容,内容其实是个字符串 //读取内容(字符串) console.log("index"); require(". 以上就是webpack编译过程,做这一切最终的目的就是形成一个模块记录表。 下面有个简图,经过上述编译过程之后会在chunk中通过入口文件加载形成多个模块,每个模块记录了转换之后的代码。 如果没有配置则使用main id:通常指chunk的唯一编号,如果在开发环境下构建,和chunkname相同;如果是生产环境下构建,则使用一个从0开始的数字进行编号 最后 若本文对于 webpack编译原理

    2.5K10编辑于 2023-12-29
  • 来自专栏shysh95

    Java编译原理(javac)

    Java中的编译分为两个部分: 源码文件编译成字节码文件(前端编译) 字节码文件被虚拟机加载以后编译成机器码(后端编译) 对于开发来说接触的一般都是第一个步骤也就是源码编译成字节码文件(class文件) 上述3个过程会包含前段编译4个步骤的所有流程,下面我们看一下这个3个步骤需要做什么。 2. int a = b + c; int是由3个字符构成,但是对于词法分析来说,这三个字符会被解析成一个Token(标记)。 符号表中信息可以用在语义分析过程中的检查和产生中间代码 3. 注解处理器 注解处理器在编译期间对注解进行处理,可以读取、修改、添加抽象语法树中的任意元素。 int a = 1 + 2; 上述代码我们在语法树上可以看到字面量1、2以及操作符+,在经过常量折叠步骤以后,会生成一个新的字面量3,在程序运行时a的值就是3,不会再消耗CPU进行计算。

    3.4K10发布于 2021-03-16
  • 来自专栏编程技术分享

    如何学习编译原理

    对于没有计算机科学基础知识的程序员或初学者来说 一上来就看龙书 虎书是行不通的 全是理论知识 看得想睡觉 我还试过看网易云大学计算机专业的编译原理课程 也是看得一头雾水 看到80多讲就看不下去了 另外 SICP(计算机程序的构造和解释)这本很多人推荐的书其实并不适合初学者 前3章和后面几章难度差别有点大 可能是自己水平不行 看SICP解释器和编译器那两章也是看不懂 虽然强迫自己看完 但是最后还是不懂编译原理到底是怎么回事 它就是 《计算机系统要素》 这本书前面5章讲的是硬件知识 虽然跟编译原理没什么关系 但是对于了解计算机硬件知识是很有用的 重点是通俗易懂 后面的章节就是和编译原理有关的知识了 书里的内容介绍了 汇编编译器 (将汇编语言翻译为机器语言) VM编译器(将虚拟机语言翻译为汇编语言) 编译器(将高级语言翻译为虚拟机语言) 不要看到有3个编译器就觉得难 其实相对于上面介绍的书籍 算是非常简单了 我大概花了1个多月的时间完成了这本书的所有项目 最终写出了一个编译器 算是对编译原理有了一个比较全面但不深入的了解吧 这个时候再去看龙书 虎书 就不会感觉很吃力了 附上我完成这本书所有项目的答案 https://github.com/woai3c/

    2.3K20发布于 2020-09-28
  • 来自专栏佳爷的后花媛

    编程语言|编译原理

    关于昨天的思考: 编译器的各个步骤有哪些? 能否省略其中某个步骤 编译器是怎样解析代码的? 什么是语法树? 怎样生成目标程序? 语义分析和语法分析有什么不同? 中间代码是怎么生成的? 编译器怎样记录源程序中使用的变量的名字? 编译构造工具有哪些? 今天的是讲一讲编程语言,为什么会有这么多不同的编程语言?为什么还会有新的编程语言? ? PROLOG 冯诺依曼语言 FORTRAN,C 面向对象语言 C++,C#,JAVA,Ruby 脚本语言 AWK,JavaScript ,Perl ,PHP,Python ,Ruby ,TCL 编程语言和编译器有关系么

    3.9K30发布于 2020-04-24
  • 来自专栏huofo's blog

    编译原理(1)总结

      本科是网络工程,由于没有学<<编译原理>>这门课,打算两个月把国科大的编译原理梳理完,把其中我认为的精髓概括一下,三天一篇,作为笔记。 编译程序还有以下分类: 诊断编译程序(Diagnostic Complier,帮助程序员排错) 优化编译程序(Optimizing Complier,提高目标代码执行效率) 交叉编译程序(Cross Complier 2020-11-30-00-31-52.png 二、为什么要学习编译原理 理解计算系统 设计计算系统 训练计算思维 抽象 自动化 问题分解 递归 权衡 保护、冗余、容错、纠错和恢复 利用启发式推理来寻求解答 语法分析   任务:在词法分析的基础上,根据语法规则把单词符号分解成各类语法单位(语法范畴)   原则:语法规则   工具:上下文无关文法 3. 3.使用高级语言   如果已存在某种高级语言(如C++,已存在C++的编译器和汇编器)。

    2.4K11编辑于 2022-03-17
  • 编译原理期末题型

    1)分成四种类型,即0型、1型、2型和3型。 (3)若P中的每一个产生式α→β满足:α是非终结符,β∈(VN∪VT),则此文法称为2型的。(4)若P中的每一个产生式的形式都是A→aB或A→a,其中A和B都是非终结符,a∈VT,则G是3型文法。 3.什么是算符文法?并举例说明 设有文法G,如果G中没有形如A->…BC…的产生式,其中B,C为非终结符,则称G为算符文法。 4.什么是3型文法?什么是文法的语言? (1)若P中的每一个产生式的形式都是A→aB或A→a,其中A和B都是非终结符,a∈VT*,则G是3型文法。 ,P3执行完毕出栈,P1执行完出栈,main执行完毕,main活动记录出栈。

    54210编辑于 2025-04-07
  • 来自专栏技术分享

    【编译原理】Chapter 0:当你学习编译原理之前需要了解什么

    【编译原理】0.当你学习编译原理之前需要了解什么 前言 编译原理(Compiler Design)是计算机科学中研究程序编译过程的学科。 ——《编译原理》 编译的过程就跟翻译一样,通常分为五步: 1.识别出句子中的单词(词法分析) 2.分析句子的语法结构(语法分析) 3.根据句子的含义进行初步翻译(语义分析与中间代码产生) 4.对译文进行修饰 编译原理带给我们什么? 对于计算机领域,编译原理与编译过程紧紧挂钩。我们了解了它的原理就有助于我们更加细致地去了解编译带给计算机领域的作用。 计算机基础知识 在学习编译原理之前,了解计算机系统的基本工作原理有助于更好地理解编译器的实现。 语法分析方法(LL、LR 解析):掌握这些方法有助于理解现代编译器的语法分析过程。 3.

    83810编辑于 2025-03-06
领券