Add word-level parsing
This commit is contained in:
parent
0d66b1ee7c
commit
198bc12507
34 changed files with 743 additions and 446 deletions
|
|
@ -1,10 +1,6 @@
|
|||
use token::{Token};
|
||||
use parsers::{line::Line, word::Word};
|
||||
use lexeme::Lexeme;
|
||||
use parser::{token::Token, lexeme::Lexeme};
|
||||
|
||||
mod token;
|
||||
pub mod lexeme;
|
||||
pub mod parsers;
|
||||
pub mod parser;
|
||||
|
||||
pub trait Parseable: Into<Token> {
|
||||
fn probe(lexeme: &Lexeme) -> bool;
|
||||
|
|
@ -16,22 +12,6 @@ type Probe = fn(&Lexeme) -> bool;
|
|||
type Lexer = fn(&Lexeme) -> Token;
|
||||
type LexMap<'lm> = &'lm [(Probe, Lexer)];
|
||||
|
||||
fn make_lexmap<DefaultToken: Parseable>(base: LexMap) -> Vec<(Probe, Lexer)> {
|
||||
let mut vector: Vec<(Probe, Lexer)> = base.to_vec();
|
||||
|
||||
fn adapter<D: Parseable>(lex: &Lexeme) -> Token {
|
||||
D::lex(lex).into()
|
||||
}
|
||||
|
||||
vector.push((DefaultToken::probe, adapter::<DefaultToken>));
|
||||
vector
|
||||
}
|
||||
|
||||
pub fn parse<DefaultLineToken: Parseable, DefaultWordToken: Parseable>(
|
||||
text: &str,
|
||||
) -> String {
|
||||
let escaped_text = tera::escape_html(text);
|
||||
parsers::line::parser::read::<DefaultLineToken>(
|
||||
&parsers::word::parser::read::<DefaultWordToken>(&escaped_text),
|
||||
)
|
||||
pub fn parse(text: &str) -> String {
|
||||
parser::read(text)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue