问题标签 [compiler-theory]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
parsing - 有没有像 LL(0) 解析器这样的东西?
我在某处看到一个问题,询问 LL(0) 和 LR(0) 解析器之间的区别。有没有像 LL(0) 解析器这样的东西?如果是这样,他们如何在不查看任何令牌的情况下进行解析?
c++ - 显示有效的 LR(0) 项
我必须创建一个 C++ 程序来显示编译器设计中 SLR 解析中的有效 LR(0) 项。到目前为止,我能够将语法作为用户的输入并找到它的闭包。但我无法在 SLR 中进一步实现 goto。谁能给我提供有关如何显示语法的有效 LR(0) 项的链接或代码。
-提前致谢
compiler-construction - 决定一个不正确的程序是否可以有一个正确的继续
(以下问题与 OCaml 语言有关,并在 OCaml 中有示例,但这个问题非常笼统,可能任何其他计算机语言的正确答案也可以解决我的问题。所以,只要用你最喜欢的语言假设这个问题。)
我想编写一个函数,它将 OCaml 中的任意程序作为字符串并确定程序是正确还是不正确,在后一种情况下,我是否可以通过在末尾连接适当的字符来使其成为正确的.
我假设某处有该语言的编译器,并且我可以应用它并得到回复说“编译”或“不编译 - 第 X 行错误,字符 Y”(大多数情况下无论如何语言)。总之,我想要一个函数,它接受一个程序并返回:
- 正确——如果字符串包含正确的程序;
- 错误——如果字符串包含不正确的程序,无论你如何将字符连接到它,都永远不会正确;
- 不完整——如果字符串包含一个不错误的不正确的程序。
例如,OCaml 程序let x = f
是不正确的,因为f
它在使用时尚未定义。而且它不能继续,因为你在 f 之后写的任何东西都将永远是一些以前没有定义过的标识符。程序let x =
也不正确;但是如果我们扩展到let x = 5
then 我们有一个完全有效的程序。所以,我的函数应该在第一种情况下返回错误,在第二种情况下返回不完整。
如果我们有这个程序,事情可能会变得棘手
因为我的功能必须看到,如果我继续程序,ns
那么程序就会变得正确。
我的问题是:您认为可以编写这样的函数/算法吗?如果是这样,一般的想法是什么?如果不是,试着说服我它不是。
(我会对任何见解或部分答案感到满意,例如暗示不完整的东西。例如,我相信如果语言编译器说第 3 行有错误并且程序有 100 行,那么就不可能继续的程序。)
garbage-collection - 为什么这个 GC 系统不好?
我想到了一个我看不到重大缺陷的 GC,我想知道为什么它没有更普遍地使用,或者为什么我没有听说过它的使用。
该系统是:
- 所有对象都附有一个 4 字节的无符号整数计数器。(可能是 2 个字节,我不知道。
- 每当构造一个对象时,它的计数器从 1 开始。
- 当一个对象作为参数发送到函数时,它的计数器会增加。
- 当一个对象到达不再在函数中使用的点时(可能是范围的最后),它的计数器会递减。
- 当对象的计数器达到零时,它将被删除,因为在代码中没有任何位置引用它。
是否存在计数器出现故障的边缘情况?有什么缺点,优点是什么?
预先感谢您的协助。
compiler-theory - 编译器如何构建语法树?
编译器在什么时候构建语法树?它是如何在构建可执行文件时形成树并翻译树的?
c++ - C++ 变量内存分配
这些主要是编译器设计问题。当您的编译器编译它时,例如:
int * pData = new int[256];
内存是如何动态分配的?编译器是调用为您分配内存的 OS 例程还是为您分配内存的已编译函数?
另外,当你写这样的东西时:
由于内存不是在运行时分配的,我假设数据在程序的数据段中占用了一些空间。由于编译器无法真正确定int y;
分支是否会在运行时执行,那么是否为变量保留了内存int y;
呢?如果无论如何都保留它,内存分配可能会或可能不会执行的块中的任何变量不是更节省内存吗?
哦谢谢
computer-science - 程序的控制流程图
我现在正在学习一个编译器类,我们正处于必须构建一个 CFG 以实现优化的地步。我不知道的一件事是一个程序有多少个 CFG?我见过的每个示例似乎都是一个简单代码段的 CGF。因此,如果您有一个具有三个功能的程序。您是否为每个功能有一个单独的 CFG,或者整个程序是否有一个大的 CFG?
garbage-collection - 面向对象语言的堆对象表示
作为我硕士论文的一部分,我正在为我家乡大学开发的面向对象语言编写一个编译器。当前编译器输出在虚拟机上运行的汇编程序。虚拟机处理所有事情,如堆栈操作、对象生成、堆管理和垃圾收集。
我的编译器的目标架构是类似 MIPS 的 CPU。
我正在寻找开发对象布局的策略以及在运行时实现和触发垃圾收集的想法。我当然可以分析 GCC 如何使用 C++ 实现这一点,但我更愿意指出一些好的出版物/资源。
objective-c - 创建编程语言问题
我正在考虑创建一种基于 C 的自定义(小型)编程语言(语法)。我不明白苹果如何使用 [testClass runThis:true] 等运算符实现objective-c;使用该语法。
我将如何为我的自定义 c 语言实现自定义语法
programming-languages - 哪些编程语言具有常规语法?
我很好奇哪些(如果有的话)现实世界的编程语言具有规则的语法(即所有语法正确的程序集都是规则的)。
另请参阅此问题:哪些编程语言是上下文无关的?.