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(List Tokens) : SyntaxNode(Tokens); public record BinaryExpressionSyntax(List Tokens, ExpressionSyntax Left, BinaryOperatorSyntax Operator, ExpressionSyntax Right) : ExpressionSyntax(Tokens); public record UnaryExpressionSyntax(List Tokens, UnaryOperatorSyntax Operator, ExpressionSyntax Operand) : ExpressionSyntax(Tokens); public record FuncCallSyntax(List Tokens, ExpressionSyntax Expression, List Parameters) : ExpressionSyntax(Tokens); public record DotFuncCallSyntax(List Tokens, string Name, ExpressionSyntax Target, List Parameters) : ExpressionSyntax(Tokens); public record LocalIdentifierSyntax(List Tokens, string Name) : ExpressionSyntax(Tokens); public record ModuleIdentifierSyntax(List Tokens, string Module, string Name) : ExpressionSyntax(Tokens); public record ArrayInitializerSyntax(List Tokens, ExpressionSyntax Capacity, TypeSyntax ElementType) : ExpressionSyntax(Tokens); public record ArrayIndexAccessSyntax(List Tokens, ExpressionSyntax Target, ExpressionSyntax Index) : ExpressionSyntax(Tokens); public record AddressOfSyntax(List Tokens, ExpressionSyntax Target) : ExpressionSyntax(Tokens); public record LiteralSyntax(List Tokens, string Value, LiteralKind Kind) : ExpressionSyntax(Tokens); public record StructFieldAccessSyntax(List Tokens, ExpressionSyntax Target, string Member) : ExpressionSyntax(Tokens); public record StructInitializerSyntax(List Tokens, TypeSyntax? StructType, Dictionary Initializers) : ExpressionSyntax(Tokens); public record DereferenceSyntax(List Tokens, ExpressionSyntax Target) : ExpressionSyntax(Tokens); public record SizeBuiltinSyntax(List Tokens, TypeSyntax Type) : ExpressionSyntax(Tokens); public record InterpretBuiltinSyntax(List Tokens, TypeSyntax Type, ExpressionSyntax Target) : ExpressionSyntax(Tokens); public record FloatToIntBuiltinSyntax(List Tokens, TypeSyntax Type, ExpressionSyntax Value) : ExpressionSyntax(Tokens);