using NubLang.Tokenization; namespace NubLang.Parsing.Syntax; public enum UnaryOperatorSyntax { Negate, Invert } public enum BinaryOperatorSyntax { Equal, NotEqual, GreaterThan, GreaterThanOrEqual, LessThan, LessThanOrEqual, LogicalAnd, LogicalOr, Plus, Minus, Multiply, Divide, Modulo, LeftShift, RightShift, BitwiseAnd, BitwiseXor, BitwiseOr, } public abstract record ExpressionSyntax(IEnumerable Tokens) : SyntaxNode(Tokens); public record BinaryExpressionSyntax(IEnumerable Tokens, ExpressionSyntax Left, BinaryOperatorSyntax Operator, ExpressionSyntax Right) : ExpressionSyntax(Tokens); public record UnaryExpressionSyntax(IEnumerable Tokens, UnaryOperatorSyntax Operator, ExpressionSyntax Operand) : ExpressionSyntax(Tokens); public record FuncCallSyntax(IEnumerable Tokens, ExpressionSyntax Expression, List Parameters) : ExpressionSyntax(Tokens); public record DotFuncCallSyntax(IEnumerable Tokens, string Name, ExpressionSyntax Target, List Parameters) : ExpressionSyntax(Tokens); public record LocalIdentifierSyntax(IEnumerable Tokens, string Name) : ExpressionSyntax(Tokens); public record ModuleIdentifierSyntax(IEnumerable Tokens, string Module, string Name) : ExpressionSyntax(Tokens); public record ArrayInitializerSyntax(IEnumerable Tokens, ExpressionSyntax Capacity, TypeSyntax ElementType) : ExpressionSyntax(Tokens); public record ArrayIndexAccessSyntax(IEnumerable Tokens, ExpressionSyntax Target, ExpressionSyntax Index) : ExpressionSyntax(Tokens); public record AddressOfSyntax(IEnumerable Tokens, ExpressionSyntax Target) : ExpressionSyntax(Tokens); public record LiteralSyntax(IEnumerable Tokens, string Value, LiteralKind Kind) : ExpressionSyntax(Tokens); public record StructFieldAccessSyntax(IEnumerable Tokens, ExpressionSyntax Target, string Member) : ExpressionSyntax(Tokens); public record StructInitializerSyntax(IEnumerable Tokens, Optional StructType, Dictionary Initializers) : ExpressionSyntax(Tokens); public record DereferenceSyntax(IEnumerable Tokens, ExpressionSyntax Target) : ExpressionSyntax(Tokens); public record SizeCompilerMacroSyntax(IEnumerable Tokens, TypeSyntax Type) : ExpressionSyntax(Tokens); public record InterpretCompilerMacroSyntax(IEnumerable Tokens, TypeSyntax Type, ExpressionSyntax Target) : ExpressionSyntax(Tokens);