Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/qinyuhang/my-rust-interpreter
使用rust实现的解释器。参考《用Go语言自制解释器》
https://github.com/qinyuhang/my-rust-interpreter
Last synced: 9 days ago
JSON representation
使用rust实现的解释器。参考《用Go语言自制解释器》
- Host: GitHub
- URL: https://github.com/qinyuhang/my-rust-interpreter
- Owner: qinyuhang
- Created: 2023-01-29T02:59:56.000Z (almost 2 years ago)
- Default Branch: master
- Last Pushed: 2024-02-10T13:39:20.000Z (9 months ago)
- Last Synced: 2024-08-01T13:16:59.574Z (3 months ago)
- Language: Rust
- Size: 370 KB
- Stars: 6
- Watchers: 2
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: readme.md
Awesome Lists containing this project
README
# My Rust Interpreter
参考《用Go语言自制解释器》,使用 rust 编写的解释器
# 一些感悟
1. Lexer 主要就是关注如何切分代码的字符串。里面就会涉及到判断什么是表达式(expression),什么是语句(statement);
也还有如何把一个字符串切成token。比如现在本语言只支持int这种数值类型,其表达式就是类似于 `5`, `10`,但是别的
变成语言,比如 rust 中,有效的数值字面量可以是 `1u8`, `1_u8`, `1_000_u64`, `1_000u64`, `5f32`, `5.0f32`
等等整数或者浮点数类型。新增一种类型就需要再tokenize,parse,eval的地方都各自增加这种类型。
2. Parser 则是对于如何把切分完成的token做组装的主要代码。语法树也是在这一步构建。
3. Evaluator 是最终把语法树遍历执行的。这本书的第二部分叫做《用Go语言自制编译器》,~~设计到了把源码编译成为机器二进制的部分。我推测这里可能会使用一个业界已经有的
语言后端。主要的工作应该是生成中间产物交给后端(比如llvm)~~ 是要实现一个虚拟机。# Status
[![CI](https://github.com/qinyuhang/my-rust-interpreter/actions/workflows/ci.yaml/badge.svg?branch=master)](https://github.com/qinyuhang/my-rust-interpreter/actions/workflows/ci.yaml)