6 个版本
0.0.6 | 2023 年 9 月 9 日 |
---|---|
0.0.5 | 2023 年 9 月 9 日 |
#2365 在 解析器实现
600KB
439 行
简介
rinha 的理想是创建一个可以在拥有 2 个核心和 2G RAM 的机器上运行的解释器或编译器。
您的解释器或编译器应使用称为 "抽象语法树" 的内容进行工作,该内容以 JSON 格式存储。这个抽象语法树将使用本存储库中可用的特定工具由我们生成。
您在这个任务中的责任是接收包含抽象语法树的 JSON,然后根据抽象语法树中提供的信息解释或编译程序。
简单来说
- 我们给您一个包含树的 JSON
- 您运行 JSON
- 您很高兴看到结果出现。
执行方式
之后将会添加执行方式
如何测试
要测试,您可以使用文件 files/fib.rinha
并使用我们提供的程序生成 JSON,或者您可以直接使用 files/fib.json
中的 JSON。
在竞赛过程中,我们会添加其他测试 :)
要求
您需要提交一个 PR,更改 PARTICIPANTS.md 文件,并添加一行新内容以及您的存储库。也许之后会有所改变(请注意)。
您的存储库需要在根目录下有一个图像,我们将构建排名时的图像。
规范
语言必须在以下文件上运行,即 rinha 指定的 AST JSON 文件 在此。
- 文件必须从
/var/rinha/source.rinha.json
读取 - 如果您想手动读取 AST,也可以从
/var/rinha/source.rinha
读取
该语言是一种动态编程语言,如 JavaScript、Ruby 等。
编译器竞赛项目有一个 "JSON 解释器",它返回 AST,代码需要以不同的方式测试,例如除了斐波那契数列以外的其他算法。
示例
斐波那契数列示例
let fib = fn (n) => {
if (n < 2) {
n
} else {
fib(n - 1) + fib(n - 2)
}
};
print("fib: " + fib(10))
竞赛
提交 PR 的截止日期是 9 月 23 日,之后将拒绝项目。
9 月 25 日之前将允许进行调整,您可以在测试发布后修复您的实现。
资源
以下是一些学习如何创建自己的解释器或编译器的有用资源
- https://www.youtube.com/watch?v=t77ThZNCJGY
- https://www.youtube.com/watch?v=LCslqgM48D4
- https://ruslanspivak.com/lsbasi-part1/
- https://www.youtube.com/playlist?list=PLjcmNukBom6--0we1zrpoUE2GuRD-Me6W
- https://www.plai.org/
请注意,一些有用的视频和帖子将很快发布。
依赖项
~11-24MB
~333K SLoC