compiler-construction相关内容

如何在bison和flex中使用缩进作为块分隔符

我想知道如何在bison+flex中将缩进实现为块分隔符。就像巨蟒一样。我正在编写自己的编程语言(主要是为了好玩,但我打算将其与游戏引擎一起使用),我会尝试想出一些特殊的东西,使样板程序最小化,开发速度最大化。 我已经用C编写了一个编译器(实际上是`langToy‘到Nasm的转换器),但失败了。由于某种原因,它只能处理整个源文件中的一个字符串(嗯,我已经醒了超过48小时-所以……你知道,大 ..
发布时间:2022-08-31 12:47:49 其他开发

AntlrWorks&;and;语言语法错误

处理一个游戏项目,该项目涉及一种脚本语言,我希望将其解释为可以直接执行的虚拟机代码。我已经将语法包括在下面。所有的词法分析器规则都正确地显示在语法图中,但是当我点击任何解析器规则的主体时,对于给定的解析器规则X,我得到“无法显示规则X”,因为没有找到起始状态。 我真的不确定为什么ANTLR会抱怨没有开始状态。语法应该明确地从代码行开始,它不会被任何其他解析器规则引用。此外,右上角的框为绿色, ..
发布时间:2022-08-12 16:40:31 其他开发

编译器(特别是rustc)真的可以简化三角求和以避免循环吗?多么?

在Blandy和Orendorff的Programming Rust的第322页上是这样的声明: ...Rust...认识到有一种更简单的方法将数字从1加到n:总和始终等于n * (n+1) / 2。 这当然是众所周知的等价物,但是编译器如何识别它呢?我猜它是在LLVM优化过程中进行的,但是LLVM是以某种方式从基本原理中推导出等价性,还是它只有一组可以简化为算术运算的“公共循环计算”? ..

Java VM是否跳过零乘法?

我想知道Java虚拟机是否避免了零乘。谢谢 推荐答案 根据Java Language Spec,“在执行操作本身的任何部分之前,运算符的每个操作数(条件运算符&;&;、||和?:除外)似乎都已完全求值。” 因此,即使编译器或运行时可以检测到一个因素为零,如果另一个因素可能有副作用,它仍然必须评估另一个因素。 ..
发布时间:2022-05-16 09:10:32 Java开发

Ll-1解析器:Follow-set真的有必要吗?

据我所知,如果输入流中有错误,跟随集会在第一个可能的时刻告诉我。对吗? 因为不然的话,我想知道你到底需要它做什么。考虑到您的解析器在堆栈的顶部有一个非终结点(在我们的类中,我们使用了一个堆栈作为LL解析器的抽象) 即 [TOP] X...[BOTTOM] 下一步将替换X,因为它位于堆栈的顶部。因此,解析器询问解析表对X使用什么派生。 + b 其中+和b都是终端。 ..

汇编代码生成是如何工作的?

我最近一直在研究编译器设计。我已经很好地掌握了解析阶段,但在理解代码生成如何工作时遇到了一些问题。 据我所知,代码生成阶段似乎有3个主要步骤: 指令选择(贪婪平铺) 指令调度 寄存器分配 现在,指令调度有点超出了我目前正在尝试做的事情,我认为通过更多的研究和原型设计,我可能会考虑用于寄存器分配的图着色算法。 难住我的是第一步,指令选择。根据我所读到的内容,目标机器语言中的每 ..
发布时间:2022-04-17 22:04:08 其他开发

循环展开与循环平铺

谁能告诉我这两种优化技术是相同还是不同? 另外,这是程序员还是编译器的责任? 推荐答案 这两种技术不同。请参阅Loop unrolling和Loop tiling的说明。 循环展开是为了消除循环开销。它(通常)仅对迭代次数较少且在编译时已知的相当小的循环有用。这主要是由编译器完成的。 在计算机速度较慢、编译器更原始的旧时代,程序员会手动展开循环,但现在程序员这样做将不 ..
发布时间:2022-04-06 10:51:40 C/C++开发

何时使用Babel.config.js和.babelrc

我正在学习巴别塔,我想了解如何配置巴别塔。我发现了两种配置babel的方法:通过创建babel.config.js和.babelrc文件。在什么情况下,我们应该优先选择一个配置文件? 推荐答案 来自文档 https://babeljs.io/docs/en/config-files#project-wide-configuration Babel有两种并行配置文件格式,可以一起使 ..
发布时间:2022-02-25 17:06:52 前端开发

PIC16 C 编译器

我正在为 PIC 16 系列寻找一个好的 C 编译器,在 Windows 上工作. 一些同事使用 bknudc,但有些人似乎不喜欢它.显然你不能有效地使用链接器,事实证明最好的方法是将所有代码设置在包含文件中. SDCC 看起来不错,但看起来仍处于测试阶段,而且不容易设置或必须处理. 还有很多其他的选择,根据自己的情况,都是最好的.我发现一些论坛讨论这个话题,似乎没有人同意彼此. ..
发布时间:2022-01-25 12:29:30 其他开发

编译器何时可以将调用静态绑定到虚函数?

如果类的类型在编译时已知(例如,如果没有通过引用或指针使用类实例,如案例 1) 下面). 但是,我观察到 Visual Studio 2010 的 C++ 编译器有一个奇怪的行为,我想知道编译器是否有任何理由在类的实例时不将调用静态绑定到“正确的"虚函数带有虚函数的是结构中的成员,通过引用访问. 我是否应该期望编译器在下面的情况 2) 中静态绑定对 f() 的调用?即使 a 是 A 而 ..

有 Java 的 Coffeescript 吗?换句话说,X 被编译成 Java

是否有一种语言可以编译为 Java 代码(不是字节代码,而是 Java .. 所以没有 Groovy、Scala、Jython、JRuby 等)? 换句话说,是否有适用于 Java 的 CoffeeScript? 我对 Java 的主要缺陷之一是它非常冗长而且它没有多重继承.似乎可以合理地通过代码生成来清理添加 mixins/traits 和闭包的语法. 是的,它并不优雅,但 c ..

如何使用 GCC 4.8 配置 libstdc++?

不久前,我决定升级到 GCC 4.8,以便尽早开始使用一些 c++11 功能.不过,我有点走神了,直到几天前的一个项目才真正使用任何新功能(新编译器似乎工作正常,但这可能只是因为我没有使用任何新功能.) 在这个新项目中,当我使用 =std=c++11 标志编译时,我没有遇到任何问题.但是,在运行时,我收到错误: ./main:/usr/lib/i386-linux-gnu/libstd ..
发布时间:2022-01-23 21:13:25 C/C++开发

G ++未定义对类::函数的引用

我终于绝望了.因此,在我的 c++ 课程中,我们被指示使用类.我们会让头文件声明类和函数,而单独的 .cpp 文件实现它.事情应该是有效的,但他们没有,而且网络上没有任何解决方案似乎对我有用.为此,我在 linux 上使用 G++ 编译器,它似乎不适用于 IDE 或普通命令行. 我在 TBook.h 中遇到的错误是: /usr/lib/gcc/x86_64-linux-gnu/4.6/.. ..
发布时间:2022-01-23 21:08:25 服务器开发

“g++"和“c++"编译器

我刚刚在我的 Ubuntu 上发现,有两种不同的 C++ 编译器:/usr/bin/g++ 和 /usr/bin/c++.我对后者不熟悉,但 man c++ 只是跳转到 gcc 的手册页.我想知道它们作为 C++ 编译器有什么区别? 解决方案 这是典型的 Ubuntu 符号链接混乱. 如果你ls -l/usr/bin/c++,你会发现它实际上是一个符号链接.到: /etc/alte ..
发布时间:2022-01-23 21:01:10 C/C++开发

扩展 Mono C# 编译器:是否有任何文档或先例?

我目前参与了一些有趣的编程语言研究,到目前为止,该研究的重点是扩展即将推出的 Java 7.0 编译器,并提供一些非常强大的基于程序员生产力的功能.这项工作应该同样适用于相关的编程语言,例如 C#. 我目前正在确定用于对功能的 C# 端口进行原型设计的选项.我更喜欢开源选项,以便可以与最广泛的受众分享这项工作的成果.因此,Mono C# 编译器似乎是最明显的起点.我是一位经验丰富的 C# 开 ..
发布时间:2022-01-23 15:29:09 C#/.NET

相同类型的对象的 InvalidCastException - 自定义控件加载

我有一个非常连线的错误,我的一个自定义控件似乎是创建两个编译文件,当我尝试使用 LoadControl() 动态加载它时失败,因为无法转换一个对另一个 - 即使它们完全相同.我写消息看看,都是一样的,只是改了编译好的dll. System.Web.HttpUnhandledException (0x80004005):引发了“System.Web.HttpUnhandledException"类 ..