ebnf

Crates.ioebnf
lib.rsebnf
version0.1.4
sourcesrc
created_at2022-03-18 14:30:25.759159
updated_at2023-04-14 16:47:52.331354
descriptionA successor bnf parsing library of bnf parsing library, for parsing Extended Backus–Naur form context-free grammars
homepage
repositoryhttps://github.com/ChAoSUnItY/ebnf
max_upload_size
id552724
size22,562
ChAoS_UnItY (Kyle Lin) (ChAoSUnItY)

documentation

README

ebnf

Crates.io Docs .github/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

Disclaimer:

There are various variants of EBNF, which uses somewhat different syntactic conventions. This library takes EBNF Evaluator'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:

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?

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);
}
Commit count: 53

cargo fmt