#parser #grammar #person-struct #person-parser

bin+lib person_struct_parser

Rust 人员结构解析器

20 个版本 (13 个稳定版)

1.3.1 2023年11月15日
1.2.6 2023年11月15日
0.4.2 2023年11月12日
0.3.1 2023年11月11日
0.1.0 2023年11月11日

#159 in 压缩

Download history 2/week @ 2024-03-10 11/week @ 2024-03-31

每月 145 次下载

MIT 许可证

15KB
271

person_struct_parser

Rust 源代码解析器

Person_struct_parser(PSP) 是一个解析库,可以将字符串解析成人员对象。

  • PSP 有一个名为 Person 的结构,用于存储有关人员(姓名、年龄、城市、邮编、电话号码)的信息(代码 person_struct_parser::person_module::Person)。
pub struct Person {
        ///name of the person
        pub name: String,
        ///age of the person
        pub age: u32,
        ///city where the person lives
        pub city: String,
        ///zip
        pub zip: u32,
        ///phone number
        pub phone: String
    }
  • Person 实现了一个函数 person_struct_parser::person_module::normalize,用于将对象数据减少到 规范形式
pub fn normalize(&mut self) -> &mut Self
  • Person 实现了函数 person_struct_parser::person_module::parse,它是将字符串解析为带有规范化的 Person 对象的主要方法
pub fn parse(string: &str) -> anyhow::Result<Person>
  • Person 实现了 std::fmt::Display

  • 解析语法

low_alpha = {'a'..'z'}
high_alpha = {'A'..'Z'}
digit = {'0'..'9'}

name = {high_alpha ~ low_alpha+}
age = {digit{1,4}}
city = {high_alpha ~ (low_alpha+ | (low_alpha+ ~ ('-' | ' ') ~ low_alpha+))}
zip = {digit{5}}
phone_number = {'+' ~ (digit{12} | digit{10})}

person = {name ~ ' ' ~ age ~ ' ' ~ city ~ zip ~ ' ' ~ phone_number}

示例

  • 规范化。为了规范化人员对象。以下示例将打印 Roman-21-Paris54586 +380546548577
let mut person = Person{name:String::from("RoMAn"),age:21,city:String::from("PaRiS"),zip:54586,phone:"+380546548577"};
println!("{}",person.normalize());
  • 解析。以下示例将打印 Roman-21-Paris54586 +380426458777,因为解析和规范化之后
println!("{}",parse("-Ro*Ma/N//2*-1..PaR*I-s-54gh5h-h8ghj6 --+3804-2/64/58-*777").unwrap());
  • 命令行界面。您可以在命令提示符中执行 cargo run -- -i your_file_name.txt 来解析您文件的内容。如果出现问题,它将解析适当的默认文件。结果将放在 Result.txt 中。另外还有更多命令 - 尝试 cargo run -- --help 获取更多信息。

自定义错误

使用 thiserror 包创建了一个自定义错误枚举类型用于解析。更多请查看文档。

依赖项

~1–1.6MB
~26K SLoC