问题标签 [intermediate-language]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 编译后中间表示的优势
如果您仍然必须为每个平台设计一个单独的软件(在这种情况下为 JVM),那么在编译后有一个中间表示(例如 Java 有字节码)有什么意义?我的意思是平台依赖性仍然存在!
python - 简单编译到 C 语言的语义分析
所以我正在努力创建一种简单的、可编译为 C 的语言,它的语法类似于 Python。这是一些示例源代码:
与 Python 一样,该语言通过缩进策略强调可读性。它还有一个非常松散的类型声明系统。类型由上下文决定。
我上面的示例源代码在内部表示如下:
每个函数都与各自的局部变量及其类型(也是它们在函数中声明的行的索引)一起打包到此表示中。
我正在尝试将此中间表示转换为实际的 C 代码(实际上它是 NXC 代码,因此它与 C 略有不同)。
我的问题是如何理解变量类型(特别是在函数参数中声明的变量)。我可以做到这一点的唯一方法是根据调用函数的上下文进行猜测。
更不用说,我正在以线性方式创建中间表示。如果一个函数被定义但直到稍后才被调用,会发生什么?在获得所有必要的类型信息之前,我是否需要多次运行来修改这个中间表示?
language-agnostic - How does backpatching work with markers?
I've searched all over the Internet and could not find a proper explanation of how backpatching works?
Can you please explain me how does backpatching works? How does it work with the markers?
I know it has 2 main types of markers:
- with next-quad in it
- with next-list in it
I found this code, in which they are taking an input file and creating a file with RISKI language.
In their first roll they have:
and you can see that N and M are markers (they are empty rolls).
assembly - 中间语言的最小汇编指令集?
我想知道以下几点:
是否可以创建一小组汇编指令,它们可以一起完成所有可能的操作?或者可能会问不同的问题,关于任何架构的必备汇编指令是什么?
(例如,任何事情都需要 Jump 和 Add)
我希望你们能帮助我!
提供一些背景信息:我正在尝试为我的编译器设计一种中间语言,并且我想使用尽可能少的指令(然后,这些指令中的一堆指令可以代替特定架构的一个复杂指令)。当然,IL 本身应该是可移植的。
compiler-construction - FPGA 编译器的中间表示
在为标准计算机编写编译器时,可以针对现有的中间表示(如 LLVM IR)而不必担心系统之间棘手的架构差异。FPGA 是否存在类似的情况?
c - 我的 Fortran 编译器的中间代码生成:DAG 或四倍
我正在使用 Flex 和 Bison 编写一个迷你 Fortran 编译器。至此,我已经完成了词法和句法分析。我在类型检查的语义分析中,我现在必须选择一个 IR。我的目标机器是 MIPS。所以我想要基于 MIPS IAS 的最终代码生成。所以我相信一个好的IR是四倍。但我想介绍一些优化。出于这个原因,我构建了一个 DAG 结构(使用哈希表)。IR 有 2 条路径:四倍或 DAG,然后是四倍。
如果我使用 DAG 作为我的 IR,我如何使用 backpatching 方法进行语句?有了四倍体,这很容易。另一方面,DAG 更抽象。我将被迫将其转换为四倍。我知道。我的恐惧是回补。
cil - ldloc var 与 ldloc.n
ldloc var
有人知道使用CIL 指令和是否存在细微差别ldloc.n
?
考虑方法范围内的这个本地 var 表:
这些指令是:
更好、最差或等于:
c# - 使用 Reflection.Emit Opcodes 的字段获取器 - IL 局部变量的使用
我正在学习 IL,我想编写一种高性能的 hack 来访问任何对象的字段值(如反射,但速度更快)。
所以我做了这个类进行测试:
然后我就有了这样一个程序(我在所有 IL 指令之后添加了注释以提高可读性,也分为几个逻辑部分;在每个部分之后都写了我认为现在在堆栈上的内容):
此代码崩溃(在 Invoke 上,并且 Emit 中的 Exception 与往常一样有用)。我可以替换第 2 部分和第 3 部分,如下所示:
它工作正常。请注意,这次我没有使用任何局部变量,f
而是t
来自方法外部的变量。然而,使用这种方法,我需要生成尽可能多的方法,就像它习惯的类型和字段一样多。所以这是一个非常不令人满意的解决方案。
显然,我对局部变量做错了,但我无法弄清楚它到底是什么。我错过了什么?
编辑:
这是经过大简化后的代码。CrashTestDummy 现在有字符串属性,所以我可以摆脱对 int 的装箱:
主要代码如下:
java - 如何用静态分析估计变量的值?
我想根据 Soot 的内置到达定义分析编写一个程序来执行此操作。现在我想知道这是正确的方法吗?我搜索并发现似乎没有人对这个方向感兴趣。
有什么建议么?