2个版本

0.1.1 2022年5月22日
0.1.0 2022年5月21日

#381 in #ethereum

21 个月下载量
yulc中使用

MIT许可证

53KB
1K SLoC

Rust 854 SLoC // 0.0% comments Python 177 SLoC // 0.3% comments

Yul语言工具

crates.io docs.rs MIT License dependency status codecov CI

解析

解析器使用Logos进行标记化和使用Rowan进行解析。标记(即词法分析器)定义在[token.rs][./src/tokens.rs],语法(即语法)定义在[syntax.rs][./src/syntax.rs]。

该架构基于rust-analyzer的架构。实际上,rowan是rust-analyzer项目的一部分。我建议阅读他们的总结来理解rowan。另一个很好的介绍是Luna Razzaghipour的这个教程

具体来说,该架构是为无损解析和良好的错误恢复而设计的。这意味着即使有错误,也可以从解析树完美地重建原始源文件。注释、空白和解析错误都明确包含在解析树中。

构建和测试

格式化、检查、构建和测试一切(我建议为此创建shell别名)

cargo fmt &&\
cargo clippy --all-features --all-targets &&\
cargo test --workspace --all-features --doc -- --nocapture &&\
cargo test --workspace --all-features --all-targets -- --nocapture &&\
cargo doc --workspace --all-features --no-deps

使用提供的.cargo/config.toml别名运行基准测试

cargo criterion

检查文档覆盖率

RUSTDOCFLAGS="-Z unstable-options --show-coverage"  cargo doc --workspace --all-features --no-deps

待办事项

目标

  • Yul到EVM编译器
  • Yul优化器
  • Yul语言服务器

也许

  • EVM到yul编译器
  • Yul LLVM编译器
  • 静态分析工具,如SMT检查器
  • solc前端链接以实现Solidity兼容性。

lines of code GitHub contributors GitHub issues GitHub pull requests GitHub Repo stars crates.io

依赖关系

~4MB
~47K SLoC