summaryrefslogtreecommitdiff
path: root/grammar/src/abnf.rs
blob: eb568190cc10f16b27098d45089edb9f818038ea (plain)
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
//! This file implements the function to read a grammar from a string,
//! in the [augmented Backus Naur
//! form](https://en.wikipedia.org/wiki/Augmented_Backus–Naur_form).
//! See [RFC5234](https://www.rfc-editor.org/rfc/rfc5234) for its
//! specifications.
//!
//! In fact, the rules of ABNF are considered to be too strict.  For
//! example, only ASCII characters are allowed in the format, even
//! within comments.  I think any character should be allowed within
//! comments, so the implementation here does that.

use super::*;

/// The type of errors encountered during parsing a grammar in the
/// ABNF format.  See the function [`abnf_to_grammar`] for the parsing
/// function.
#[derive(Debug, Clone, Copy)]
pub enum Error {
    /// Something invalid has occurred.
    Invalid,
}

impl core::fmt::Display for Error {
    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
        match self {
            Error::Invalid => write!(f, "invalid"),
        }
    }
}

#[allow(unused)]
/// This function converts a string to a grammar.
pub fn abnf_to_grammar(str: impl AsRef<str>) -> Result<Grammar, Error> {
    let str = str.as_ref();

    todo!()
}