191得票13回答
为什么编译器无法完全解决死代码检测问题?

我一直在使用C或Java编译器进行开发,它们具有死代码检测(当一行代码永远不会被执行时会发出警告)。然而,我的教授表示,这个问题永远无法完全由编译器解决。我想知道为什么会这样。尽管我对编译器的实际编码并不太熟悉,因为这是一门基于理论的课程。但我想知道编译器检查什么(例如可能的输入字符串与可接受...

127得票8回答
解析树和抽象语法树(AST)有什么区别?

它们是编译过程的不同阶段生成的吗?还是只是指称同一件事情的不同名称?

89得票9回答
哪些编程语言是无上下文的?

或者更准确地说:哪些编程语言是由上下文无关文法定义的? 据我所知,C++不是上下文无关的,因为它包含诸如宏和模板等内容。我的直觉告诉我,函数式语言可能是上下文无关的,但我没有任何硬数据来支持这一点。 对于简洁的示例给予额外的奖励 :-)

44得票9回答
我应该什么时候学习编译器?

根据这篇文章,我肯定应该学习编译器。 引用温和而坚定的执行摘要:如果你不知道编译器是如何工作的,那么你就不知道计算机是如何工作的。如果你不确定自己是否100%掌握了编译器的工作方式,那么你就不知道它们的工作方式。 我认为这是一篇非常有趣的文章,应用领域非常实用(请自行阅读),但我也...

37得票2回答
寄存器分配和溢出,有简单的方法吗?

我正在寻找一种将本地变量分配到寄存器的方法。我知道有几种严谨的方法可以做到这一点(即在维基百科上提到的),但我卡在了如何实现"spilling"上。此外,相关文献非常令人生畏。我希望有一些更简单的东西能够满足我的优先考虑: 正确性 - 无论有多少本地变量,都能生成正确的代码的算法。 简单性...

31得票4回答
LL(0)解析器是否存在?

我在某个地方看到一个问题,询问LL(0)和LR(0)解析器之间的区别。是否存在LL(0)解析器?如果有,它们如何在不查看任何标记的情况下进行解析? 我在某处看到有人提出了关于LL(0)和LR(0)解析器差异的问题。是否存在LL(0)解析器?如果存在,它们是如何在不查看任何标记的情况下进行...

28得票5回答
C编译器如何实现返回大型结构体的函数?

一个函数的返回值通常会被存储在堆栈或寄存器中,但如果是一个大的结构体,则必须存储在堆栈上。对于这段代码,在真正的编译器中需要进行多少复制操作?或者说它会被优化掉吗? 例如:struct Data { unsigned values[256]; }; Data createData(...

27得票3回答
从正则表达式创建NFA的步骤

当我从正则表达式创建NFA时,我在“描述每个步骤”方面遇到了问题。问题如下: 将以下正则表达式转换为非确定有限状态自动机(NFA),清楚地描述您使用的算法的步骤: (b|a)*b(a|b) 我已经制作了一个简单的三状态机,但这很大程度上是基于直觉。 这是我的讲师过去考试的问题,他还写了有关...

26得票3回答
Scala中的"<-"用于推导表达式。

我发现Scala总是有一个“自然的解释”来解释任何事情。总是像“哦,但那只是在这个对象上调用一个函数,并且使用这个和那个参数”。从某种意义上说,没有什么是真正的编译器魔法,就像我们从其他语言中知道的那样。 我的问题是关于以下代码中使用的for(i &lt;- 0 to 10) println...

25得票5回答
有没有一种将C++编译为C代码的方法?

我有一个程序,用户使用C ++类进行配置,并且应该使用相同的类来配置只能使用C99子集(Open CL语言)的程序。 所以我的问题是: 是否有一种将C ++编译为C代码的方法? 开源的解决方案最好!