问题标签 [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 投票
2 回答
975 浏览

c# - 在 Visual Studio 中生成的中间代码

由于Stack Overflow 帖子中描述了为什么需要中间代码,我的问题是,

中间代码是否保存在解决方案中?

如何查看生成的整个 IL?

在此处输入图像描述

Denis Bauer 的 Reflector 和 File Disassembler 插件。它实际上从程序集中生成源项目,其中 Reflector 仅显示反汇编的而不显示中间代码。

0 投票
1 回答
753 浏览

compiler-construction - Three-address code and symbol tables

I am working on a hobby retargetable C compiler in OCaml and I'm building it bottom up. So far I have an annotated AST type, abridged:

and a three-address code type (again abridged):

I have functions written that will transform an AST into a list of TAC nodes ignoring the annotations. Regarding this I have two questions:

  1. What do I do differently when transforming a type-annotated AST to a list of TAC nodes? Should I add annotations to TAC nodes too? This would allow me to later transform high level int/char types into lower-level ones like I16/I8.

  2. How do I handle scoping? What if I have two Vars that have the same name in different scopes?

0 投票
3 回答
6547 浏览

svg - 是否有二进制类型的 SVG?

在我看来,在为动态数据可视化编写代码时,我最终会在不同的语言/平台上一遍又一遍地做同样的事情。现在,如果我有一个跨平台语言(我有)和类似 SVG 的二进制版本,我可以让我的代码以它为目标,并为我目前需要使用它的任何平台使用/创建解释器。

我不想要 SVG 的原因是因为纯文本部分对于我的目的来说太慢了。我当然可以创建自己的中间格式,但是如果已经有一些东西可以通过各种东西实现,那么我的工作就更少了!

0 投票
0 回答
523 浏览

compiler-construction - 类型化中间语言的语用学

编译中的一个趋势是使用类型化的中间语言。Haskellghc及其core中间语言,System F-omega 的一种变体,就是这种架构的一个例子 [1]。另一个是 LLVM,它的核心是一种类型化的中间语言 [2]。这种方法的好处是可以及早检测到构成代码生成器部分的转换中的错误。此外,可以在优化和代码生成期间使用类型信息。

为了提高效率,类型化的 IR 会进行类型检查,而不是推断其类型。为了快速进行类型检查,每个变量和每个 binder 都携带类型以便于类型检查。

但是,编译器管道中的许多转换可能会引入新变量。例如,规范化转换K(.)可能会转换应用程序

变成像这样的表达

问题。我想知道编译器如何处理为新引入的变量赋予类型的问题。K(M)在上面的示例中,他们是否重新进行类型检查K(N)?这不是很费时间吗?它是否需要传递一个环境?他们是否使用来自 AST 节点的映射来键入信息以避免重新运行类型检查?


  1. S. Marlow,S. Peyton Jones,格拉斯哥 Haskell 编译器

  2. LLVM 语言参考手册

0 投票
1 回答
261 浏览

compiler-construction - 单程编译器中间表示?

我一直在阅读龙之书,我想知道单程编译器,如果我弄错了,请纠正我,但是当编译器进行分析时,它会生成越来越准确的中间表示,或者可能不是准确的无论如何,也许优化是一个更好的术语。单遍编译器每个阶段只经过一次,有时会将多个阶段组合成一个遍,那么这是否意味着中间表示将不太理想?我确定我对此的想法有问题,所以请随时纠正我所做的任何错误假设(或者让我知道这个问题有多愚蠢,无论哪种方式)。

此外,如果中间表示不受影响,那么如果多通道编译器会导致编译时间变慢,我们为什么还要使用它们呢?

0 投票
1 回答
350 浏览

c# - IL代码中的那些符号是什么?

IL_0000IL代码中的这个符号(等)是什么。这是真正的内存堆地址吗?

0 投票
2 回答
5087 浏览

c# - InvalidProgramException(无效的 IL 代码)?

我试图在运行时将以下代码作为 IL 代码发出。

LINQPad 显示:

尝试用 C# 重现它:

TestSubject 类:

给我以下例外:

System.InvalidProgramException {"Die Common Language Runtime hat ein ungültiges Programm gefunden."}

那有什么问题?

0 投票
1 回答
2684 浏览

java - 使用 Antlr4 的翻译器

我想创建一个从 SQL 到 XQuery 的转换器。
我想解析 SQL 并生成一个中间结构,然后用它来生成 XQuery 查询。
(注意-我想使用中间表示,因为我期待将来将 SQL 翻译成其他查询语言)
但我不知道一旦定义了语法,如何生成翻译器。我想使用 ANTLR 并且确实已经创建了语法。我现在卡在语法文件上并继续构建翻译器,因为我不确切知道制作翻译器的下一步是什么。

0 投票
1 回答
283 浏览

c - 关于 C 作为中间语言的问题

我现在正在编写一种可以编译为 C 的语言,当我说 IL 时,我的意思是因为 C 是我编写代码的语言,然后由另一个 c 编译器(例如 gcc 或 clang)生成程序集。

我生成的C代码,会不会更有利于:

  • 如果我做一些简单的选择传递(不断传播,删除死代码,......)这会减少 C 编译器必须做的工作量,还是因为它不是真正的人类 C 代码而使其变得更难?
  • 如果我要编译成三地址代码或 SSA 或其他形式,然后将其输入到带有函数、标签和变量的 C 程序中——这会使 C 编译器更容易还是更难优化?

哪种链接在一起形成以下问题...

  • 从编译为 C 的语言生成良好 C 代码的最佳方法是什么?
  • 是否值得进行任何优化并将其留给编译器?
0 投票
5 回答
6441 浏览

c# - C# 6 自动初始化属性和支持字段的使用

在 C# 6 之前,属性的初始化不使用支持字段来初始化默认值。在 C#6 中,它使用支持字段通过新的自动初始化属性进行初始化。

我很好奇为什么在 C#6 IL 之前使用属性定义来初始化。这有什么具体原因吗?还是在 C#6 之前没有正确实现?

在 C# 6.0 之前

编译器生成的代码(IL 表示)

C#6

编译器生成的代码(IL 表示)