diff --git a/src/lexer.rs b/src/lexer.rs index 532caec..c342b70 100644 --- a/src/lexer.rs +++ b/src/lexer.rs @@ -87,7 +87,7 @@ const SYNTAX: [Node; 14] = [ }, Node { token_type: TokenType::Operator, - token_regex: Lazy::new(|| Regex::new(r"^[|\-|\+|\*|\=|\!]").unwrap()) + token_regex: Lazy::new(|| Regex::new(r"^[|\-|\+|\*|\=|\!|\&]").unwrap()) }, Node { token_type: TokenType::Round, diff --git a/src/parser.rs b/src/parser.rs index a041436..54c532c 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -8,6 +8,7 @@ pub enum AstType { FunctionDeceleration, VoidFunctionDeceleration, VariableDeceleration, + PointerDeceleration, MutVariableDeceleration, Include, IncludeLocal, @@ -95,6 +96,10 @@ impl Parser { ast_res.tokens.push(self.tokens[index+2].clone()); ast_res.ast_type = AstType::MutVariableDeceleration; self.index += 2; + } else if self.tokens[index+1].value=="*" && self.tokens[index+2].token_type==TokenType::Identifier { + ast_res.tokens.push(self.tokens[index+2].clone()); + ast_res.ast_type = AstType::PointerDeceleration; + self.index += 2; } } } diff --git a/src/transpiler.rs b/src/transpiler.rs index 5a6f79c..a903b35 100644 --- a/src/transpiler.rs +++ b/src/transpiler.rs @@ -125,6 +125,8 @@ pub fn transpile_round(input: String, state: LexerState) -> String { result += format!("{}: {}", ast.tokens[1].value, ast.tokens[0].value).as_str(); } else if ast.ast_type == AstType::MutVariableDeceleration { result += format!("mut {}: {}", ast.tokens[1].value, ast.tokens[0].value).as_str(); + } else if ast.ast_type == AstType::PointerDeceleration { + result += format!("{}: &mut {}", ast.tokens[1].value, ast.tokens[0].value).as_str(); } else if ast.tokens.len() == 1 && ast.tokens[0].token_type == TokenType::Round { result += format!( "({})", @@ -135,7 +137,8 @@ pub fn transpile_round(input: String, state: LexerState) -> String { ) .as_str(); } else { - result += ast.tokens[0].value.as_str() + result += ast.tokens[0].value.as_str(); + result += " "; } } diff --git a/test b/test deleted file mode 100755 index 2ce34b3..0000000 Binary files a/test and /dev/null differ