...
This commit is contained in:
8
src/Nub.Lang.Syntax/Parsing/Expressions/AddressOfNode.cs
Normal file
8
src/Nub.Lang.Syntax/Parsing/Expressions/AddressOfNode.cs
Normal file
@@ -0,0 +1,8 @@
|
||||
using Nub.Lang.Syntax.Tokenization;
|
||||
|
||||
namespace Nub.Lang.Syntax.Parsing.Expressions;
|
||||
|
||||
public class AddressOfNode(IReadOnlyList<Token> tokens, LValueNode expression) : ExpressionNode(tokens)
|
||||
{
|
||||
public LValueNode Expression { get; } = expression;
|
||||
}
|
||||
13
src/Nub.Lang.Syntax/Parsing/Expressions/AnonymousFuncNode.cs
Normal file
13
src/Nub.Lang.Syntax/Parsing/Expressions/AnonymousFuncNode.cs
Normal file
@@ -0,0 +1,13 @@
|
||||
using Nub.Lang.Syntax.Parsing.Definitions;
|
||||
using Nub.Lang.Syntax.Parsing.Statements;
|
||||
using Nub.Lang.Syntax.Tokenization;
|
||||
using Nub.Lang.Syntax.Typing;
|
||||
|
||||
namespace Nub.Lang.Syntax.Parsing.Expressions;
|
||||
|
||||
public class AnonymousFuncNode(IReadOnlyList<Token> tokens, List<FuncParameter> parameters, BlockNode body, NubType returnType) : ExpressionNode(tokens)
|
||||
{
|
||||
public List<FuncParameter> Parameters { get; } = parameters;
|
||||
public BlockNode Body { get; } = body;
|
||||
public NubType ReturnType { get; } = returnType;
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
using Nub.Lang.Syntax.Tokenization;
|
||||
|
||||
namespace Nub.Lang.Syntax.Parsing.Expressions;
|
||||
|
||||
public class ArrayIndexAccessNode(IReadOnlyList<Token> tokens, ExpressionNode array, ExpressionNode index) : LValueNode(tokens)
|
||||
{
|
||||
public ExpressionNode Array { get; } = array;
|
||||
public ExpressionNode Index { get; } = index;
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
using Nub.Lang.Syntax.Tokenization;
|
||||
using Nub.Lang.Syntax.Typing;
|
||||
|
||||
namespace Nub.Lang.Syntax.Parsing.Expressions;
|
||||
|
||||
public class ArrayInitializerNode(IReadOnlyList<Token> tokens, ExpressionNode capacity, NubType elementType) : ExpressionNode(tokens)
|
||||
{
|
||||
public ExpressionNode Capacity { get; } = capacity;
|
||||
public NubType ElementType { get; } = elementType;
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
using Nub.Lang.Syntax.Tokenization;
|
||||
|
||||
namespace Nub.Lang.Syntax.Parsing.Expressions;
|
||||
|
||||
public class BinaryExpressionNode(IReadOnlyList<Token> tokens, ExpressionNode left, BinaryExpressionOperator @operator, ExpressionNode right) : ExpressionNode(tokens)
|
||||
{
|
||||
public ExpressionNode Left { get; } = left;
|
||||
public BinaryExpressionOperator Operator { get; } = @operator;
|
||||
public ExpressionNode Right { get; } = right;
|
||||
}
|
||||
|
||||
public enum BinaryExpressionOperator
|
||||
{
|
||||
Equal,
|
||||
NotEqual,
|
||||
GreaterThan,
|
||||
GreaterThanOrEqual,
|
||||
LessThan,
|
||||
LessThanOrEqual,
|
||||
Plus,
|
||||
Minus,
|
||||
Multiply,
|
||||
Divide
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
using Nub.Lang.Syntax.Tokenization;
|
||||
|
||||
namespace Nub.Lang.Syntax.Parsing.Expressions;
|
||||
|
||||
public class DereferenceNode(IReadOnlyList<Token> tokens, ExpressionNode expression) : LValueNode(tokens)
|
||||
{
|
||||
public ExpressionNode Expression { get; } = expression;
|
||||
}
|
||||
16
src/Nub.Lang.Syntax/Parsing/Expressions/ExpressionNode.cs
Normal file
16
src/Nub.Lang.Syntax/Parsing/Expressions/ExpressionNode.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
using Nub.Lang.Syntax.Tokenization;
|
||||
using Nub.Lang.Syntax.Typing;
|
||||
|
||||
namespace Nub.Lang.Syntax.Parsing.Expressions;
|
||||
|
||||
public abstract class ExpressionNode(IReadOnlyList<Token> tokens) : Node(tokens)
|
||||
{
|
||||
private NubType? _type;
|
||||
public NubType Type
|
||||
{
|
||||
get => _type ?? throw new Exception("Tried to access expression type before type was populated");
|
||||
set => _type = value;
|
||||
}
|
||||
}
|
||||
|
||||
public abstract class LValueNode(IReadOnlyList<Token> tokens) : ExpressionNode(tokens);
|
||||
@@ -0,0 +1,10 @@
|
||||
using Nub.Lang.Syntax.Tokenization;
|
||||
using Nub.Lang.Syntax.Typing;
|
||||
|
||||
namespace Nub.Lang.Syntax.Parsing.Expressions;
|
||||
|
||||
public class FixedArrayInitializerNode(IReadOnlyList<Token> tokens, NubType elementType, int capacity) : ExpressionNode(tokens)
|
||||
{
|
||||
public NubType ElementType { get; } = elementType;
|
||||
public int Capacity { get; } = capacity;
|
||||
}
|
||||
11
src/Nub.Lang.Syntax/Parsing/Expressions/FuncCallNode.cs
Normal file
11
src/Nub.Lang.Syntax/Parsing/Expressions/FuncCallNode.cs
Normal file
@@ -0,0 +1,11 @@
|
||||
using Nub.Lang.Syntax.Tokenization;
|
||||
|
||||
namespace Nub.Lang.Syntax.Parsing.Expressions;
|
||||
|
||||
public class FuncCallNode(IReadOnlyList<Token> tokens, ExpressionNode expression, List<ExpressionNode> parameters) : ExpressionNode(tokens)
|
||||
{
|
||||
public ExpressionNode Expression = expression;
|
||||
public List<ExpressionNode> Parameters { get; } = parameters;
|
||||
|
||||
public override string ToString() => $"{Expression}({string.Join(", ", Parameters)})";
|
||||
}
|
||||
12
src/Nub.Lang.Syntax/Parsing/Expressions/IdentifierNode.cs
Normal file
12
src/Nub.Lang.Syntax/Parsing/Expressions/IdentifierNode.cs
Normal file
@@ -0,0 +1,12 @@
|
||||
using Nub.Lang.Common;
|
||||
using Nub.Lang.Syntax.Tokenization;
|
||||
|
||||
namespace Nub.Lang.Syntax.Parsing.Expressions;
|
||||
|
||||
public class IdentifierNode(IReadOnlyList<Token> tokens, Optional<string> @namespace, string name) : LValueNode(tokens)
|
||||
{
|
||||
public Optional<string> Namespace { get; } = @namespace;
|
||||
public string Name { get; } = name;
|
||||
|
||||
public override string ToString() => Namespace.HasValue ? $"{Namespace.Value}::{Name}" : Name;
|
||||
}
|
||||
9
src/Nub.Lang.Syntax/Parsing/Expressions/LiteralNode.cs
Normal file
9
src/Nub.Lang.Syntax/Parsing/Expressions/LiteralNode.cs
Normal file
@@ -0,0 +1,9 @@
|
||||
using Nub.Lang.Syntax.Tokenization;
|
||||
|
||||
namespace Nub.Lang.Syntax.Parsing.Expressions;
|
||||
|
||||
public class LiteralNode(IReadOnlyList<Token> tokens, string literal, LiteralKind kind) : ExpressionNode(tokens)
|
||||
{
|
||||
public string Literal { get; } = literal;
|
||||
public LiteralKind Kind { get; } = kind;
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
using Nub.Lang.Syntax.Tokenization;
|
||||
|
||||
namespace Nub.Lang.Syntax.Parsing.Expressions;
|
||||
|
||||
public class MemberAccessNode(IReadOnlyList<Token> tokens, ExpressionNode expression, string member) : LValueNode(tokens)
|
||||
{
|
||||
public ExpressionNode Expression { get; } = expression;
|
||||
public string Member { get; } = member;
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
using Nub.Lang.Syntax.Tokenization;
|
||||
using Nub.Lang.Syntax.Typing;
|
||||
|
||||
namespace Nub.Lang.Syntax.Parsing.Expressions;
|
||||
|
||||
public class StructInitializerNode(IReadOnlyList<Token> tokens, NubStructType structType, Dictionary<string, ExpressionNode> initializers) : ExpressionNode(tokens)
|
||||
{
|
||||
public NubStructType StructType { get; } = structType;
|
||||
public Dictionary<string, ExpressionNode> Initializers { get; } = initializers;
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
using Nub.Lang.Syntax.Tokenization;
|
||||
|
||||
namespace Nub.Lang.Syntax.Parsing.Expressions;
|
||||
|
||||
public class UnaryExpressionNode(IReadOnlyList<Token> tokens, UnaryExpressionOperator @operator, ExpressionNode operand) : ExpressionNode(tokens)
|
||||
{
|
||||
public UnaryExpressionOperator Operator { get; } = @operator;
|
||||
public ExpressionNode Operand { get; } = operand;
|
||||
}
|
||||
|
||||
public enum UnaryExpressionOperator
|
||||
{
|
||||
Negate,
|
||||
Invert
|
||||
}
|
||||
Reference in New Issue
Block a user