0.1.0 |
|
---|
#7 在 #解析器实现
110KB
3K SLoC
Lynx-Lang
🐱 Lynx-Lang
是一个学习编程语言制作的科普项目。
先决条件
确保已预安装 rustup。
构建
cargo build --release
测试
cargo test
覆盖率测试
sh coverage.sh
在浏览器中检查 coverage/index.html
lib.rs
:
Lynx 是从著名的 The Monkey Language
和书籍衍生的 lynx 语言规范的解释器。这是一个旨在学习如何制作编程语言的教育包。它也是像我这样的新手 rustaceans 制作的项目。这个库中的代码包含大量注释以及测试用例。整个想法来自著名的书籍 The Monkey Language
。当我再次有时间时,我还想扩展它。
一般来说,解释器由三个主要部分组成,分别位于 src
文件夹中的单独文件。
分词器将输入文本或流分词为标记。
有时,一个简单的数字可以是一个 Number
标记;
1 // Token::Number
词法分析器
std::iter::FromIterator;
std::iter::Peekable;
std::str::CharIndices;
解析器
- pratt 解析
std::slice::Chunks
std::ops::Deref;
评估器
// let foo1 = 2;
// outer = Env {
// store: {
// print: fn (),
// foo1: 2
// },
// outer: None
// }
// fn call_fn(foo) {
// let bar = 1;
// return foo + bar;
// }
// call_fn(foo1)
// ScopedEnv {
// store: {
// bar: 1
// },
// outer: outer
// }