diff --git a/src/builtin/README.md b/builtin/README.md similarity index 100% rename from src/builtin/README.md rename to builtin/README.md diff --git a/src/builtin/builtin.js b/builtin/builtin.js similarity index 100% rename from src/builtin/builtin.js rename to builtin/builtin.js diff --git a/examples/playground.sb b/examples/playground.sb index fe3d591..dc5f7a7 100644 --- a/examples/playground.sb +++ b/examples/playground.sb @@ -1,5 +1,5 @@ fn main() { let x = 10 x = 5 - _printf("Hello World!\n") + print("Hello World!") } diff --git a/src/lib/stdio.sb b/lib/stdio.sb similarity index 100% rename from src/lib/stdio.sb rename to lib/stdio.sb diff --git a/src/builtin/mod.rs b/src/builtin/mod.rs deleted file mode 100644 index 36184e3..0000000 --- a/src/builtin/mod.rs +++ /dev/null @@ -1,5 +0,0 @@ -use rust_embed::RustEmbed; - -#[derive(RustEmbed)] -#[folder = "src/builtin/"] -pub struct Builtins; diff --git a/src/generator/js.rs b/src/generator/js.rs index eef7b23..ea2730c 100644 --- a/src/generator/js.rs +++ b/src/generator/js.rs @@ -22,8 +22,8 @@ impl Generator for JsGenerator { fn generate(prog: Program) -> String { let mut code = String::new(); - let raw_builtins = crate::builtin::Builtins::get("builtin.js") - .expect("Could not locate builtin functions"); + let raw_builtins = + crate::Builtins::get("builtin.js").expect("Could not locate builtin functions"); code += std::str::from_utf8(raw_builtins.as_ref()) .expect("Unable to interpret builtin functions"); let funcs: String = prog @@ -34,8 +34,7 @@ impl Generator for JsGenerator { code += &funcs; - // Until we have a stdlib, it should suffice to print the result of main to stdout - code += "console.log(main())"; + code += "main();"; return code; } diff --git a/src/main.rs b/src/main.rs index 4823ede..cfe74df 100644 --- a/src/main.rs +++ b/src/main.rs @@ -24,11 +24,19 @@ use std::io::Write; use std::path::PathBuf; use structopt::StructOpt; -mod builtin; mod generator; mod lexer; mod parser; mod util; +use rust_embed::RustEmbed; + +#[derive(RustEmbed)] +#[folder = "lib/"] +pub struct Lib; + +#[derive(RustEmbed)] +#[folder = "builtin/"] +pub struct Builtins; #[derive(StructOpt, Debug)] enum Opt { @@ -49,19 +57,29 @@ fn main() -> Result<(), String> { }; let mut file = File::open(in_file).expect("Could not open file"); let mut contents = String::new(); + + contents = append_stdlib(contents); + file.read_to_string(&mut contents) .expect("Could not read file"); let tokens = lexer::tokenize(&contents); - // let ast = parser::parse(tokens.into_iter()); - let program = parser::parse(tokens, Some(contents))?; - dbg!(":#?", &program); - let output = generator::js::JsGenerator::generate(program); let mut file = std::fs::File::create(out_file).expect("create failed"); file.write_all(output.as_bytes()).expect("write failed"); file.flush().expect("Could not flush file"); Ok(()) } + +fn append_stdlib(mut buffer: String) -> String { + buffer += "// START stdlib\n\n"; + + let stdlib = Lib::get("stdio.sb").expect("Standard library not found. This should not occur."); + buffer += std::str::from_utf8(&stdlib).expect("Could not interpret standard library."); + + buffer += "\n// END stdlib\n\n"; + + buffer +} diff --git a/src/parser/rules.rs b/src/parser/rules.rs index 1230915..dcb33f5 100644 --- a/src/parser/rules.rs +++ b/src/parser/rules.rs @@ -42,7 +42,6 @@ impl Parser { while let Err(_) = self.peek_token(TokenKind::CurlyBracesClose) { let statement = self.parse_statement()?; - dbg!("{:?}", &statement); statements.push(statement); }