diff --git a/examples/hello_world.fx b/examples/hello_world.fx new file mode 100644 index 0000000..e13bcf3 --- /dev/null +++ b/examples/hello_world.fx @@ -0,0 +1,4 @@ +fn main() { + let message = "Hello World!" + print(message) +} \ No newline at end of file diff --git a/examples/math.fx b/examples/math.fx new file mode 100644 index 0000000..5371baf --- /dev/null +++ b/examples/math.fx @@ -0,0 +1,11 @@ +fn main() { + print(fib(10)) +} + +fn fib(n: int): int { + if (n <= 1) { + return n + } + + return fib(n-1) + fib(n-2) +} \ No newline at end of file diff --git a/src/lexer/mod.rs b/src/lexer/mod.rs index 1590f9a..14477e2 100644 --- a/src/lexer/mod.rs +++ b/src/lexer/mod.rs @@ -59,6 +59,10 @@ pub enum TokenKind { SquareBraceOpen, /// "]" SquareBraceClose, + /// "{" + CurlyBracesOpen, + /// "}" + CurlyBracesClose, /// "\t" Tab, /// "\n" @@ -159,6 +163,8 @@ impl Cursor<'_> { ')' => BraceClose, '[' => SquareBraceOpen, ']' => SquareBraceClose, + '{' => CurlyBracesOpen, + '}' => CurlyBracesClose, c if is_id_start(c) => { let kind = self.identifier(c); diff --git a/src/main.rs b/src/main.rs index add3a58..7afc0be 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,9 +1,22 @@ +use lexer::TokenKind; +use std::fs::File; +use std::io::Read; + mod lexer; mod parser; -fn main() { - let tokens = lexer::tokenize(&"let x = 2"); +fn main() -> std::io::Result<()> { + let mut file = File::open("examples/hello_world.fx")?; + let mut contents = String::new(); + file.read_to_string(&mut contents)?; + + let tokens = lexer::tokenize(&contents); // let ast = parser::parse(tokens.into_iter()); - println!("{:?}", tokens) + for token in tokens { + if token.kind != TokenKind::Whitespace && token.kind != TokenKind::CarriageReturn { + println!("{:?}", token); + } + } + Ok(()) }