一些rust clap库的笔记

小试牛刀 clap是rust下面的一款命令行解析的库,下面是一些使用的笔记。 在Cargo.toml中添加下面的依赖 [dependencies] clap = {version = "4",features = ["derive"]} 对应feature的作用如下: 默认特性 std: Not Currently Used. Placeholder for supporting no_std environments in a backwards compatible manner. color: Turns on colored error messages. help: Auto-generate help output usage: Auto-generate usage error-context: Include contextual information for errors (which arg failed, etc) suggestions: Turns on the Did you mean '--myoption'? feature for when users make typos. 可选特性 deprecated: Guided experience to prepare for next breaking release (at different stages of development, this may become default) derive: Enables the custom derive (i....

April 19, 2024 · 5 min · czyt

使用 Pest 和 PEG 构建 Rust 解析器【译】

本文原为为 https://blog.logrocket.com/building-rust-parser-pest-peg/,使用Google翻译进行机翻,部分内容做了细微润色。 编写一个高效的词法分析器对来解析复杂的结构可能具有挑战性。如果格式或结构是固定的,并且您必须以易于理解、维护和扩展以适应未来更改的方式编写解析器,那么这会变得更加复杂。 在这些情况下,我们可以使用解析器生成器,而不是手写解析器或手动解析我们的项目。在本文中,我们将回顾什么是解析器生成器,并探索一个名为 Pest 的 Rust 解析工具。我们将涵盖: [TOC] 请注意,您应该能够轻松地阅读和编写基本的 Rust 代码,例如函数、结构和循环。 什么是解析器生成器? 解析器生成器是一些程序,它接受解析器需要考虑的规则,然后以编程方式为您生成一个解析器,该解析器将根据这些规则解析输入。 大多数时候,规则以简化语言(例如正则表达式)提供给解析器生成器。因此,当您想要通过更改规则或添加新规则来更新解析器时,您只需更新或添加规则的正则表达式即可。然后,当您运行解析器生成器时,它将重写解析器以适应这些规则。 可以想象使用这样的解析工具可以节省多少时间。许多解析器生成器还会生成词法分析器,因此您不必自己编写词法分析器。如果生成的词法分析器不适合您,您可以选择使用您自己的词法分析器运行解析器(如果需要)。 目前,Rust 生态系统中有多个解析器生成器可供您使用。其中最受欢迎的三个是 LalrPop、Nom 和 Pest。 LalrPop 与 Yacc 非常相似,它让您定义规则和相应的操作。我个人用它来为我的 8086 模拟器项目编写规则。 Nom 是一个解析器组合器库,您可以在其中将规则编写为函数组合。这更面向解析二进制输入,但也可用于解析字符串。 最后,Pest 使用 Parsing Expression Grammar 来定义解析规则。我们将在这篇文章中详细探讨 Rust 与 Pest 的解析。 Pest 中的解析表达式语法是什么? 解析表达式语法(PEG)是用 Pest 定义 Rust 解析“规则”的方法之一。 Pest 接受具有此类规则定义的文件的输入,并生成遵循它们的 Rust 解析器。 在编写规则时,您应该考虑 Pest 和 PEG 的三个定义特征。 第一个特点是贪婪匹配。 Pest 将始终尝试将输入的最大值与规则相匹配。例如,假设我们编写了如下规则: match one or more alphabets 在这种情况下,Pest 将消耗输入中的所有内容,直到达到数字、空格或符号。在此之前它不会停止。 要考虑的第二个特征是交替匹配是有序的。为了理解这意味着什么,假设我们给出了多个匹配来满足一条规则,如下所示: rule1 | rule2 | rule3 Pest 将首先尝试匹配 rule1 。当且仅当 rule1 失败时,Pest才会尝试匹配 rule2 ,依此类推。如果第一条规则匹配,Pest 将不会尝试匹配任何其他规则来找到最佳匹配。...

April 19, 2024 · 10 min · czyt