From 0137beff70772549c8edda79f0e92c60cc333929 Mon Sep 17 00:00:00 2001 From: Leo Dev Date: Sat, 6 Jul 2024 13:43:49 +0200 Subject: [PATCH] rust code --- src/main.rs | 5 +---- src/parser.rs | 14 ++++++++++++++ src/transpiler.rs | 5 +++++ 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/main.rs b/src/main.rs index 0e17b5d..43e92bf 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,10 +7,7 @@ mod utils; fn main() { let mut vars = Variables::new(); let mut trsp = transpiler::Transpiler::default(); - trsp.inject.inject = true; - trsp.inject.state.line = 2; - trsp.inject.state.column = 2; - let out = trsp.transpile("int x\nx".to_string(), 0, &mut vars); + let out = trsp.transpile("rust{let mut x;}".to_string(), 0, &mut vars); for p in trsp.problems { match p { ProblemCap::Error(problem) => { diff --git a/src/parser.rs b/src/parser.rs index d9261fb..af3b487 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -9,6 +9,8 @@ use crate::{ #[allow(dead_code)] pub enum Token { Number(String, State), + Keyword(String, State), + SKeyword(String, State), DKeyword(String, State), Identifier(String, State), Curly(String, State), @@ -23,6 +25,8 @@ pub fn extract_values(token: Token) -> (String, State) { Token::Curly(x, state) => (x, state), Token::Round(x, state) => (x, state), Token::DKeyword(x, state) => (x, state), + Token::SKeyword(x, state) => (x, state), + Token::Keyword(x, state) => (x, state), } } @@ -44,6 +48,7 @@ pub fn extract_ast(ast: Ast) -> Vec { vstr.push(a); vstr.push(b); } + _ => {} } vstr } @@ -53,6 +58,7 @@ pub enum Ast { Variable(String, String), Function(String, String, String, String), Struct(String, String), + Rust(String), Single(Token), } @@ -61,6 +67,7 @@ pub fn get_token(v: String, t: u32, state: State) -> Token { 1 => Token::Number(v, state), 2 => match v.as_str() { "enum" | "struct" | "namespace" => Token::DKeyword(v, state), + "rust" => Token::SKeyword(v, state), _ => Token::Identifier(v, state), }, 3 => Token::Round(v, state), @@ -255,6 +262,13 @@ pub fn parse( } drain += 2; } + [Token::SKeyword(keyword, _), Token::Curly(curly, _), ..] => { + match keyword.as_str() { + "rust" => ast.push(Ast::Rust(curly.clone())), + _ => {} + } + drain += 1; + } x => { ast.push(Ast::Single(x[0].clone())); //let estate = extract_values(x[0].clone()).1; diff --git a/src/transpiler.rs b/src/transpiler.rs index 390c0bd..92ddbd4 100644 --- a/src/transpiler.rs +++ b/src/transpiler.rs @@ -91,6 +91,11 @@ impl Transpiler { ) .as_str() } + Ast::Rust(rs) => { + res += "{"; + res += rs.as_str(); + res += "}"; + } Ast::Single(_) => {} } }