从零编写一个解析器(1)—— 解析数字

本文介绍了如何使用Rust中的nom库从零开始编写一个解析器,首先从解析括号中的数字开始。通过组合基础解析器和使用delimited组合子,成功实现了将括号中的数字解析为u32类型。文章提供了详细的步骤和单元测试来验证解析器的正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 文章名称:从零编写一个解析器(1)—— 解析数字
  • 参考地址:https://github.com/Geal/nom/blob/master/doc/making_a_new_parser_from_scratch.md
  • 文章来自:https://github.com/suhanyujie/my-parser-rs
  • 文章作者:suhanyujie
  • Tips:文章如果有任何错误之处,还请指正,谢谢~
  • 标签:Rust,parser

长久以来,由于我在工作中使用 go 语言,所以时常会遇到需要将 sql 转换为 struct 的需求,虽然在网上能够找到一些将 sql、json 等转换为 struct 的工具,但大都无法配置,要么只支持将 json 转 struct,要么转换后 tag 的风格不符合我所需要的。
基于这种情况,我一直想自己写一套可自定义的转换工具,要想能灵活的转换,先需要对源码字符串(sql 或者 json)进行解析,因此,我们从这里开始,逐步学习如何实现一个解析器,最终的目标是可以灵活的将 sql、json 转换为 go struct。

nom是 Rust 中一个强大的解析器库,而我们就是要基于 nom 对源字符串进行解析。

本文的前半部分深度参考 nom 仓库中的一个文档

万丈高楼平地起,要想用 nom 写好一个解析器,我们先要对 nom 进行一些了解,因此先从一些小示例开始,主要是通过一些 nom 自带的函数来实现简单的解析。

第一次解析

根据 文档 中的介绍,我们先从解析一个括号中的数字 —— (12345) 开始。先定义一个函数签名,它用于把字符串 (12345) 解析成数字:

fn parse_u32(input: &[u8]) -> IResult<&[u8], u32>

parse_u32 是函数名称,它接收一个 input 参数,IResultnom::IResult,是 nom 中常用的结果返回类型。可以通过

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值