9得票7回答
为什么编译器不能像我输入代码一样立即编译它?

为什么编译器不能在我输入代码时直接编译它呢? 从用户的角度来看,它可以像语法着色一样顺畅工作。如果您停止输入足够长的时间(可能是几秒钟),则编译(而不是链接)将完成,并且使用类似语法着色的方式来识别代码错误。 这并不像我的3GHz四核怪兽电脑真的很忙于做其他事情。为什么不让它一直编译呢?

9得票8回答
组合语言性能调优

我正在编写一个编译器(更多是为了好玩),但我希望尝试让它尽可能高效。例如,有人告诉我,在Intel架构上,除了 EAX 寄存器以外的任何寄存器执行数学运算都会增加成本(可能是因为它在交换到 EAX 后才执行实际的数学计算)。这里至少有一个来源表明了这种可能性(http://www.swanso...

9得票5回答
制作编译器需要哪些编程语言特性?

编程语言似乎经历了几个阶段。首先,有人想出了一种新的语言Foo。编译器/解释器是用另一种语言编写的,通常是C或其他低级语言。在某个时候,FooL成熟并增长,最终有人会在FooL本身中编写编译器和/或解释器。 我的问题是:什么是最小的语言特性子集,以便某人可以在该语言本身中实现该语言?

9得票3回答
C++解析的复杂性

出于好奇,我想知道有关解析C ++的“理论”结果。 假设我的项目大小为n(以LOC为例,但由于我们将处理大O,因此这不是非常重要) C ++的解析复杂度是否为O(n)?如果不是,那么它的复杂度是什么? C(或Java或任何语法上更简单的语言)是否以O(n)解析? C ++ 1x会引入...

8得票2回答
什么是抽象语法树?它是否必要?

我一直对编译器/解释器的设计和实现感兴趣(只有5年来),它总是被认为是幕后的“魔法”,没有人真正谈论它(我知道至少有2个操作系统开发论坛,但我不知道任何关于编译器/解释器/语言开发的社区)。无论如何,最近我决定开始自己动手,并希望扩展我的整个编程知识(而且这很有趣:)。因此,基于我有限的阅读材...

8得票2回答
如何手动解析左递归文法是最简单的方法?

我正在为一个个人项目编写解析器,并且出于教育目的,希望手动编写而不是使用解析器生成器。不幸的是,许多在线资源(以及我在大学里上的编译器课程)都假定某种LL(k)文法。但我不想左因子化文法,因为存在左递归的非终结符。 E ::= E * E | E / E | E + E ...

8得票1回答
使用固定/预分配寄存器的表达式的代码生成

我正在使用以下算法(从此回答中借鉴思路:this)来从树中生成代码,我针对x86体系结构进行编写,现在我需要处理使用eax/ebx寄存器作为参数的mul/div指令。 我的问题是: 如何修改此算法以将某个指令的操作数加载到固定寄存器中?例如,对于mul指令,在eax和ebx寄存器中加载左子...

8得票4回答
编译与翻译的区别,“编译”Java为字节码?

我的理解如下,定义如下: 翻译 - 使用某种语言编写代码,生成其他语言的代码。 编译 - 翻译成机器码。 机器码 - 直接给CPU的指令。 现在,来自docs.oracle.com: javac - Java编程语言的编译器 编译器...?我认为它应该是Java 翻译器,因为它...

8得票7回答
示例编译器

我正在寻找一个编译器的源代码,它能够从一个编程语言的输入程序中创建Win32程序(不管是哪种语言,也许越简单越好)。 但是我找不到适合我的东西,像GCC这样的大型编译器让我感到非常困惑,因为它们拥有很多功能,我不知道从哪里开始。 是否有开源的Win32微型编译器可以供我参考?

8得票1回答
实现常见子表达式消除

我正在研究实现公共子表达式消除(CSE),以处理对应于大型数学表达式的表达式图(数百万个节点)。 哪些算法适用于执行此操作?我在互联网上搜索了易于实现的算法,但未找到任何内容。如果可能,该算法应具有与完整表达式图中节点数量成线性关系的复杂度。