112得票14回答
令牌和词素有什么区别?

在Aho Ullman和Sethi的《编译器构造》中,它指出源程序的输入字符字符串被划分为具有逻辑含义的字符序列,称为标记(tokens),而词素(lexemes)是组成标记的序列,那么它们之间的基本区别是什么?

111得票9回答
LR、SLR 和 LALR 分析器有什么区别?

LR、SLR和LALR解析器之间的实际区别是什么?我知道SLR和LALR是LR解析器的类型,但就它们的解析表而言,它们的实际区别是什么? 如何展示一个文法是LR、SLR还是LALR呢?对于LL文法,我们只需展示解析表中任何单元格不应包含多个产生式规则。对于LALR、SLR和LR是否有类似的规...

110得票1回答
clang(和LLVM)与gcc / g ++之间的区别是什么?

gcc和g++是用于C和C++代码的传统GNU编译器。最近,使用LLVM的clang(和clang++)作为备选编译器越来越受欢迎。 clang和gcc/g++有什么区别?使用clang是否有优势?

107得票6回答
(A + B + C) ≠ (A + C + B)且编译器重新排序

将两个32位整数相加可能导致整数溢出:uint64_t u64_z = u32_x + u32_y; 如果将32位整数之一先转换或加到64位整数中,则可以避免此溢出。uint64_t u64_z = u32_x + u64_a + u32_y; 然而,如果编译器决定重新排列加法:uint64_...

107得票5回答
Eclipse:启用断言

我正在使用 Eclipse Galileo,如何在 Eclipse 中启用断言? 根据其他网站的建议,我尝试添加参数: -ea。我还尝试将编译器兼容性级别更改为1.4,但这些建议都没有起作用。

105得票4回答
gcc C编译器本身是用C语言编写的吗?

gcc C编译器本身是用C语言编写的吗?还是用汇编语言编写的?如果编译器是用C语言编写的,那么用来编译编译器代码的编译器是什么?

105得票13回答
为什么无法构建一个编译器来确定C++函数是否会改变特定变量的值?

我在一本书中读到这句话: 可以证明,无法构建一个编译器来实际确定C++函数是否会改变特定变量的值。 该段落谈论了为什么编译器在检查常量性时会保守。 为什么无法构建这样的编译器? 编译器总是可以检查变量是否被重新赋值、是否调用了非const函数以及是否作为非const参数传递...

104得票2回答
-march和-mtune有什么不同?

我试图查阅GCC手册,但仍然不太明白。 -march和-mtune有什么区别? 在什么情况下只使用-march,而在什么情况下需要同时使用两者?是否有可能只使用-mtune?

104得票11回答
引导仍然需要外部支持

我听说过“自举语言”的概念,即使用该语言编写其自身的编译器/解释器。我想知道如何实现这一点,搜索了一下,看到有人说只能通过以下两种方式之一实现: 使用其他语言编写初始编译器。 手动使用汇编语言编写初始编译器,这似乎是第一种情况的特例。 对我来说,这两种方法都不像真正的“自举”,因为它们...

102得票6回答
GCC和Clang解析器真的是手写的吗?

看起来GCC和LLVM-Clang正在使用手写递归下降解析器,而不是基于Bison-Flex的机器生成自下而上分析。 请问这里是否有人能够确认这一点?如果是这样的话,为什么主流编译器框架使用手写解析器呢? 更新:在这里有一个关于这个话题的有趣博客