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