From 2d59e748bf5506671ad3f19e7d84679bc6bdac35 Mon Sep 17 00:00:00 2001 From: Giulio Agostini Date: Mon, 13 Jul 2026 08:11:15 +0200 Subject: [PATCH] wip --- README.org | 49 ++++++++++++++++++++++++++++++------ src/frontend/tokens.rs | 6 +++++ src/logging/display_token.rs | 7 +++++- 3 files changed, 54 insertions(+), 8 deletions(-) diff --git a/README.org b/README.org index 1ed1e56..fbfeb71 100755 --- a/README.org +++ b/README.org @@ -2,19 +2,54 @@ * Syntax example: #+begin_src -funzione :: fn(parametro1: Number, parametro2: String): String do +#this is what a struct delcaration shoul lool like +Point :: struct{ + x: Numeric, # btw Numeric in my imagination is a Interface/Trai/Contrato comune to all numberic type + y: Numeric, +} -end +Point.new :: fn(x:Numeric, y:Numeric) Self: + return Point{x,y} + + +Point.sum :: fn(self, other: Point) Self: + return Point{x: self.x+other.x, y: self.y+self.y} + + +@(entrypoint) +main :: fn(parametro1: Numeric, parametro2: String) Void : + a := Point.new(67, 420) + b := Point.new(42, 47) + a = a.sum(b) + + print("par: {},{}", touple(parametro1, parametro2)) + if parametro1 == 0: + print("What do you epexted to happen?") + else if parametro1 > 0: + for i in range(0,parametro1,1): + print("{}", parametro2) + else: + for i in range(0,parametro1,-1): + print("{}", parametro2) + range_gen := precook(range, args: [0,parametro1]); + match parametro1 is: + == 0 => print("{}", parametro2), + > 0 => forEach(range_gen(1), |x| print("{}", parametro2)), + < 0 => forEach(range_gen(-1), |x| print("{}", parametro2)), + _ => panic() + match a is: + Point(x > 100, y) => print("YEAAA :)"), + _ => print("NAIH :(") #+end_src * Planning: allora quello che devo fare รจ: -** TODO Controllare se ho finito la questione del retourn:labe -** TODO Complete the use os source slice inside parser (many node hase syntetic source slice or badly wrpapped) +** TODO Controllare se ho finito la questione del return:label +** TODO Complete the use os source slice inside parser (many node has synthetic source slice or badly wrapped) ** TODO implement struct: #+begin_src rlox Cosa :: struct{ - field1: Number + field1: Numeric } #+end_src *** TODO update lexer @@ -23,7 +58,7 @@ Cosa :: struct{ ** TODO implement partial function ... #+begin_src rlox cosa := Cosa{feld1: 42} -function :: fn(self:Cosa, b: Number) -> Number +function :: fn(self:Cosa, b: Numeric) -> Numeric res := function(cosa,44) #+end_src *** TODO ... to undirectly create method @@ -37,7 +72,7 @@ res := cosa |> function(44); ** TODO Understand what is a type system ** TODO implement struct method: #+begin_src rlox -Cosa.new :: fn(field1: Number):Self #+begin_src do +Cosa.new :: fn(field1: Numeric):Self #+begin_src do return Self{ field1 }; end; #+end_src diff --git a/src/frontend/tokens.rs b/src/frontend/tokens.rs index 2701b7e..32d7e70 100755 --- a/src/frontend/tokens.rs +++ b/src/frontend/tokens.rs @@ -5,6 +5,9 @@ use crate::{common::base_value::BaseValue, frontend::source_registry::SourceSlic #[derive(Debug, Clone, PartialEq)] pub enum TokenType { // Single character tokens + Space, + Tab, + NewLine, LeftParen, RightParen, LeftBrace, @@ -70,6 +73,9 @@ pub enum TokenType { impl fmt::Display for TokenType { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { + TokenType::Space => write!(f, "/s"), + TokenType::Tab => write!(f, "/t"), + TokenType::NewLine => write!(f, "/n"), TokenType::Bang => write!(f, "!"), TokenType::BangEqual => write!(f, "!="), TokenType::Equal => write!(f, "="), diff --git a/src/logging/display_token.rs b/src/logging/display_token.rs index d696f04..8e69b96 100755 --- a/src/logging/display_token.rs +++ b/src/logging/display_token.rs @@ -148,6 +148,9 @@ impl Token { fn token_type_symbol(&self) -> &'static str { match self.token_type { + TokenType::Space => "SPC", + TokenType::Tab => "TAB", + TokenType::NewLine => "NEL", TokenType::LeftParen => "(", TokenType::RightParen => ")", TokenType::LeftBrace => "{", @@ -256,7 +259,9 @@ impl Token { | TokenType::Dot | TokenType::Semicolon => ("\x1b[37m", self.token_type_symbol()), TokenType::StartBlock | TokenType::EndBlock => ("\x1b[35m", self.token_type_symbol()), - TokenType::Eof => ("\x1b[33m", self.token_type_symbol()), + TokenType::Eof | TokenType::Space | TokenType::Tab | TokenType::NewLine => { + ("\x1b[33m", self.token_type_symbol()) + } TokenType::In => ("\x1b[36m", self.token_type_symbol()), };