using NubLang.Tokenization; namespace NubLang.Parsing.Syntax; public abstract record StatementSyntax(List Tokens) : SyntaxNode(Tokens); public record BlockSyntax(List Tokens, List Statements) : StatementSyntax(Tokens); public record StatementExpressionSyntax(List Tokens, ExpressionSyntax Expression) : StatementSyntax(Tokens); public record ReturnSyntax(List Tokens, ExpressionSyntax? Value) : StatementSyntax(Tokens); public record AssignmentSyntax(List Tokens, ExpressionSyntax Target, ExpressionSyntax Value) : StatementSyntax(Tokens); public record IfSyntax(List Tokens, ExpressionSyntax Condition, BlockSyntax Body, Variant? Else) : StatementSyntax(Tokens); public record VariableDeclarationSyntax(List Tokens, string Name, TypeSyntax? ExplicitType, ExpressionSyntax? Assignment) : StatementSyntax(Tokens); public record ContinueSyntax(List Tokens) : StatementSyntax(Tokens); public record BreakSyntax(List Tokens) : StatementSyntax(Tokens); public record DeferSyntax(List Tokens, StatementSyntax Statement) : StatementSyntax(Tokens); public record WhileSyntax(List Tokens, ExpressionSyntax Condition, BlockSyntax Body) : StatementSyntax(Tokens);