use crate::syn::ast::*; use crate::syn::token::*; use pest::{error::Error, iterators::Pair, Parser}; #[derive(pest_derive::Parser)] #[grammar = "syn/parser.pest"] pub struct SybilParser; pub type Result> = std::result::Result; fn parse_atom(pair: Pair) -> Result { match pair.as_rule() { Rule::float => todo!(), Rule::int => todo!(), Rule::assign => todo!(), Rule::word => todo!(), Rule::str => todo!(), _ => unreachable!(), } } fn parse_expr(pair: Pair) -> Result { match pair.as_rule() { Rule::atom => { todo!() } Rule::quote => { todo!() } Rule::apply => { todo!() } _ => unreachable!(), } } fn parse_stmt(pair: Pair) -> Result { match pair.as_rule() { Rule::expr => { todo!() } _ => unreachable!(), } } pub fn parse_file(text: &str) -> Result> { let input = SybilParser::parse(Rule::file, text)?.next().unwrap(); let mut stmts = Vec::new(); for pair in input.into_inner() { stmts.push(parse_stmt(pair)?); } Ok(stmts) }