From e7bfd23eb524a122fc5d32b1383b0a701410a27c Mon Sep 17 00:00:00 2001 From: Selimaj Dev Date: Tue, 5 May 2026 18:25:20 +0200 Subject: [PATCH] Class grammar --- parser/src/grammar.pest | 17 +++++++++++++++-- test/src/main.mist | 8 ++++---- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/parser/src/grammar.pest b/parser/src/grammar.pest index 56e45ad..d86c135 100644 --- a/parser/src/grammar.pest +++ b/parser/src/grammar.pest @@ -19,8 +19,23 @@ var = { "var" } var_decl = { (var | type_expr) ~ mutable? ~ identifier } semicolon = _{ ";" } +// ================= CLASS ================= +class_constructor = { + export? ~ "constructor" ~ "(" ~ param_list? ~ ")" ~ block +} + +class_fields = { var_decl_statement* } + +class_methods = { function_decl* } + +class_decl = { + "class" ~ identifier ~ "{" ~ class_fields ~ class_constructor ~ class_methods ~ "}" +} + // ================= TOP LEVEL ================= +top_level = { (attributes ~ (import | function_decl | struct_decl)) | mod_attribute | class_decl } + attribute = { "#" ~ "[" ~ meta ~ "]" } @@ -39,8 +54,6 @@ meta_list = { attributes = { attribute* } -top_level = { (attributes ~ (import | function_decl | struct_decl)) | mod_attribute } - import = { sharp ~ "include" ~ "<" ~ static_path ~ ">" } field_list = { field ~ ("," ~ field)* ~ ","? } diff --git a/test/src/main.mist b/test/src/main.mist index fe1d604..258851d 100644 --- a/test/src/main.mist +++ b/test/src/main.mist @@ -1,7 +1,7 @@ -void main() { - var iter = vec!(1, 2, 3, 4, 5); +class MyClass { + String my_item; - for (i in iter) { - println!("{i}"); + constructor() { + } }