编译原理

朝与暮1 天前
前端·编译原理·编译器
《深入浅出编译原理 -- 编译原理总述(一)》编译原理系列演示代码多以c语言为主、不会c的同学需要学习一下c,不用太深入能懂数据类型、能看懂c的代码就行
代码欢乐豆2 天前
数据结构·算法·编译原理
编译原理机测客观题(7)优化和代码生成练习题第十章优化和代码生成练习题优化知识点:循环优化包括:代码外提、强度削弱、删除归纳变量、循环展开、循环合并
canonical_entropy2 天前
后端·架构·编译原理
最小信息表达:软件框架设计的第一性原理我们生活在一个由代码构筑的世界,这里的复杂性持续膨胀,永无止境。框架潮起潮落,技术栈日新月异,代码库如热带雨林般肆意蔓延,最终变得僵化、脆弱、难以理解。面对这片日益茂密的复杂性丛林,我们不禁追问:这种令人窒息的复杂性,究竟是业务固有的本质,还是我们亲手创造的产物?
colus_SEU7 天前
c++·算法·编译原理
【编译原理笔记】2.1 Programming Language Basics对应龙书中1.6节静态问题(Static Issues):在编译时就能确定和处理的问题动态问题(Dynamic Issues):需要在运行时才能解决的问题
haogexiaole8 天前
编译原理
编译原理核心知识点词法分析将源代码转换为有意义的词素(Token)序列。主要涉及正则表达式、有限自动机(DFA/NFA)等理论。常见工具如Lex、Flex,通过定义词法规则自动生成词法分析器。
爱和冰阔落13 天前
c++·面试·编译原理·模板
C++模板进阶 非类型模板参数 模板的特化 分离编译的深入探索🔥个人主页:爱和冰阔乐 📚专栏传送门:《数据结构与算法》 、C++ 🐶学习方向:C++方向学习爱好者 ⭐人生格言:得知坦然 ,失之淡然
Hankin_Liu的技术研究室1 个月前
c++·编译原理
可观测副作用:C++编译器优化的“红线”在学习 C++ 标准时,经常会遇到一个看似枯燥的词:as-if rule。它的核心意思很简单:编译器可以对代码做任何优化,只要最终表现得“好像(as if)”按照源码逐条执行一样。 那问题来了——什么叫“表现得一样”? 答案就在一个关键词里:可观测副作用(observable side effects)。
数据智能老司机1 个月前
架构·编程语言·编译原理
自己动手写编程语言——源代码扫描在任何编程语言中,第一步都是读取输入源代码的单个字符,并判断哪些字符应当归为一组。类比自然语言,这就像查看相邻的字母序列以识别“单词”。在编程语言里,字符簇会组成变量名、保留字,或有时是多个字符构成的运算符或标点。本章将教你如何读取源代码,并用模式匹配从原始字符中识别出“单词”和“标点”。
数据智能老司机1 个月前
架构·编程语言·编译原理
自己动手写编程语言——编程语言设计在尝试构建一门编程语言之前,你需要先给它下定义。这包括设计语言在“表面上”可见的特性,例如构成词与标点的基本规则;还包括更高层级的规则(称为语法),它们约束在更大的程序片段中(如表达式、语句、函数、类、包与程序)词与标点的数量与顺序。语言设计还包括底层含义,也就是语义。
用户75389755281751 个月前
编译原理·编译器
《手写解释器》第7章 表达式求值You are my creator, but I am your master; Obey!—— Mary Shelley, Frankenstein
无厘头三四十2 个月前
编译原理
现代编译器直接生成机器码的原理现代编译器并不是真正"跳过"汇编,而是在内存中直接构建机器码,而不生成中间的汇编文本文件。编译器内置了指令到机器码的映射表:
猪哥帅过吴彦祖2 个月前
操作系统·编译原理·编译器
从源码到可执行文件:揭秘程序编译与执行的底层魔法当你敲下 gcc hello.c -o hello 并运行 ./hello 时,计算机内部究竟发生了什么?让我们一起踏上这场从高级语言到机器指令的奇妙旅程。
poemyang2 个月前
java虚拟机·编译原理·即时编译器·方法内联
性能优化之母:为什么说“方法内联”是编译器优化中最关键的一步棋?方法内联 方法内联(Method Inlining)是编译器在进行优化时,将被调用方法的代码直接嵌入到调用点,以替代方法调用指令的过程。它不仅消除了方法调用的开销,还为后续的优化(如常量传播、死代码消除等)创造了条件。 Java程序的方法调用会涉及到如下步骤: 1)保存当前方法的程序计数器(返回地址); 2)为被调用方法创建一个新的栈帧并压栈; 3)执行运算被调用方法的程序逻辑; 4)弹出栈帧,再恢复当前方法的上下文。
poemyang2 个月前
java虚拟机·编译原理·逃逸分析·即时编译器
new出来的对象,不一定在堆上?聊聊Java虚拟机的优化技术:逃逸分析逃逸分析(Escape Analysis)是一种静态程序分析技术,主要用于判定对象的可见范围(Visibility)与生命周期(Lifetime)。该技术是现代即时编译器实现局部化优化、提升内存使用效率、降低同步成本的基础。 通俗来说,逃逸分析的核心在于回答这样一个问题:某个对象是否可能“逃逸”出它所创建的方法或线程作用域? 逃逸分析的结果通常分为三种情形。 1)未逃逸(No Escape):对象完全局限在当前方法内,既未作为返回值,也未传递到其他线程或方法。 2)方法逃逸(Method Escape):
前端缘梦2 个月前
webpack·编译原理·前端工程化
解锁webpack核心技能(三):从源代码到打包产物编译过程的原理指南当我第一次看到Webpack将一堆零散的文件打包成一个整洁的bundle时,感觉就像在看一场神奇的魔术表演。这个"魔术"的背后,其实是Webpack精妙的编译过程在发挥作用。 Webpack的编译过程就像一条精心设计的流水线,把我们的源代码一步步转化为最终可运行的代码。这个过程主要分为三个关键阶段:
poemyang2 个月前
java虚拟机·编译原理·jit·向量化计算·smid
解锁硬件潜能:Java向量化计算,性能飙升W倍!机器相关的编译优化 与机器相关的编译优化常见的有指令选择(Instruction Selection)、寄存器分配(Register Allocation)、窥孔优化(Peephole Optimization)等。这些机器级优化通常发生在中间表示向目标代码生成之间的后端编译阶段。 与源代码层面的优化(如循环展开、内联函数)相比,它们更接近硬件,必须考虑具体平台的硬件特性。如指令集结构(如RISC精简指令集 vs CISC复杂指令集);通用寄存器和专用寄存器的数量与类型(如浮点寄存器、向量寄存器);指令延
poemyang3 个月前
java虚拟机·编译原理·ir·即时编译器
Java编译器优化秘籍:字节码背后的IR魔法与常见技巧中间表达形式 编译器通常被划分为前端编译器和后端编译器两个部分。前端编译器负责对源代码进行词法分析、语法分析和语义分析,生成中间表达形式(Intermediate Representation ,IR)。这种由前端生成的IR被称为高级中间表达形式(High Intermediate Representation,HIR),其优化主要与源代码本身的特性有关。 后端后端编译器则将HIR转换为低级中间表达形式(Low Intermediate Representation,LIR),并进行进一步的优化。这种优化
poemyang3 个月前
java·java虚拟机·编译原理·jit·即时编译器
“代码跑着跑着,就变快了?”——揭秘Java性能幕后引擎:即时编译器HotSpot虚拟机内部集成了两个即时编译器,分别被称为C1编译器(Client Compiler/ Quick Complier)和C2编译器(Server Compiler)。自Java 9起,-server模式(即启用C2编译器或分层编译)是默认选项,-client选项通常会被忽略。 C1编译器的启动速度较快,主要关注局部的、简单且可靠的优化策略,例如方法内联、常量传播、死代码消除、冗余消除等。相比之下,C2编译器则专注于全局优化,这些优化通常需要更长的编译时间,甚至会根据性能监控(profilin
poemyang3 个月前
java·java虚拟机·aot·编译原理·解释执行
“同声传译”还是“全文翻译”?为何HotSpot虚拟机仍要保留解释器?Java虚拟机采用的是基于栈的指令集架构,这意味着Java虚拟机主要通过解释执行基于栈的字节码来运行Java程序。尽管Java虚拟机采取了一些优化措施,如栈顶缓存(Stack Top Cache),将栈顶元素缓存到寄存器中以减少对内存的频繁访问,但这些优化手段并不能从根本上解决基于栈的指令集执行效率相对较低的问题。 因此,对字节码的编译和执行优化成为了提升Java虚拟机性能的一个关键环节。 Java编译过程可以被划分为前端编译(Source-to-Bytecode)和后端编译(Bytecode-to-Na
漂流瓶jz3 个月前
前端·javascript·编译原理
JavaScript语法树简介:AST/CST/词法/语法分析/ESTree/生成工具在平时的开发中,经常会遇到对JavaScript代码进行检查或改动的工具,例如ESLint会检查代码中的语法错误;Prettier会修改代码的格式;打包工具会将不同文件中的代码打包在一起等等。这些工具都对JavaScript代码本身进行了解析和修改。这些工具是如何实现对代码本身的解析呢?这就要用到一种叫做AST抽象语法树的技术。