今天芳芳来为大家解答以上的问题。主流编译器,2024年编译器有哪些相信很多小伙伴还不知道,现在让我们一起来看看吧!
1、词法/语法分析、程序分析与程序变换、代码生成、内存管理、虚拟机、函数式语言的实现与优化。
2、每个话题都能出不止一本书。
3、用到的算法/数据结构多如牛毛:各种树、图为主,其他如栈、队列、散列表、并查集。
4、贪心、回溯、动态规划、遗传算法、矩阵变换。
5、 在一个问题下很难回答好。
6、 先简单介绍一下和图相关的。
7、 1. 和什么图打交道 CFG(Control Flow Graph)控制流图是对程序中分支跳转关系的抽象,描述程序所有可能执行路径节点是语句集合(basic block);每个basic block有唯一入口和出口;如果A到B有边,表示A执行完后可能执行BPDG(Program Dependence Graph)PDG在编译器中用得不多,常见于软件工程/安全相关的应用(程序切片、安全信息流等)SSA(Single Static Assignment)SSA简化了很多数据流分析问题。
8、其他图DJ Graph, Loop Nesting Forest, Program Structure Tree等等。
9、可参考:IR for Program Analysis。
10、下面主要介绍CFG2. CFG初步处理CFG构造dominator树生成在CFG中,如果A是B的dominator,则从程序入口执行到B的任意路径一定经过A控制依赖分析根据dominator和post-dominator分析依赖关系。
11、数据依赖、控制依赖信息在自动并行化中尤其重要(如果循环的每次迭代都没有依赖,那么可以并行处理)控制流图化简在复杂度相同的情况下,CFG的规模影响算法的效果。
12、如果一个CFG仅通过如下变换能化简为一个节点,则它是可化简的:如果节点n有唯一的前驱,那么将其和其前驱合并为一个节点如果节点存在到自身的边,那么将该边删除构造SSASSA可以由CFG构造。
13、3. CFG与数据流分析下面才进入主题。
14、一般的文献介绍DFA(Data flow analysis),都会用几个基础的分析为例:Constant Propagation,Range propagation,Avaliable expressions,Reaching Definition。
15、而Reaching Definition的一个应用,就是大家喜闻乐见的“跳转到定义处”(真要做到“智能”跳转并不简单)这部分涉及东西较多,一些算法也和”图“并不直接相关,不再展开。
16、PS,很多DFA问题可以用graph reachability统一建模,强烈推荐此文:Program analysis via graph reachability。
本文就为大家分享到这里,希望小伙伴们会喜欢。