An open API service indexing awesome lists of open source software.

https://github.com/chaosunity/ebnf

A successor bnf parsing library of bnf parsing library, for parsing Extended Backus–Naur form context-free grammars
https://github.com/chaosunity/ebnf

ebnf ebnf-syntax parser rust

Last synced: 4 months ago
JSON representation

A successor bnf parsing library of bnf parsing library, for parsing Extended Backus–Naur form context-free grammars

Awesome Lists containing this project

README

          

# ebnf

[![Crates.io](https://img.shields.io/crates/v/ebnf)](https://crates.io/crates/ebnf)
[![Docs](https://docs.rs/ebnf/badge.svg)](https://docs.rs/ebnf/)
[![.github/workflows/push.yml](https://github.com/ChAoSUnItY/ebnf/actions/workflows/push.yml/badge.svg)](https://github.com/ChAoSUnItY/ebnf/actions/workflows/push.yml)

> A successor bnf parsing library of bnf parsing library, for parsing Extended Backus–Naur form context-free grammars

The code is available on [GitHub](https://github.com/ChAoSUnItY/ebnf)

## Disclaimer:
There are various variants of EBNF, which uses somewhat different syntactic conventions. This library
takes [EBNF Evaluator](https://mdkrajnak.github.io/ebnftest/)'s example code as standard, which has
almost most syntactic conventions on Wikipedia's page.

## What does a valid EBNF grammar looks like?

The following example is taken from EBNF Evaluator:

```ebnf
filter ::= ( first ' ' )? ( number '~ ' )? ( number '-' number ) ( ' ' number '~' )? ( ' hz' )? ( ' b' )? ( ' i' )? ( ' a' )?;
first ::= #'[a-za-z][a-za-z0-9_+]*';
number ::= digits ( ( '.' | ',' ) digits? )?;
digits ::= #'[0-9]+';
```

## How to use this library?

```rust
extern crate ebnf;

fn main() {
let source = r"
filter ::= ( first ' ' )? ( number '~ ' )? ( number '-' number ) ( ' ' number '~' )? ( ' hz' )? ( ' b' )? ( ' i' )? ( ' a' )?;
first ::= #'[a-za-z][a-za-z0-9_+]*';
number ::= digits ( ( '.' | ',' ) digits? )?;
digits ::= #'[0-9]+';
";

let result = ebnf::get_grammar(source);
}
```