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

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

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

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

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

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

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

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

10得票2回答
帮助理解LR(1)解析器,表格生成?还有其他资源吗?

我正在修读编译器课程,但是很难理解使用动作/转移表的LR(1)分析算法,以及如何手动生成这些表。目前我们使用Cooper和Torczon的《工程编译器》作为教科书,并且我也阅读了维基百科上关于生成表的页面,但是我仍然不理解这些概念。如果可能的话,是否有人可以推荐任何其他解释解析的好书或在线资源...

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

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

11得票7回答
解析“偏向”(基于缩进)的语言

一种离线语言是指在该语言中,声明的范围(块)由缩进表示。 ...例如Python、Boo、Nemerle、YAML等语言。 那么我的问题是:我应该如何解析这些语言?如何解决制表符与空格的问题(两个制表符或8个空格是否等效)?解析器生成器是否有助于此,还是我必须手动编写词法分析器/语法分...

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

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

10得票2回答
正式构建控制流图

我正在为大学项目编写编译器,并希望将我的抽象语法树转换为控制流图(CFG)。 我认为CFG中的节点(V)应该是AST中的节点。我知道如何算法地构造边集(G=(V,E)),但我很难更正式地编写这个过程。 我已经创建了这个Scala风格的模式匹配(伪代码): def edges(n:Node...

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

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