iowo/crates/lang/src/lst_parser/grammar.rs

34 lines
691 B
Rust

use std::fmt::Debug;
use crate::lst_parser::syntax_kind::SyntaxKind::*;
use super::{
input::Input,
output::Output,
syntax_kind::{self, lex},
Parser,
};
mod expression;
pub fn source_file(p: &mut Parser) {
let root = p.start("root");
expression::expression(p, false);
p.eat_succeeding_ws();
root.complete(p, ROOT);
}
fn check_parser(input: &str, parser_fn: fn(&mut Parser), output: &str) {
let toks = lex(input);
let mut parser = Parser::new(Input::new(&toks));
parser_fn(&mut parser);
let p_out = dbg!(parser.finish());
let o = Output::from_parser_output(toks, p_out);
let s = format!("{o:?}");
assert_eq!(&s, output);
}