Add lexing to loops
This commit is contained in:
		
							parent
							
								
									ccb5741666
								
							
						
					
					
						commit
						431aae0b0d
					
				
							
								
								
									
										15
									
								
								examples/loops.reid
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								examples/loops.reid
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,15 @@ | |||||||
|  | // Arithmetic, function calls and imports! | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | fn main() -> u32 { | ||||||
|  |   for i in [0, 1, 2, 3, 4, 5, 6, 7, 9, 10] { | ||||||
|  |     print("hello") | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   let mut num = 0; | ||||||
|  |   while num < 10 { | ||||||
|  |     num = num + 1; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   return num; | ||||||
|  | } | ||||||
| @ -178,6 +178,8 @@ pub enum BlockLevelStatement { | |||||||
|     }, |     }, | ||||||
|     Expression(Expression), |     Expression(Expression), | ||||||
|     Return(ReturnType, Expression), |     Return(ReturnType, Expression), | ||||||
|  |     ForLoop(String, Expression, Block), | ||||||
|  |     WhileLoop(Expression, Block), | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #[derive(Debug, Clone)] | #[derive(Debug, Clone)] | ||||||
|  | |||||||
| @ -231,10 +231,10 @@ impl Parse for PrimaryExpression { | |||||||
|                     stream.expect(Token::BracketClose)?; |                     stream.expect(Token::BracketClose)?; | ||||||
|                     Expression(Kind::Array(expressions), stream.get_range().unwrap()) |                     Expression(Kind::Array(expressions), stream.get_range().unwrap()) | ||||||
|                 } |                 } | ||||||
|                 _ => Err(stream.expected_err("expression inner")?)?, |                 _ => Err(stream.expecting_err("expression")?)?, | ||||||
|             } |             } | ||||||
|         } else { |         } else { | ||||||
|             Err(stream.expected_err("expression")?)? |             Err(stream.expecting_err("expression")?)? | ||||||
|         }; |         }; | ||||||
| 
 | 
 | ||||||
|         while let Ok(index) = stream.parse::<ValueIndex>() { |         while let Ok(index) = stream.parse::<ValueIndex>() { | ||||||
|  | |||||||
| @ -148,6 +148,10 @@ impl ast::Block { | |||||||
|                 ast::BlockLevelStatement::Return(_, e) => { |                 ast::BlockLevelStatement::Return(_, e) => { | ||||||
|                     (StmtKind::Expression(e.process(module_id)), e.1) |                     (StmtKind::Expression(e.process(module_id)), e.1) | ||||||
|                 } |                 } | ||||||
|  |                 ast::BlockLevelStatement::ForLoop(expression, expression1, block) => { | ||||||
|  |                     todo!() | ||||||
|  |                 } | ||||||
|  |                 ast::BlockLevelStatement::WhileLoop(expression, block) => todo!(), | ||||||
|             }; |             }; | ||||||
| 
 | 
 | ||||||
|             mir_statements.push(mir::Statement(kind, range.as_meta(module_id))); |             mir_statements.push(mir::Statement(kind, range.as_meta(module_id))); | ||||||
|  | |||||||
| @ -42,6 +42,10 @@ pub enum Token { | |||||||
|     Extern, |     Extern, | ||||||
|     /// `struct`
 |     /// `struct`
 | ||||||
|     Struct, |     Struct, | ||||||
|  |     /// `while`
 | ||||||
|  |     While, | ||||||
|  |     /// `for`
 | ||||||
|  |     For, | ||||||
| 
 | 
 | ||||||
|     // Symbols
 |     // Symbols
 | ||||||
|     /// `;`
 |     /// `;`
 | ||||||
| @ -136,6 +140,8 @@ impl ToString for Token { | |||||||
|             Token::Extern => String::from("extern"), |             Token::Extern => String::from("extern"), | ||||||
|             Token::Struct => String::from("struct"), |             Token::Struct => String::from("struct"), | ||||||
|             Token::AsKeyword => String::from("as"), |             Token::AsKeyword => String::from("as"), | ||||||
|  |             Token::For => String::from("for"), | ||||||
|  |             Token::While => String::from("while"), | ||||||
|             Token::Semi => String::from(';'), |             Token::Semi => String::from(';'), | ||||||
|             Token::Equals => String::from('='), |             Token::Equals => String::from('='), | ||||||
|             Token::Colon => String::from(':'), |             Token::Colon => String::from(':'), | ||||||
| @ -322,6 +328,8 @@ pub fn tokenize<T: Into<String>>(to_tokenize: T) -> Result<Vec<FullToken>, Error | |||||||
|                     "pub" => Token::PubKeyword, |                     "pub" => Token::PubKeyword, | ||||||
|                     "struct" => Token::Struct, |                     "struct" => Token::Struct, | ||||||
|                     "as" => Token::AsKeyword, |                     "as" => Token::AsKeyword, | ||||||
|  |                     "for" => Token::For, | ||||||
|  |                     "while" => Token::While, | ||||||
|                     _ => Token::Identifier(value), |                     _ => Token::Identifier(value), | ||||||
|                 }; |                 }; | ||||||
|                 variant |                 variant | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user