Add lexing support for structs
This commit is contained in:
		
							parent
							
								
									0ec427252f
								
							
						
					
					
						commit
						5fca72a3f9
					
				| @ -14,7 +14,7 @@ | ||||
| 
 | ||||
| BINARY="$(echo $1 | cut -d'.' -f1)"".out" | ||||
| 
 | ||||
| make clean SRC=$1 && make SRC=$1 && echo "" | ||||
| make clean SRC=$1 ; make SRC=$1 && echo "" | ||||
| 
 | ||||
| $BINARY ; echo "Return value: ""$?" | ||||
| 
 | ||||
|  | ||||
| @ -26,6 +26,7 @@ pub enum TypeKind { | ||||
|     U128, | ||||
|     String, | ||||
|     Array(Box<TypeKind>, u64), | ||||
|     Custom(String), | ||||
| } | ||||
| 
 | ||||
| #[derive(Debug, Clone)] | ||||
| @ -157,11 +158,31 @@ pub enum BlockLevelStatement { | ||||
|     Return(ReturnType, Expression), | ||||
| } | ||||
| 
 | ||||
| #[derive(Debug)] | ||||
| pub struct TypeDefinition { | ||||
|     range: TokenRange, | ||||
|     name: String, | ||||
|     kind: TypeDefinitionKind, | ||||
| } | ||||
| 
 | ||||
| #[derive(Debug)] | ||||
| pub enum TypeDefinitionKind { | ||||
|     Struct(Vec<StructField>), | ||||
| } | ||||
| 
 | ||||
| #[derive(Debug)] | ||||
| pub struct StructField { | ||||
|     name: String, | ||||
|     ty: Type, | ||||
|     range: TokenRange, | ||||
| } | ||||
| 
 | ||||
| #[derive(Debug)] | ||||
| pub enum TopLevelStatement { | ||||
|     Import(ImportStatement), | ||||
|     ExternFunction(FunctionSignature), | ||||
|     FunctionDefinition(FunctionDefinition), | ||||
|     TypeDefinition(TypeDefinition), | ||||
| } | ||||
| 
 | ||||
| #[derive(Debug)] | ||||
|  | ||||
| @ -476,6 +476,12 @@ impl Parse for SetStatement { | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| impl Parse for TypeDefinition { | ||||
|     fn parse(stream: TokenStream) -> Result<Self, Error> { | ||||
|         todo!() | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| impl Parse for TopLevelStatement { | ||||
|     fn parse(mut stream: TokenStream) -> Result<Self, Error> { | ||||
|         use TopLevelStatement as Stmt; | ||||
|  | ||||
| @ -62,6 +62,7 @@ impl ast::Module { | ||||
|                     }; | ||||
|                     functions.push(def); | ||||
|                 } | ||||
|                 TypeDefinition(type_definition) => todo!("Add process for type definition"), | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
| @ -249,6 +250,7 @@ impl From<ast::TypeKind> for mir::TypeKind { | ||||
|                 mir::TypeKind::Array(Box::new(mir::TypeKind::from(*type_kind.clone())), *length) | ||||
|             } | ||||
|             ast::TypeKind::String => mir::TypeKind::StringPtr, | ||||
|             ast::TypeKind::Custom(_) => todo!("Add processing for custom types"), | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -36,6 +36,8 @@ pub enum Token { | ||||
|     False, | ||||
|     /// `extern`
 | ||||
|     Extern, | ||||
|     /// `struct`
 | ||||
|     Struct, | ||||
| 
 | ||||
|     // Symbols
 | ||||
|     /// `;`
 | ||||
| @ -74,6 +76,8 @@ pub enum Token { | ||||
|     BracketClose, | ||||
|     /// `,`
 | ||||
|     Comma, | ||||
|     /// `.`
 | ||||
|     Dot, | ||||
| 
 | ||||
|     Eof, | ||||
| } | ||||
| @ -211,6 +215,7 @@ pub fn tokenize<T: Into<String>>(to_tokenize: T) -> Result<Vec<FullToken>, Error | ||||
|                     "false" => Token::False, | ||||
|                     "extern" => Token::Extern, | ||||
|                     "pub" => Token::PubKeyword, | ||||
|                     "struct" => Token::Struct, | ||||
|                     _ => Token::Identifier(value), | ||||
|                 }; | ||||
|                 variant | ||||
| @ -249,6 +254,7 @@ pub fn tokenize<T: Into<String>>(to_tokenize: T) -> Result<Vec<FullToken>, Error | ||||
|             '{' => Token::BraceOpen, | ||||
|             '}' => Token::BraceClose, | ||||
|             ',' => Token::Comma, | ||||
|             '.' => Token::Dot, | ||||
|             // Invalid token
 | ||||
|             _ => Err(Error::InvalidToken(*character, cursor.position))?, | ||||
|         }; | ||||
|  | ||||
							
								
								
									
										15
									
								
								reid_src/struct.reid
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								reid_src/struct.reid
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,15 @@ | ||||
| // Arithmetic, function calls and imports! | ||||
| 
 | ||||
| struct Test { | ||||
|     field: i32, | ||||
|     second: u32 | ||||
| } | ||||
| 
 | ||||
| fn main() -> u32 { | ||||
|     let value = Test { | ||||
|         field: 5, | ||||
|         second: 3, | ||||
|     }; | ||||
| 
 | ||||
|     return Test.second; | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user