diff options
author | JSDurand <mmemmew@gmail.com> | 2023-06-02 15:01:12 +0800 |
---|---|---|
committer | JSDurand <mmemmew@gmail.com> | 2023-06-02 15:01:12 +0800 |
commit | a6e9f5172fa72094d5c7c2fadf29ffd8cc272687 (patch) | |
tree | efc5326770af274960b26382dfbae2cc5bee96e5 /grammar | |
parent | 8486474f377faf2d800d79166a7abe6b975e3e50 (diff) |
abnf: a skeleton for an ABNF parser
Diffstat (limited to 'grammar')
-rw-r--r-- | grammar/src/abnf.rs | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/grammar/src/abnf.rs b/grammar/src/abnf.rs new file mode 100644 index 0000000..00bc0b2 --- /dev/null +++ b/grammar/src/abnf.rs @@ -0,0 +1,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!() +} |