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}