问题标签 [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.

0 投票
2 回答
216 浏览

context-free-grammar - 将 CFG 转换为 IL

我从任意 IL 构建 CFG,并希望将该 CFG 转换回 IL。CFG中的顶点顺序当然不等于原始IL指令的顺序。

这很好,但会使一些事情过于复杂。想象:

这将导致这样的流程图: (Jump B) -> (Jump C) -> (Return) 这当然是一个简化的示例,但它显示了转换出 CFG 时的问题。

学术界有没有关于这个话题的信息?我认为自下而上遍历图表会非常优雅,但这在更复杂的情况下不起作用。

一个解决方案可能是自上而下搜索 CF 合并,但在这种情况下,我将无法正确处理循环。因此,获得此权利的唯一方法似乎是搜索可能的 CF 合并(如果发生)。如果没有,我们必须有一个循环,这意味着循环是首选的,并且随后会评估持续的路径。这听起来像是一个可以解决的问题,但它也非常昂贵,并且可能存在更优雅的问题解决方案。此外,在考虑“break”语句时,循环也可能导致 CF 合并。

0 投票
3 回答
5374 浏览

compiler-construction - 创建 LLVM 的原因是什么?

LLVM 和常规编译器有什么区别?
它是否更具动态性,因此可用于将通常非常动态的语言(即 Javascript)编译成静态二进制代码?创建一个背后的原则是什么?
我知道编译器的 Dragon Book,但是 LLVM 有这样的东西吗?

编辑:我发现了这个有趣的项目。

0 投票
2 回答
155 浏览

project-management - 如何管理编译器项目?

我是一名 CS 学生,今年我有一个编译器项目。

我想知道如何与我的三个合作伙伴一起管理我的项目。

我知道编译器有很多层次和过程,我想利用这些特性来管理我的项目。

感谢您为我提供的任何提示/指针/资源。

0 投票
6 回答
196 浏览

compiler-theory - 是否有可能有一个编译器来预测每个可能的“特定情况”运行时错误?

“特定情况”是指它使用一些可以访问的数据,例如您当前的数据库设置、某些操作系统的版本等。

想象一下,如果编译器会检查您当前在您的应用程序中使用的数据库并给您发出警告,说“您知道,您数据库中的当前数据将永远不会触发您刚刚编写的语句”或诸如“您知道,如果这变成了一个空值,你真的会被搞砸'......这可能需要一段时间,但如果它有一些东西可以通过(例如当前数据库),它可能需要检查一些东西而不仅仅是'每一种可能性”。

您认为这可行/有价值吗?这在任何地方都存在吗?

如果有一个量子编译器可以找出每一种可能性并自动提出异常处理等,那就太酷了。

0 投票
3 回答
1975 浏览

compiler-theory - 免费的词法分析器/扫描器源

我正在寻找任何语言的手写免费词法分析器/扫描器,甚至是用类似于 C/C++ 的语言编写的玩具语言。我是创建语言和编译器设计的初学者,我想玩弄源代码。

例如,在 flex 生成 lex 之前,此网站上有一个手写词法分析器:http ://en.wikipedia.org/wiki/Flex_lexical_analysisr

谢谢。

0 投票
5 回答
515 浏览

language-agnostic - 编程语言中需要哪些语言特性来制作编译器?

编程语言似乎经历了几个阶段。首先,有人想出了一种新语言,Foo Language。编译器/解释器是用另一种语言编写的,通常是 C 或其他一些低级语言。在某个时候,FooL 会成熟和成长,最终有人会在某个地方为 FooL 自己编写一个编译器和/或解释器。

我的问题是:语言功能的最小子集是什么,以便有人可以自己实现该语言?

0 投票
4 回答
212 浏览

optimization - 为一种向前看的语言和多个文件编写编译器?

在我的语言中,当定义出现在方法下方时,我可以在方法中使用类变量。它还可以调用我的方法等下面的方法。没有“标题”。以这个 C# 示例为例。

我应该如何编译它?我在想的是:

  • pass1:将所有内容转换为 AST
  • pass2:遍历所有类并构建定义类/变量/等的列表
  • pass3:检查代码并检查是否存在未定义变量、错误使用等错误并创建我的输出

但似乎要让它工作,我必须在做 pass3 之前为所有文件做 pass 1 和 2。在我发现语法错误之前感觉还有很多工作要做(除了可以在解析时完成的明显操作,例如忘记关闭大括号或写入 0xLETTERS 而不是十六进制值)。我的直觉说还有其他方法。

注意:我正在使用 bison/flex 来生成我的编译器。

0 投票
2 回答
2247 浏览

computer-science - 用有限状态自动机表示吃豆人

考虑一个类似于 pac-mac 的游戏,我们想用 FSA 图来表示它。我们有一个迷宫(桌子),里面有随机位置的浆果。目标是吃掉迷宫中的所有浆果。我们必须考虑的控制命令如下:
GOAHEAD、LEFT、RIGHT、CHECKBERRY(检查吃豆人前面是否有浆果)、EAT 和 OFF-MAZE。
我们需要最多 10 个阶段......并且请记住,我们不能连续有多个间隙。谢谢

编辑: 替代文字 http://img338.imageshack.us/img338/2479/graphp.jpg

好吧。我创建了图表,但找不到跨越间隙的方法。例如:在迷宫中,经过一排浆果后,突然前面出现了一个缺口,下一个浆果就在缺口的下方。所以我不确定我的图表会是什么样子,即使我向左或向右转 checkberry 命令也不会返回 TRUE 值。所以必须有一种方法让吃豆人在不吃东西的情况下移动到间隙广场,但它如何决定是移动到前面的那个还是其他的?

0 投票
5 回答
1573 浏览

java - 语法分析题

在学校里,我们被分配设计一种语言,然后去实现它,(我在实现它时玩得很开心=))。我的老师告诉我们使用 yacc/lex,但我决定使用 java + regex API,这是我设计的语言的外观:

好吧,正如你所看到的,它是一种非常基本的语言 =)。

我以为我可以以非常 OOP 的方式实现它,比如创建一个抽象类Sentence,然后有子类VariableAssignmentIfSentence等等,并且有一个Program只有一堆句子的类,对吗?eval然后在所有s 上调用一个抽象方法Sentence,所以我最初编译语言的方法只包括两个阶段:

  1. 识别每行的语法
  2. 为每一行创建对应的类

当然,如果任何阶段 Ii 出现问题,都可能引发错误。

我的问题是,我做错了吗?我应该像理论所说的那样遍历所有阶段(词汇、句法、语义)吗?我应该继续使用我幼稚的两阶段编译器吗?

0 投票
2 回答
709 浏览

parsing - LALR(2) 悬空其他

LALR(2) 是否能够自然地处理悬空的 else 情况(没有任何特殊规则,如 LALR(1))?

谢谢