yggdrasil_rt/language/
mod.rs

1use crate::{errors::YggdrasilError, TokenStream, TokenTree, YggdrasilRule};
2
3/// A trait with a single method that parses strings.
4pub trait YggdrasilParser {
5    /// Specify the rules of this language
6    type Rule: YggdrasilRule;
7    /// Get flatten token stream
8    fn parse_lex(input: &str, rule: Self::Rule) -> Result<TokenStream<Self::Rule>, YggdrasilError<Self::Rule>> {
9        Ok(Self::parse_cst(input, rule)?.flatten())
10    }
11    /// Parses a `&str` starting from `rule`.
12    fn parse_cst(input: &str, rule: Self::Rule) -> Result<TokenTree<Self::Rule>, YggdrasilError<Self::Rule>>;
13}