51 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| #![allow(dead_code, unused)]
 | |
| use crate::errors::CLIArgumentError;
 | |
| use lrlex::lrlex_mod;
 | |
| use lrpar::lrpar_mod;
 | |
| use std::error::Error;
 | |
| use std::fmt::Display;
 | |
| use std::io;
 | |
| use std::io::ErrorKind::InvalidInput;
 | |
| 
 | |
| mod ast;
 | |
| mod errors;
 | |
| mod codegen;
 | |
| mod tests;
 | |
| 
 | |
| lrlex_mod!("lexers/fudge.l");
 | |
| lrpar_mod!("parsers/fudge.y");
 | |
| 
 | |
| fn main() -> Result<(), Box<dyn Error>> {
 | |
|     let src_path = std::env::args()
 | |
|         .nth(1)
 | |
|         .ok_or(Box::new(CLIArgumentError("Source File Not Provided")))?;
 | |
|     let src_string = std::fs::read_to_string(&src_path)?;
 | |
| 
 | |
|     let lexer_def = fudge_l::lexerdef();
 | |
| 
 | |
|     let lexer = lexer_def.lexer(src_string.as_str());
 | |
|     let (res, errs) = fudge_y::parse(&lexer);
 | |
|     match (res, errs) {
 | |
|         (Some(Ok(res)), _) => {
 | |
|             println!("Parsed succesfully:");
 | |
|             println!("{:#?}", res);
 | |
|         },
 | |
|         (Some(Err(e)), _) => {
 | |
|             println!("Parsing failed:");
 | |
|             println!("{:#?}", e);
 | |
|         }
 | |
|         (_, vec) => {
 | |
|             println!("LexParseErrors encountered:");
 | |
|             println!("{:#?}", vec);
 | |
|         }
 | |
|     }
 | |
|     
 | |
|     Ok(())
 | |
| }
 | |
| 
 | |
| // fn main() {
 | |
| //     if let Err(ref e) = main_() {
 | |
| //         return e.fmt()
 | |
| //     }
 | |
| // }
 |