问题标签 [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.

0 投票
3 回答
504 浏览

java - 编译后中间表示的优势

如果您仍然必须为每个平台设计一个单独的软件(在这种情况下为 JVM),那么在编译后有一个中间表示(例如 Java 有字节码)有什么意义?我的意思是平台依赖性仍然存在!

0 投票
0 回答
306 浏览

python - 简单编译到 C 语言的语义分析

所以我正在努力创建一种简单的、可编译为 C 的语言,它的语法类似于 Python。这是一些示例源代码:

与 Python 一样,该语言通过缩进策略强调可读性。它还有一个非常松散的类型声明系统。类型由上下文决定。

我上面的示例源代码在内部表示如下:

每个函数都与各自的局部变量及其类型(也是它们在函数中声明的行的索引)一起打包到此表示中。

我正在尝试将此中间表示转换为实际的 C 代码(实际上它是 NXC 代码,因此它与 C 略有不同)。

我的问题是如何理解变量类型(特别是在函数参数中声明的变量)。我可以做到这一点的唯一方法是根据调用函数的上下文进行猜测。

更不用说,我正在以线性方式创建中间表示。如果一个函数被定义但直到稍后才被调用,会发生什么?在获得所有必要的类型信息之前,我是否需要多次运行来修改这个中间表示?

0 投票
3 回答
258 浏览

scala - scalac中使用的中间语言?

GCC 编译器 中,我们看到了几种“中间语言”:RTLGENERIC 和 GIMPLE

这个答案暗示了 中的中间表示的想法scalac

我的问题是:Scala 中是否存在编译器的“中间表示”?有这方面的文件吗?

假设:

  • 我不是指 JVM 字节码。我的意思是上面的抽象级别。
0 投票
1 回答
2749 浏览

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:

  1. with next-quad in it
  2. 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).

0 投票
2 回答
227 浏览

assembly - 中间语言的最小汇编指令集?

我想知道以下几点:

是否可以创建一小组汇编指令,它们可以一起完成所有可能的操作?或者可能会问不同的问题,关于任何架构的必备汇编指令是什么?

(例如,任何事情都需要 Jump 和 Add)

我希望你们能帮助我!

提供一些背景信息:我正在尝试为我的编译器设计一种中间语言,并且我想使用尽可能少的指令(然后,这些指令中的一堆指令可以代替特定架构的一个复杂指令)。当然,IL 本身应该是可移植的。

0 投票
1 回答
330 浏览

compiler-construction - FPGA 编译器的中间表示

在为标准计算机编写编译器时,可以针对现有的中间表示(如 LLVM IR)而不必担心系统之间棘手的架构差异。FPGA 是否存在类似的情况?

0 投票
1 回答
476 浏览

c - 我的 Fortran 编译器的中间代码生成:DAG 或四倍

我正在使用 Flex 和 Bison 编写一个迷你 Fortran 编译器。至此,我已经完成了词法和句法分析。我在类型检查的语义分析中,我现在必须选择一个 IR。我的目标机器是 MIPS。所以我想要基于 MIPS IAS 的最终代码生成。所以我相信一个好的IR是四倍。但我想介绍一些优化。出于这个原因,我构建了一个 DAG 结构(使用哈希表)。IR 有 2 条路径:四倍或 DAG,然后是四倍。

如果我使用 DAG 作为我的 IR,我如何使用 backpatching 方法进行语句?有了四倍体,这很容易。另一方面,DAG 更抽象。我将被迫将其转换为四倍。我知道。我的恐惧是回补。

0 投票
1 回答
373 浏览

cil - ldloc var 与 ldloc.n

ldloc var有人知道使用CIL 指令和是否存在细微差别ldloc.n

考虑方法范围内的这个本地 var 表:

这些指令是:

更好、最差或等于:

0 投票
1 回答
2661 浏览

c# - 使用 Reflection.Emit Opcodes 的字段获取器 - IL 局部变量的使用

我正在学习 IL,我想编写一种高性能的 hack 来访问任何对象的字段值(如反射,但速度更快)。

所以我做了这个类进行测试:

然后我就有了这样一个程序(我在所有 IL 指令之后添加了注释以提高可读性,也分为几个逻辑部分;在每个部分之后都写了我认为现在在堆栈上的内容):

此代码崩溃(在 Invoke 上,并且 Emit 中的 Exception 与往常一样有用)。我可以替换第 2 部分和第 3 部分,如下所示:

它工作正常。请注意,这次我没有使用任何局部变量,f而是t来自方法外部的变量。然而,使用这种方法,我需要生成尽可能多的方法,就像它习惯的类型和字段一样多。所以这是一个非常不令人满意的解决方案。

显然,我对局部变量做错了,但我无法弄清楚它到底是什么。我错过了什么?


编辑:

这是经过大简化后的代码。CrashTestDummy 现在有字符串属性,所以我可以摆脱对 int 的装箱:

主要代码如下:

0 投票
2 回答
586 浏览

java - 如何用静态分析估计变量的值?

我想根据 Soot 的内置到达定义分析编写一个程序来执行此操作。现在我想知道这是正确的方法吗?我搜索并发现似乎没有人对这个方向感兴趣。

有什么建议么?