1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
|
[](https://github.com/duesee/abnf/actions/workflows/ci.yml)
[](https://github.com/duesee/abnf/actions/workflows/scheduled.yml)
[](https://docs.rs/abnf)
# ABNF
A parser for ABNF based on nom 7.
## Example
The following code
```rust
use abnf::rulelist;
// Note: mind the trailing newline!
match rulelist("a = b / c\nc = *(d e)\n") {
Ok(rules) => println!("{:#?}", rules),
Err(error) => eprintln!("{}", error),
}
```
outputs
```rust
[
Rule {
name: "a",
node: Alternatives(
[
Rulename(
"b",
),
Rulename(
"c",
),
],
),
kind: Basic,
},
Rule {
name: "c",
node: Repetition {
repeat: Variable {
min: None,
max: None,
},
node: Group(
Concatenation(
[
Rulename(
"d",
),
Rulename(
"e",
),
],
),
),
},
kind: Basic,
},
]
```
You can also use the provided example to parse and `Debug`-print any ABNF file.
```sh
cargo run --example=example examples/assets/abnf.abnf
```
## License
Licensed under either of
* Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
* MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
at your option.
### Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any
additional terms or conditions.
|