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

这篇具有很好参考价值的文章主要介绍了【Rust日报】用Rust从头实现一个C编译器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

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

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

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

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

fn operate(left: f64, op: char, right: f64) -> f64 {
    match op {
        '+' => left + right,
        '-' => left - right,
        '/' => left / right,
        '*' => left * right,
        _ => unreachable!(),
    }
}

parser! {
    sep = #{char::is_ascii_whitespace}*;
    num: num=<"-"? '0'-'9'+ ("." '0'-'9'+)?> -> f64 { num.parse().unwrap() }
    term = (num | "(" sep expr sep ")") -> f64;
    add: first=mul sep ops=(["+-"] sep mul)* -> f64 { ops.into_iter().fold(first, |left, (op, right)| operate(left, op, right)) }
    mul: first=term sep ops=(["*/"] sep term)* -> f64 { ops.into_iter().fold(first, |left, (op, right)| operate(left, op, right)) }
    pub expr = add -> f64;
}

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

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

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

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

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

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

#[derive(Debug, Exhaustive)]
enum Test1 { A, B, }
#[derive(Debug, Exhaustive)]
struct Test2 { a: bool }

#[exhaustive_test]
fn test(v: Test1, w: Test2) {
    println!("{v:?} {w:?}");
}

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


From 日报小组 [倪]

社区学习交流平台订阅:

  • Rust.cc论坛: 支持rss

  • 微信公众号:Rust语言学习交流文章来源地址https://www.toymoban.com/news/detail-855638.html

到了这里,关于【Rust日报】用Rust从头实现一个C编译器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一个关于编译器优化选项问题的解决

    因为当前项目单片机容量不够使用,打算开启编译器优化,结果在使用KEIL编译器优化后,程序在发送Modbus数据时,程序直接跑飞了 最后发现是 局部变量指针 作为了DMA的内存地址参数,导致当DMA连续搬运数据时,实际那个局部变量已经被释放,导致DMA搬运数据的过程中出现错

    2024年04月09日
    浏览(55)
  • 鸿蒙篇——初次使用鸿蒙原生编译器DevEcoStudio创建一个鸿蒙原生应用遇到的坑--汇总(持续更新)

    背景:2023年12月13日,使用DevEcoStudio 4.0.0.600版本,项目的compileSdkVersion是8。 一.提示类似于ohpm ERROR: NOTFOUND package \\\"@ohos/hypium\\\" not found from all the registries或者npm ERR! 404 \\\'@ohos/hvigor@3.0.9\\\' is not in this registry.的错误。 1.这里存在的第一个问题,无论怎么按照官方文档设置ohpm 和 npm的仓

    2024年01月21日
    浏览(47)
  • 【Rust日报】2023-06-06 motus 一个非常方便的命令行密码生成工具

    motus 一个非常简单的命令行密码生成工具 Motus是一个命令行应用,帮你轻松生成安全密码。 它的用户界面非常简单、优雅,跟 1Password 的密码生成器一样,让你感觉很舒服。Motus 默认会把生成的密码复制到你的剪贴板,用起来非常方便。 ReadMore: https://github.com/oleiade/motus Loo

    2024年02月08日
    浏览(76)
  • 【Rust日报】2023-03-14 Rust实现的纯 CPU 运算的 LLaMA 模型

    Rust实现的纯 CPU 运算的 LLaMA 模型 我试图让 LLaMA 语言模型在纯 CPU实现上工作,灵感来自于这里的一个很棒的CPU实现:https://github.com/ggerganov/ggml,它可以运行GPT-J 6B模型。 在我的蹩脚的 OpenCL 的代码下,我的GTX 3090上可以实现每个 Token 耗时 270毫秒。在Ryzen 3950X上使用纯 CPU 和

    2024年02月09日
    浏览(63)
  • C++面试八股文:std::array如何实现编译器排序?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第25面: 面试官: array 熟悉吗? 二师兄:你说的是原生数组还是 std::array ? 面试官:你觉得两者有什么区别? 二师兄:区别不是很大,原生数组(非动态数组)和std::array都在栈上开辟空间,初始化的时候需要提供数组长度,且

    2024年02月10日
    浏览(49)
  • 自己动手写编译器:使用 PDA 实现增强和属性语法的解析

    在前面章节中我们了解了增强语法和属性语法,特别是看到了这两种语法的结合体,本节我们看看如何使用前面我们说过的自顶向下自动机来实现这两种语法结合体的解析,这里使用的方法也是成熟编译器常用的一种语法解析算法。 首先我们先给出上一节给出的混合语法:

    2024年02月20日
    浏览(45)
  • Unity Image(RawImage) 实现按轴心放大缩小,序列化存储轴心信息,实现编译器窗口保存轴心

    工作时分配给我的要实现的功能,写的时候遇到挺多的坑的,在此记录一下 放大缩小的效果 2.编译器扩展窗口记录 1.打开WSC/保存图片轴心工具,在Image位置挂在需要保存轴心的图像,输出name作为key,并在Scene窗口中直接拖动轴心确定位置(不建议在Inspector中手动输入轴心修改

    2024年02月14日
    浏览(49)
  • C++输出编译器名称和版本以及编译器位数、C/C++常见编译器

    常见的C/C++编译器主要包括以下几种: GCC (GNU Compiler Collection):GCC是一个广泛使用的编译器套件,支持多种编程语言,包括C、C++、Objective-C等。它具有强大的优化能力和跨平台支持,并且被广泛应用于各种操作系统和开发环境。 Clang :Clang是基于LLVM的编译器前端,支持C、

    2024年02月13日
    浏览(46)
  • c语言实现https客户端 源码+详细注释(OpenSSL下载,visual studio编译器环境配置)

    请参考:openssl下载安装教程 步骤:官网下载-安装到选定目录-配置环境变量-打开命令窗口检查是否安装成功 注意: 打开命令窗口(快捷键 win + r ,在弹出窗口内输入cmd按回车),输入命令openssl version如果显示openssl版本则表示安装成功。 我出现的问题:明明安装上了却显示

    2024年04月16日
    浏览(52)
  • Linux C++性能优化秘籍:从编译器到代码,探究高性能C++程序的实现之道

    随着大数据、人工智能等技术的飞速发展,程序性能优化的重要性愈发突出。优化性能可以降低资源消耗、提高系统响应速度,从而在有限的硬件资源下,实现更高的吞吐量和处理能力。此外,性能优化也有助于降低能耗、减少散热问题,延长硬件使用寿命。 Linux操作系统具

    2023年04月09日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包