This commit is contained in:
nub31
2025-06-12 23:52:52 +02:00
parent f932fc0ca4
commit 68d86d54ee
61 changed files with 214 additions and 155 deletions

View File

@@ -0,0 +1,10 @@
using Nub.Lang.Syntax.Parsing.Expressions;
using Nub.Lang.Syntax.Tokenization;
namespace Nub.Lang.Syntax.Parsing.Statements;
public class ArrayIndexAssignmentNode(IReadOnlyList<Token> tokens, ArrayIndexAccessNode arrayIndexAccess, ExpressionNode value) : StatementNode(tokens)
{
public ArrayIndexAccessNode ArrayIndexAccess { get; } = arrayIndexAccess;
public ExpressionNode Value { get; } = value;
}

View File

@@ -0,0 +1,8 @@
using Nub.Lang.Syntax.Tokenization;
namespace Nub.Lang.Syntax.Parsing.Statements;
public class BlockNode(IReadOnlyList<Token> tokens, List<StatementNode> statements) : Node(tokens)
{
public List<StatementNode> Statements { get; } = statements;
}

View File

@@ -0,0 +1,5 @@
using Nub.Lang.Syntax.Tokenization;
namespace Nub.Lang.Syntax.Parsing.Statements;
public class BreakNode(IReadOnlyList<Token> tokens) : StatementNode(tokens);

View File

@@ -0,0 +1,5 @@
using Nub.Lang.Syntax.Tokenization;
namespace Nub.Lang.Syntax.Parsing.Statements;
public class ContinueNode(IReadOnlyList<Token> tokens) : StatementNode(tokens);

View File

@@ -0,0 +1,10 @@
using Nub.Lang.Syntax.Parsing.Expressions;
using Nub.Lang.Syntax.Tokenization;
namespace Nub.Lang.Syntax.Parsing.Statements;
public class DereferenceAssignmentNode(IReadOnlyList<Token> tokens, DereferenceNode dereference, ExpressionNode value) : StatementNode(tokens)
{
public DereferenceNode Dereference { get; } = dereference;
public ExpressionNode Value { get; } = value;
}

View File

@@ -0,0 +1,12 @@
using Nub.Lang.Common;
using Nub.Lang.Syntax.Parsing.Expressions;
using Nub.Lang.Syntax.Tokenization;
namespace Nub.Lang.Syntax.Parsing.Statements;
public class IfNode(IReadOnlyList<Token> tokens, ExpressionNode condition, BlockNode body, Optional<Variant<IfNode, BlockNode>> @else) : StatementNode(tokens)
{
public ExpressionNode Condition { get; } = condition;
public BlockNode Body { get; } = body;
public Optional<Variant<IfNode, BlockNode>> Else { get; } = @else;
}

View File

@@ -0,0 +1,10 @@
using Nub.Lang.Syntax.Parsing.Expressions;
using Nub.Lang.Syntax.Tokenization;
namespace Nub.Lang.Syntax.Parsing.Statements;
public class MemberAssignmentNode(IReadOnlyList<Token> tokens, MemberAccessNode expression, ExpressionNode value) : StatementNode(tokens)
{
public MemberAccessNode MemberAccess { get; } = expression;
public ExpressionNode Value { get; } = value;
}

View File

@@ -0,0 +1,10 @@
using Nub.Lang.Common;
using Nub.Lang.Syntax.Parsing.Expressions;
using Nub.Lang.Syntax.Tokenization;
namespace Nub.Lang.Syntax.Parsing.Statements;
public class ReturnNode(IReadOnlyList<Token> tokens, Optional<ExpressionNode> value) : StatementNode(tokens)
{
public Optional<ExpressionNode> Value { get; } = value;
}

View File

@@ -0,0 +1,9 @@
using Nub.Lang.Syntax.Parsing.Expressions;
using Nub.Lang.Syntax.Tokenization;
namespace Nub.Lang.Syntax.Parsing.Statements;
public class StatementExpressionNode(IReadOnlyList<Token> tokens, ExpressionNode expression) : StatementNode(tokens)
{
public ExpressionNode Expression { get; } = expression;
}

View File

@@ -0,0 +1,5 @@
using Nub.Lang.Syntax.Tokenization;
namespace Nub.Lang.Syntax.Parsing.Statements;
public abstract class StatementNode(IReadOnlyList<Token> tokens) : Node(tokens);

View File

@@ -0,0 +1,10 @@
using Nub.Lang.Syntax.Parsing.Expressions;
using Nub.Lang.Syntax.Tokenization;
namespace Nub.Lang.Syntax.Parsing.Statements;
public class VariableAssignmentNode(IReadOnlyList<Token> tokens, IdentifierNode identifier, ExpressionNode value) : StatementNode(tokens)
{
public IdentifierNode Identifier { get; } = identifier;
public ExpressionNode Value { get; } = value;
}

View File

@@ -0,0 +1,13 @@
using Nub.Lang.Common;
using Nub.Lang.Syntax.Parsing.Expressions;
using Nub.Lang.Syntax.Tokenization;
using Nub.Lang.Syntax.Typing;
namespace Nub.Lang.Syntax.Parsing.Statements;
public class VariableDeclarationNode(IReadOnlyList<Token> tokens, string name, Optional<NubType> explicitType, Optional<ExpressionNode> value) : StatementNode(tokens)
{
public string Name { get; } = name;
public Optional<NubType> ExplicitType { get; } = explicitType;
public Optional<ExpressionNode> Value { get; } = value;
}

View File

@@ -0,0 +1,10 @@
using Nub.Lang.Syntax.Parsing.Expressions;
using Nub.Lang.Syntax.Tokenization;
namespace Nub.Lang.Syntax.Parsing.Statements;
public class WhileNode(IReadOnlyList<Token> tokens, ExpressionNode condition, BlockNode body) : StatementNode(tokens)
{
public ExpressionNode Condition { get; } = condition;
public BlockNode Body { get; } = body;
}