Rough outline of something resembling a parser (again...)
This commit is contained in:
		
							parent
							
								
									9f1500c1b6
								
							
						
					
					
						commit
						594b3e44e1
					
				
					 5 changed files with 56 additions and 0 deletions
				
			
		|  | @ -4,3 +4,5 @@ version = "0.1.0" | |||
| authors = ["Eryn Wells <eryn@erynwells.me>"] | ||||
| 
 | ||||
| [dependencies] | ||||
| sibillexer = { path = "../lexer" } | ||||
| sibiltypes = { path = "../types" } | ||||
|  |  | |||
|  | @ -1,3 +1,23 @@ | |||
| /* parser/src/lib.rs
 | ||||
|  * Eryn Wells <eryn@erynwells.me> | ||||
|  */ | ||||
| 
 | ||||
| extern crate sibillexer; | ||||
| extern crate sibiltypes; | ||||
| 
 | ||||
| mod list; | ||||
| mod program; | ||||
| 
 | ||||
| use sibillexer::Lexer; | ||||
| 
 | ||||
| struct ParseError { } | ||||
| 
 | ||||
| type Result<T> = std::result::Result<T, ParseError>; | ||||
| 
 | ||||
| trait Parsable: Sized { | ||||
|     fn parse(lexer: &Lexer) -> Result<Self>; | ||||
| } | ||||
| 
 | ||||
| #[cfg(test)] | ||||
| mod tests { | ||||
|     #[test] | ||||
|  |  | |||
							
								
								
									
										24
									
								
								parser/src/list.rs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								parser/src/list.rs
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,24 @@ | |||
| /* parser/src/list.rs
 | ||||
|  * Eryn Wells <eryn@erynwells.me> | ||||
|  */ | ||||
| 
 | ||||
| extern crate sibillexer; | ||||
| extern crate sibiltypes; | ||||
| 
 | ||||
| use sibillexer::Lexer; | ||||
| use sibillexer::Token; | ||||
| use sibiltypes::Value; | ||||
| use super::Parsable; | ||||
| use super::ParseError; | ||||
| use super::Result; | ||||
| 
 | ||||
| pub enum SExpression { | ||||
|     Value(Box<Value>), | ||||
|     List(Vec<SExpression>), | ||||
| } | ||||
| 
 | ||||
| impl Parsable for SExpression { | ||||
|     fn parse(lexer: &Lexer) -> Result<SExpression> { | ||||
|         Err(ParseError{ }) | ||||
|     } | ||||
| } | ||||
							
								
								
									
										9
									
								
								parser/src/program.rs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								parser/src/program.rs
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,9 @@ | |||
| /* parser/src/program.rs
 | ||||
|  * Eryn Wells <eryn@erynwells.me> | ||||
|  */ | ||||
| 
 | ||||
| use list::SExpression; | ||||
| 
 | ||||
| struct Program { | ||||
|     commands: Vec<SExpression>, | ||||
| } | ||||
|  | @ -6,6 +6,7 @@ mod value; | |||
| pub use bool::Bool; | ||||
| pub use char::Char; | ||||
| pub use number::Number; | ||||
| pub use value::Value; | ||||
| 
 | ||||
| #[cfg(test)] | ||||
| mod tests { | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue