From a6e9f5172fa72094d5c7c2fadf29ffd8cc272687 Mon Sep 17 00:00:00 2001 From: JSDurand Date: Fri, 2 Jun 2023 15:01:12 +0800 Subject: abnf: a skeleton for an ABNF parser --- grammar/src/abnf.rs | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 grammar/src/abnf.rs (limited to 'grammar') 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) -> Result { + let str = str.as_ref(); + + todo!() +} -- cgit v1.2.3-18-g5258