21得票1回答
Lambda表达式如何转换为Java字节码

我正在尝试在Java中使用lambda表达式创建一个示例,并且我正在使用官方的JDK8。我的示例已经成功运行。但是当我尝试检查编译器如何将lambda表达式转换为字节码时,这让我感到有些困惑。以下是我的示例代码:public class LambdaTest { public Inte...

19得票6回答
C++是否可以避免使用pimpl技巧?

据我所知,pimpl模式的存在仅仅是因为C++强制要求你将所有私有类成员放在头文件中。如果头文件只包含公共接口,理论上,类实现的任何更改都不会导致整个程序需要重新编译。 我想知道的是,为什么C++没有设计允许这样的便利。为什么它要求类的私有部分完全显示在头文件中(无意冒犯)?

18得票3回答
LLVM的创建原因是什么?

LLVM与常规编译器之间的差异是什么? 它是否更加动态,因此可以将通常非常动态的语言(例如Javascript)编译为静态二进制代码? 创建LLVM的原则是什么? 我知道编译器的“龙书”,但是否有类似用于LLVM的东西? 编辑: 我发现了这个有趣的项目:http://emscripten.org/

17得票2回答
SLR(1)解析器和epsilon的涉及

假设我有以下语法:S → X X → a | ϵ 如果语法中没有涉及ϵ,我会像这样构建第一个状态:S' → .S S → .X X → .a 但是关于符号 ϵ 呢?我应该包含它吗:X → .ϵ 也就是说...在创建下一个状态时,我应该执行GOTO(Io,ϵ),其中Io是第一个状态吗?

16得票4回答
递归计算支配树的高效方法?

我正在使用Lengauer和Tarjan算法结合路径压缩,计算包含数百万个节点的图的支配树。该算法相当复杂,我必须承认我没有花时间完全理解它,我只是在使用它。现在我需要计算根节点的直接子节点的支配树,并可能向下递归到一定深度重复此操作。也就是说,当我为根节点的一个子节点计算支配树时,我想假装已...

14得票4回答
什么是词法错误的例子?一个语言是否可能没有词法错误?

我们的编译原理课要求我们为自己设计的编程语言创建一个简单的解释器。我正在使用JFlex和CUP作为我的生成器,但是我不太清楚什么是词法错误。此外,您是否建议我使用JFlex的状态特性?因为感觉这个工具更适合解析器处理。您还推荐使用其他工具来创建编程语言吗?非常抱歉如果我有些着急,因为它要在星期...

14得票2回答
有没有一些“有趣”的方式来学习语言、语法、解析和编译器?

我正在为语言、语法、解析和编译器的考试做准备。这不是我的强项,我发现大多数资源都使用数学语言来定义行业术语并解释我需要了解的不同概念,而不是使用我非常喜欢的英语或法语。因此,我在找到继续学习的动力和理解理论方面遇到了一些困难。 所以我的问题是:你们中有谁知道我可以找到“有趣”的学习方式吗?或...

13得票1回答
如何构建LL(k>1)的解析表?

在网络上,有很多例子展示如何从LL(1)分析器的first/follow集构造上下文无关文法的解析表。 但是我没有找到与k>1情况有关的有用信息。即使维基百科也没有相关信息。 我预计它在某种程度上类似,但指向这个领域现有研究的提示将非常有帮助。

13得票9回答
编译器是否决定何时内联我的函数(在C ++中)?

我知道你可以使用inline关键字,或者像短构造函数(short ctor)或getter方法一样将方法放在类声明中,但编译器是否会最终决定何时内联我的方法? 例如:inline void Foo::vLongBar() { //several function calls and l...

13得票5回答
ANTLR中消除左递归

正如在 Removing left recursion 中所解释的那样,有两种方法可以消除左递归。 使用某些过程修改原始语法以消除左递归 最初编写语法时不要有左递归 人们通常用什么来消除(没有)ANTLR中的左递归?我已经使用了flex / bison进行解析器,但我需要使用ANTLR...