cl-parser: Transliterate to a trait-based parsing implementation
Bump version number.
This commit is contained in:
		| @@ -1,5 +1,6 @@ | ||||
| //! Pretty prints a conlang AST in yaml | ||||
|  | ||||
| use cl_ast::Stmt; | ||||
| use cl_lexer::Lexer; | ||||
| use cl_parser::Parser; | ||||
| use repline::{error::Error as RlError, Repline}; | ||||
| @@ -19,7 +20,7 @@ fn main() -> Result<(), Box<dyn Error>> { | ||||
|         }; | ||||
|  | ||||
|         let mut parser = Parser::new(Lexer::new(&line)); | ||||
|         let code = match parser.stmt() { | ||||
|         let code = match parser.parse::<Stmt>() { | ||||
|             Ok(code) => { | ||||
|                 rl.accept(); | ||||
|                 code | ||||
|   | ||||
| @@ -5,6 +5,7 @@ use crate::{ | ||||
|     menu, | ||||
|     tools::print_token, | ||||
| }; | ||||
| use cl_ast::File; | ||||
| use cl_interpret::{convalue::ConValue, env::Environment, interpret::Interpret}; | ||||
| use cl_lexer::Lexer; | ||||
| use cl_parser::Parser; | ||||
| @@ -49,7 +50,7 @@ fn load_file(env: &mut Environment, path: impl AsRef<Path>) -> Result<ConValue, | ||||
|     let inliner = | ||||
|         cl_parser::inliner::ModuleInliner::new(path.as_ref().parent().unwrap_or(Path::new(""))); | ||||
|     let file = std::fs::read_to_string(path)?; | ||||
|     let code = Parser::new(Lexer::new(&file)).file()?; | ||||
|     let code = Parser::new(Lexer::new(&file)).parse()?; | ||||
|     let code = match inliner.inline(code) { | ||||
|         Ok(a) => a, | ||||
|         Err((code, io_errs, parse_errs)) => { | ||||
| @@ -79,13 +80,13 @@ fn lex_code(code: &str, path: Option<impl AsRef<Path>>) -> Result<(), Box<dyn Er | ||||
| } | ||||
|  | ||||
| fn fmt_code(code: &str) -> Result<(), Box<dyn Error>> { | ||||
|     let code = Parser::new(Lexer::new(code)).file()?; | ||||
|     let code = Parser::new(Lexer::new(code)).parse::<File>()?; | ||||
|     println!("{code}"); | ||||
|     Ok(()) | ||||
| } | ||||
|  | ||||
| fn run_code(code: &str, env: &mut Environment) -> Result<(), Box<dyn Error>> { | ||||
|     let code = Parser::new(Lexer::new(code)).file()?; | ||||
|     let code = Parser::new(Lexer::new(code)).parse::<File>()?; | ||||
|     match code.interpret(env)? { | ||||
|         ConValue::Empty => {} | ||||
|         ret => println!("{ret}"), | ||||
|   | ||||
| @@ -1,4 +1,5 @@ | ||||
| use crate::{ansi, ctx}; | ||||
| use cl_ast::Stmt; | ||||
| use cl_lexer::Lexer; | ||||
| use cl_parser::Parser; | ||||
| use repline::{error::ReplResult, prebaked::*}; | ||||
| @@ -42,7 +43,7 @@ pub fn run(ctx: &mut ctx::Context) -> ReplResult<()> { | ||||
|     use cl_parser::inliner::ModuleInliner; | ||||
|  | ||||
|     read_and(ansi::CYAN, "cl>", " ?>", |line| { | ||||
|         let code = Parser::new(Lexer::new(line)).stmt()?; | ||||
|         let code = Parser::new(Lexer::new(line)).parse::<Stmt>()?; | ||||
|         let code = ModuleInliner::new(".").fold_stmt(code); | ||||
|  | ||||
|         print!("{}", ansi::OUTPUT); | ||||
| @@ -71,7 +72,7 @@ pub fn fmt(_ctx: &mut ctx::Context) -> ReplResult<()> { | ||||
|     read_and(ansi::BRIGHT_MAGENTA, "cl>", " ?>", |line| { | ||||
|         let mut p = Parser::new(Lexer::new(line)); | ||||
|  | ||||
|         match p.stmt() { | ||||
|         match p.parse::<Stmt>() { | ||||
|             Ok(code) => println!("{}{code}{}", ansi::OUTPUT, ansi::RESET), | ||||
|             Err(e) => Err(e)?, | ||||
|         } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user