• 【Rust日报】用Rust从头实现一个C编译器


    一个声明式解析库 Untwine 发布0.4

    Untwine是一个声明性解析库,它允许一种类似于使用自定义宏语法进行直接模式匹配的解析风格。这允许创建具有良好性能特征和高质量错误消息的极其紧凑的解析器。这些解析器实现起来很简单,有几个精心挑选的例子:

    • 一个几乎完整的JSON解析器,包含12行解析逻辑

    • 支持除特殊转义序列之外的所有基本JSON功能(除“)

    • 一个在6行解析逻辑中具有四运算表达式解析器的pmdas

    • 一个辅助函数对两个数字进行运算

    使用untwine制作的解析器也有高质量的错误消息,可以直观地显示错误和相关语法。

    1. fn operate(left: f64, op: char, right: f64) -> f64 {
    2.     match op {
    3.         '+' => left + right,
    4.         '-' => left - right,
    5.         '/' => left / right,
    6.         '*' => left * right,
    7.         _ => unreachable!(),
    8.     }
    9. }
    10. parser! {
    11.     sep = #{char::is_ascii_whitespace}*;
    12.     num: num=<"-"'0'-'9'+ ("." '0'-'9'+)?> -> f64 { num.parse().unwrap() }
    13.     term = (num | "(" sep expr sep ")") -> f64;
    14.     add: first=mul sep ops=(["+-"] sep mul)* -> f64 { ops.into_iter().fold(first, |left, (op, right)| operate(left, op, right)) }
    15.     mul: first=term sep ops=(["*/"] sep term)* -> f64 { ops.into_iter().fold(first, |left, (op, right)| operate(left, op, right)) }
    16.     pub expr = add -> f64;
    17. }

    更多信息查看 GitHub,https://github.com/boxbeam/untwine

    用Rust从头实现一个C编译器

    一个针对 MacOs 和 Linux 的 x86-64 的 C99 编译器,它没有任何依赖项,并且是独立的,因此可以通过单个命令进行安装(请参阅安装)。

    更多信息查看 GitHub,https://github.com/PhilippRados/wrecc

    Exhaustive 实现一个类型的所有值的测试

    这个crate提供了一个特性来生成一个类型的所有值(达到一定深度)。它还提供了一个派生宏,将为您派生此特性。最后,它提供了一个测试宏,用于对某个类型的所有值运行基于属性的测试。

    1. #[derive(Debug, Exhaustive)]
    2. enum Test1 { A, B, }
    3. #[derive(Debug, Exhaustive)]
    4. struct Test2 { a: bool }
    5. #[exhaustive_test]
    6. fn test(v: Test1, w: Test2) {
    7.     println!("{v:?} {w:?}");
    8. }

    更多信息查看 GitHub,https://github.com/JonathanBrouwer/exhaustive


    From 日报小组 [倪]

    社区学习交流平台订阅:

    • Rust.cc论坛: 支持rss

    • 微信公众号:Rust语言学习交流

  • 相关阅读:
    Redis分布式锁实现
    C++的智能指针 && RAII
    1.4_2 Axure RP 9 for mac 高保真原型图 - 案例1 【基础】模仿微信页面
    七大基于比较的排序算法(JAVA)
    前端技术栈学习:Vue2、Vue cli脚手架、ElementUI组件库、Axios
    java计算机毕业设计个人网站设计源程序+mysql+系统+lw文档+远程调试
    spring mvc中如何集成logback呢?
    常见DDoS攻击
    1.2.1 创建型设计模式
    LR学习笔记——图片管理分类
  • 原文地址:https://blog.csdn.net/u012067469/article/details/137577813