From 68d86d54ee4ac7cb1871093f02841a0d1b5ffa6a Mon Sep 17 00:00:00 2001 From: nub31 Date: Thu, 12 Jun 2025 23:52:52 +0200 Subject: [PATCH] ... --- build.sh | 2 -- run.sh | 3 +++ src/Nub.Lang.CLI/Nub.Lang.CLI.csproj | 3 ++- src/Nub.Lang.CLI/Program.cs | 18 +++++++----------- .../Nub.Lang.Common.csproj} | 1 - src/{Nub.Lang => Nub.Lang.Common}/Optional.cs | 2 +- src/{Nub.Lang => Nub.Lang.Common}/Variant.cs | 2 +- .../Nub.Lang.Generation.csproj | 14 ++++++++++++++ .../QBE}/QBEGenerator.cs | 15 ++++++++------- .../DefinitionTable.cs | 7 ++++--- .../Diagnostics/ConsoleColors.cs | 7 +++---- .../Diagnostics/Diagnostic.cs | 6 +++--- .../Diagnostics/DiagnosticsResult.cs | 2 +- src/Nub.Lang.Syntax/Nub.Lang.Syntax.csproj | 14 ++++++++++++++ .../Parsing/CompilationUnit.cs | 4 ++-- .../Parsing/Definitions/DefinitionNode.cs | 5 +++-- .../Parsing/Definitions/FuncDefinitionNode.cs | 9 +++++---- .../Definitions/StructDefinitionNode.cs | 9 +++++---- .../Parsing/Expressions/AddressOfNode.cs | 4 ++-- .../Parsing/Expressions/AnonymousFuncNode.cs | 10 +++++----- .../Expressions/ArrayIndexAccessNode.cs | 4 ++-- .../Expressions/ArrayInitializerNode.cs | 6 +++--- .../Expressions/BinaryExpressionNode.cs | 4 ++-- .../Parsing/Expressions/DereferenceNode.cs | 4 ++-- .../Parsing/Expressions/ExpressionNode.cs | 6 +++--- .../Expressions/FixedArrayInitializerNode.cs | 6 +++--- .../Parsing/Expressions/FuncCallNode.cs | 4 ++-- .../Parsing/Expressions/IdentifierNode.cs | 5 +++-- .../Parsing/Expressions/LiteralNode.cs | 4 ++-- .../Parsing/Expressions/MemberAccessNode.cs | 4 ++-- .../Expressions/StructInitializerNode.cs | 6 +++--- .../Parsing/Expressions/UnaryExpressionNode.cs | 4 ++-- .../Parsing/Node.cs | 4 ++-- .../Parsing/Parser.cs | 15 ++++++++------- .../Statements/ArrayIndexAssignmentNode.cs | 6 +++--- .../Parsing/Statements/BlockNode.cs | 4 ++-- .../Parsing/Statements/BreakNode.cs | 5 +++++ .../Parsing/Statements/ContinueNode.cs | 5 +++++ .../Statements/DereferenceAssignmentNode.cs | 6 +++--- .../Parsing/Statements/IfNode.cs | 7 ++++--- .../Parsing/Statements/MemberAssignmentNode.cs | 6 +++--- .../Parsing/Statements/ReturnNode.cs | 7 ++++--- .../Statements/StatementExpressionNode.cs | 6 +++--- .../Parsing/Statements/StatementNode.cs | 5 +++++ .../Statements/VariableAssignmentNode.cs | 6 +++--- .../Statements/VariableDeclarationNode.cs | 9 +++++---- .../Parsing/Statements/WhileNode.cs | 6 +++--- src/{Nub.Lang => Nub.Lang.Syntax}/Source.cs | 2 +- .../Tokenization}/DocumentationToken.cs | 4 +++- .../Tokenization}/IdentifierToken.cs | 4 +++- .../Tokenization}/LiteralToken.cs | 4 +++- .../Tokenization}/ModifierToken.cs | 4 +++- .../Tokenization}/SymbolToken.cs | 4 +++- .../Tokenization}/Token.cs | 4 +++- .../Tokenization/Tokenizer.cs} | 7 ++++--- .../Typing/NubType.cs | 2 +- .../Typing/TypeChecker.cs | 14 +++++++------- src/Nub.Lang.sln | 14 +++++++++++++- .../Frontend/Parsing/Statements/BreakNode.cs | 5 ----- .../Parsing/Statements/ContinueNode.cs | 5 ----- .../Parsing/Statements/StatementNode.cs | 5 ----- 61 files changed, 214 insertions(+), 155 deletions(-) delete mode 100755 build.sh create mode 100755 run.sh rename src/{Nub.Lang/Nub.Lang.csproj => Nub.Lang.Common/Nub.Lang.Common.csproj} (82%) rename src/{Nub.Lang => Nub.Lang.Common}/Optional.cs (98%) rename src/{Nub.Lang => Nub.Lang.Common}/Variant.cs (97%) create mode 100644 src/Nub.Lang.Generation/Nub.Lang.Generation.csproj rename src/{Nub.Lang/Frontend/Generation => Nub.Lang.Generation/QBE}/QBEGenerator.cs (99%) rename src/{Nub.Lang/Frontend => Nub.Lang.Syntax}/DefinitionTable.cs (90%) rename src/{Nub.Lang => Nub.Lang.Syntax}/Diagnostics/ConsoleColors.cs (97%) rename src/{Nub.Lang => Nub.Lang.Syntax}/Diagnostics/Diagnostic.cs (98%) rename src/{Nub.Lang => Nub.Lang.Syntax}/Diagnostics/DiagnosticsResult.cs (93%) create mode 100644 src/Nub.Lang.Syntax/Nub.Lang.Syntax.csproj rename src/{Nub.Lang/Frontend => Nub.Lang.Syntax}/Parsing/CompilationUnit.cs (70%) rename src/{Nub.Lang/Frontend => Nub.Lang.Syntax}/Parsing/Definitions/DefinitionNode.cs (70%) rename src/{Nub.Lang/Frontend => Nub.Lang.Syntax}/Parsing/Definitions/FuncDefinitionNode.cs (90%) rename src/{Nub.Lang/Frontend => Nub.Lang.Syntax}/Parsing/Definitions/StructDefinitionNode.cs (74%) rename src/{Nub.Lang/Frontend => Nub.Lang.Syntax}/Parsing/Expressions/AddressOfNode.cs (66%) rename src/{Nub.Lang/Frontend => Nub.Lang.Syntax}/Parsing/Expressions/AnonymousFuncNode.cs (61%) rename src/{Nub.Lang/Frontend => Nub.Lang.Syntax}/Parsing/Expressions/ArrayIndexAccessNode.cs (73%) rename src/{Nub.Lang/Frontend => Nub.Lang.Syntax}/Parsing/Expressions/ArrayInitializerNode.cs (68%) rename src/{Nub.Lang/Frontend => Nub.Lang.Syntax}/Parsing/Expressions/BinaryExpressionNode.cs (85%) rename src/{Nub.Lang/Frontend => Nub.Lang.Syntax}/Parsing/Expressions/DereferenceNode.cs (66%) rename src/{Nub.Lang/Frontend => Nub.Lang.Syntax}/Parsing/Expressions/ExpressionNode.cs (76%) rename src/{Nub.Lang/Frontend => Nub.Lang.Syntax}/Parsing/Expressions/FixedArrayInitializerNode.cs (67%) rename src/{Nub.Lang/Frontend => Nub.Lang.Syntax}/Parsing/Expressions/FuncCallNode.cs (80%) rename src/{Nub.Lang/Frontend => Nub.Lang.Syntax}/Parsing/Expressions/IdentifierNode.cs (74%) rename src/{Nub.Lang/Frontend => Nub.Lang.Syntax}/Parsing/Expressions/LiteralNode.cs (70%) rename src/{Nub.Lang/Frontend => Nub.Lang.Syntax}/Parsing/Expressions/MemberAccessNode.cs (72%) rename src/{Nub.Lang/Frontend => Nub.Lang.Syntax}/Parsing/Expressions/StructInitializerNode.cs (72%) rename src/{Nub.Lang/Frontend => Nub.Lang.Syntax}/Parsing/Expressions/UnaryExpressionNode.cs (79%) rename src/{Nub.Lang/Frontend => Nub.Lang.Syntax}/Parsing/Node.cs (62%) rename src/{Nub.Lang/Frontend => Nub.Lang.Syntax}/Parsing/Parser.cs (99%) rename src/{Nub.Lang/Frontend => Nub.Lang.Syntax}/Parsing/Statements/ArrayIndexAssignmentNode.cs (69%) rename src/{Nub.Lang/Frontend => Nub.Lang.Syntax}/Parsing/Statements/BlockNode.cs (66%) create mode 100644 src/Nub.Lang.Syntax/Parsing/Statements/BreakNode.cs create mode 100644 src/Nub.Lang.Syntax/Parsing/Statements/ContinueNode.cs rename src/{Nub.Lang/Frontend => Nub.Lang.Syntax}/Parsing/Statements/DereferenceAssignmentNode.cs (67%) rename src/{Nub.Lang/Frontend => Nub.Lang.Syntax}/Parsing/Statements/IfNode.cs (68%) rename src/{Nub.Lang/Frontend => Nub.Lang.Syntax}/Parsing/Statements/MemberAssignmentNode.cs (67%) rename src/{Nub.Lang/Frontend => Nub.Lang.Syntax}/Parsing/Statements/ReturnNode.cs (53%) rename src/{Nub.Lang/Frontend => Nub.Lang.Syntax}/Parsing/Statements/StatementExpressionNode.cs (58%) create mode 100644 src/Nub.Lang.Syntax/Parsing/Statements/StatementNode.cs rename src/{Nub.Lang/Frontend => Nub.Lang.Syntax}/Parsing/Statements/VariableAssignmentNode.cs (66%) rename src/{Nub.Lang/Frontend => Nub.Lang.Syntax}/Parsing/Statements/VariableDeclarationNode.cs (65%) rename src/{Nub.Lang/Frontend => Nub.Lang.Syntax}/Parsing/Statements/WhileNode.cs (63%) rename src/{Nub.Lang => Nub.Lang.Syntax}/Source.cs (99%) rename src/{Nub.Lang/Frontend/Lexing => Nub.Lang.Syntax/Tokenization}/DocumentationToken.cs (69%) rename src/{Nub.Lang/Frontend/Lexing => Nub.Lang.Syntax/Tokenization}/IdentifierToken.cs (63%) rename src/{Nub.Lang/Frontend/Lexing => Nub.Lang.Syntax/Tokenization}/LiteralToken.cs (78%) rename src/{Nub.Lang/Frontend/Lexing => Nub.Lang.Syntax/Tokenization}/ModifierToken.cs (73%) rename src/{Nub.Lang/Frontend/Lexing => Nub.Lang.Syntax/Tokenization}/SymbolToken.cs (90%) rename src/{Nub.Lang/Frontend/Lexing => Nub.Lang.Syntax/Tokenization}/Token.cs (57%) rename src/{Nub.Lang/Frontend/Lexing/Lexer.cs => Nub.Lang.Syntax/Tokenization/Tokenizer.cs} (98%) rename src/{Nub.Lang/Frontend => Nub.Lang.Syntax}/Typing/NubType.cs (99%) rename src/{Nub.Lang/Frontend => Nub.Lang.Syntax}/Typing/TypeChecker.cs (98%) delete mode 100644 src/Nub.Lang/Frontend/Parsing/Statements/BreakNode.cs delete mode 100644 src/Nub.Lang/Frontend/Parsing/Statements/ContinueNode.cs delete mode 100644 src/Nub.Lang/Frontend/Parsing/Statements/StatementNode.cs diff --git a/build.sh b/build.sh deleted file mode 100755 index 4799dcf..0000000 --- a/build.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -dotnet run --project src/Nub.Lang.CLI/ example \ No newline at end of file diff --git a/run.sh b/run.sh new file mode 100755 index 0000000..e9adf39 --- /dev/null +++ b/run.sh @@ -0,0 +1,3 @@ +#!/bin/bash +dotnet run --project src/Nub.Lang.CLI/ example +./bin/out \ No newline at end of file diff --git a/src/Nub.Lang.CLI/Nub.Lang.CLI.csproj b/src/Nub.Lang.CLI/Nub.Lang.CLI.csproj index d5213cd..b06150f 100644 --- a/src/Nub.Lang.CLI/Nub.Lang.CLI.csproj +++ b/src/Nub.Lang.CLI/Nub.Lang.CLI.csproj @@ -10,7 +10,8 @@ - + + diff --git a/src/Nub.Lang.CLI/Program.cs b/src/Nub.Lang.CLI/Program.cs index 23df91a..f72995f 100644 --- a/src/Nub.Lang.CLI/Program.cs +++ b/src/Nub.Lang.CLI/Program.cs @@ -1,11 +1,11 @@ using System.Diagnostics; using System.Reflection; -using Nub.Lang; -using Nub.Lang.Frontend; -using Nub.Lang.Frontend.Generation; -using Nub.Lang.Frontend.Lexing; -using Nub.Lang.Frontend.Parsing; -using Nub.Lang.Frontend.Typing; +using Nub.Lang.Common; +using Nub.Lang.Generation.QBE; +using Nub.Lang.Syntax; +using Nub.Lang.Syntax.Parsing; +using Nub.Lang.Syntax.Tokenization; +using Nub.Lang.Syntax.Typing; const string BIN_DIR = "bin"; const string BIN_INT_DIR = "bin-int"; @@ -48,7 +48,7 @@ foreach (var file in Directory.EnumerateFiles(srcDir, "*.nub", SearchOption.AllD var content = File.ReadAllText(file); var sourceText = new SourceText(file, content); - var tokenizeResult = Lexer.Tokenize(sourceText); + var tokenizeResult = Tokenizer.Tokenize(sourceText); tokenizeResult.PrintAllDiagnostics(); error = error || tokenizeResult.HasErrors; @@ -96,12 +96,10 @@ foreach (var compilationUnit in compilationUnits) var asmPath = Path.Combine(BIN_INT_DIR, $"{baseOutputName}.s"); await File.WriteAllTextAsync(asmPath, assemblyCode); - Console.Out.WriteLine($"Generated: {asmPath}"); var objPath = Path.Combine(BIN_INT_DIR, $"{baseOutputName}.o"); await InvokeAssembler(asmPath, objPath); objectFiles.Add(objPath); - Console.Out.WriteLine($"Assembled: {objPath}"); } catch (Exception ex) { @@ -135,7 +133,6 @@ foreach (var resourceName in runtimeResources) await InvokeAssembler(asmPath, objPath); objectFiles.Add(objPath); - Console.Out.WriteLine($"Runtime assembled: {objPath}"); File.Delete(asmPath); } @@ -150,7 +147,6 @@ try { var outputPath = Path.Combine(BIN_DIR, "out"); await InvokeLinker(objectFiles, outputPath); - Console.Out.WriteLine($"Linked executable: {outputPath}"); } catch (Exception ex) { diff --git a/src/Nub.Lang/Nub.Lang.csproj b/src/Nub.Lang.Common/Nub.Lang.Common.csproj similarity index 82% rename from src/Nub.Lang/Nub.Lang.csproj rename to src/Nub.Lang.Common/Nub.Lang.Common.csproj index b682a68..17b910f 100644 --- a/src/Nub.Lang/Nub.Lang.csproj +++ b/src/Nub.Lang.Common/Nub.Lang.Common.csproj @@ -4,7 +4,6 @@ net9.0 enable enable - true diff --git a/src/Nub.Lang/Optional.cs b/src/Nub.Lang.Common/Optional.cs similarity index 98% rename from src/Nub.Lang/Optional.cs rename to src/Nub.Lang.Common/Optional.cs index 0824254..7e0a782 100644 --- a/src/Nub.Lang/Optional.cs +++ b/src/Nub.Lang.Common/Optional.cs @@ -1,6 +1,6 @@ using System.Diagnostics.CodeAnalysis; -namespace Nub.Lang; +namespace Nub.Lang.Common; public readonly struct Optional { diff --git a/src/Nub.Lang/Variant.cs b/src/Nub.Lang.Common/Variant.cs similarity index 97% rename from src/Nub.Lang/Variant.cs rename to src/Nub.Lang.Common/Variant.cs index 02b7347..d947ff2 100644 --- a/src/Nub.Lang/Variant.cs +++ b/src/Nub.Lang.Common/Variant.cs @@ -1,4 +1,4 @@ -namespace Nub.Lang; +namespace Nub.Lang.Common; public readonly struct Variant where T1 : notnull where T2 : notnull { diff --git a/src/Nub.Lang.Generation/Nub.Lang.Generation.csproj b/src/Nub.Lang.Generation/Nub.Lang.Generation.csproj new file mode 100644 index 0000000..2a78ccc --- /dev/null +++ b/src/Nub.Lang.Generation/Nub.Lang.Generation.csproj @@ -0,0 +1,14 @@ + + + + net9.0 + enable + enable + + + + + + + + diff --git a/src/Nub.Lang/Frontend/Generation/QBEGenerator.cs b/src/Nub.Lang.Generation/QBE/QBEGenerator.cs similarity index 99% rename from src/Nub.Lang/Frontend/Generation/QBEGenerator.cs rename to src/Nub.Lang.Generation/QBE/QBEGenerator.cs index ab6111b..9af5317 100644 --- a/src/Nub.Lang/Frontend/Generation/QBEGenerator.cs +++ b/src/Nub.Lang.Generation/QBE/QBEGenerator.cs @@ -1,14 +1,15 @@ using System.Diagnostics; using System.Globalization; using System.Text; -using Nub.Lang.Frontend.Lexing; -using Nub.Lang.Frontend.Parsing; -using Nub.Lang.Frontend.Parsing.Definitions; -using Nub.Lang.Frontend.Parsing.Expressions; -using Nub.Lang.Frontend.Parsing.Statements; -using Nub.Lang.Frontend.Typing; +using Nub.Lang.Syntax; +using Nub.Lang.Syntax.Parsing; +using Nub.Lang.Syntax.Parsing.Definitions; +using Nub.Lang.Syntax.Parsing.Expressions; +using Nub.Lang.Syntax.Parsing.Statements; +using Nub.Lang.Syntax.Tokenization; +using Nub.Lang.Syntax.Typing; -namespace Nub.Lang.Frontend.Generation; +namespace Nub.Lang.Generation.QBE; public static class QBEGenerator { diff --git a/src/Nub.Lang/Frontend/DefinitionTable.cs b/src/Nub.Lang.Syntax/DefinitionTable.cs similarity index 90% rename from src/Nub.Lang/Frontend/DefinitionTable.cs rename to src/Nub.Lang.Syntax/DefinitionTable.cs index edb0615..830c85e 100644 --- a/src/Nub.Lang/Frontend/DefinitionTable.cs +++ b/src/Nub.Lang.Syntax/DefinitionTable.cs @@ -1,7 +1,8 @@ -using Nub.Lang.Frontend.Parsing; -using Nub.Lang.Frontend.Parsing.Definitions; +using Nub.Lang.Common; +using Nub.Lang.Syntax.Parsing; +using Nub.Lang.Syntax.Parsing.Definitions; -namespace Nub.Lang.Frontend; +namespace Nub.Lang.Syntax; public class DefinitionTable { diff --git a/src/Nub.Lang/Diagnostics/ConsoleColors.cs b/src/Nub.Lang.Syntax/Diagnostics/ConsoleColors.cs similarity index 97% rename from src/Nub.Lang/Diagnostics/ConsoleColors.cs rename to src/Nub.Lang.Syntax/Diagnostics/ConsoleColors.cs index c1d05a0..a2f5128 100644 --- a/src/Nub.Lang/Diagnostics/ConsoleColors.cs +++ b/src/Nub.Lang.Syntax/Diagnostics/ConsoleColors.cs @@ -1,8 +1,7 @@ using System.Text; -using Nub.Lang.Frontend.Lexing; -using Nub.Lang.Frontend.Typing; +using Nub.Lang.Syntax.Tokenization; -namespace Nub.Lang.Diagnostics; +namespace Nub.Lang.Syntax.Diagnostics; public static class ConsoleColors { @@ -131,7 +130,7 @@ public static class ConsoleColors public static string ColorizeSource(string source) { var sourceText = new SourceText(string.Empty, source); - var tokens = Lexer.Tokenize(sourceText).Value; + var tokens = Tokenizer.Tokenize(sourceText).Value; var result = new StringBuilder(); var lastCharIndex = 0; diff --git a/src/Nub.Lang/Diagnostics/Diagnostic.cs b/src/Nub.Lang.Syntax/Diagnostics/Diagnostic.cs similarity index 98% rename from src/Nub.Lang/Diagnostics/Diagnostic.cs rename to src/Nub.Lang.Syntax/Diagnostics/Diagnostic.cs index b6b151a..cb2781d 100644 --- a/src/Nub.Lang/Diagnostics/Diagnostic.cs +++ b/src/Nub.Lang.Syntax/Diagnostics/Diagnostic.cs @@ -1,8 +1,8 @@ using System.Text; -using Nub.Lang.Frontend.Lexing; -using Nub.Lang.Frontend.Parsing; +using Nub.Lang.Syntax.Parsing; +using Nub.Lang.Syntax.Tokenization; -namespace Nub.Lang.Diagnostics; +namespace Nub.Lang.Syntax.Diagnostics; public class Diagnostic { diff --git a/src/Nub.Lang/Diagnostics/DiagnosticsResult.cs b/src/Nub.Lang.Syntax/Diagnostics/DiagnosticsResult.cs similarity index 93% rename from src/Nub.Lang/Diagnostics/DiagnosticsResult.cs rename to src/Nub.Lang.Syntax/Diagnostics/DiagnosticsResult.cs index f1c761e..48d8786 100644 --- a/src/Nub.Lang/Diagnostics/DiagnosticsResult.cs +++ b/src/Nub.Lang.Syntax/Diagnostics/DiagnosticsResult.cs @@ -1,4 +1,4 @@ -namespace Nub.Lang.Diagnostics; +namespace Nub.Lang.Syntax.Diagnostics; public class DiagnosticsResult(List diagnostics) { diff --git a/src/Nub.Lang.Syntax/Nub.Lang.Syntax.csproj b/src/Nub.Lang.Syntax/Nub.Lang.Syntax.csproj new file mode 100644 index 0000000..ecd1e16 --- /dev/null +++ b/src/Nub.Lang.Syntax/Nub.Lang.Syntax.csproj @@ -0,0 +1,14 @@ + + + + net9.0 + enable + enable + true + + + + + + + diff --git a/src/Nub.Lang/Frontend/Parsing/CompilationUnit.cs b/src/Nub.Lang.Syntax/Parsing/CompilationUnit.cs similarity index 70% rename from src/Nub.Lang/Frontend/Parsing/CompilationUnit.cs rename to src/Nub.Lang.Syntax/Parsing/CompilationUnit.cs index 52247f0..80eb523 100644 --- a/src/Nub.Lang/Frontend/Parsing/CompilationUnit.cs +++ b/src/Nub.Lang.Syntax/Parsing/CompilationUnit.cs @@ -1,6 +1,6 @@ -using Nub.Lang.Frontend.Parsing.Definitions; +using Nub.Lang.Syntax.Parsing.Definitions; -namespace Nub.Lang.Frontend.Parsing; +namespace Nub.Lang.Syntax.Parsing; public class CompilationUnit(string @namespace, List definitions) { diff --git a/src/Nub.Lang/Frontend/Parsing/Definitions/DefinitionNode.cs b/src/Nub.Lang.Syntax/Parsing/Definitions/DefinitionNode.cs similarity index 70% rename from src/Nub.Lang/Frontend/Parsing/Definitions/DefinitionNode.cs rename to src/Nub.Lang.Syntax/Parsing/Definitions/DefinitionNode.cs index 13a47f9..8a7470e 100644 --- a/src/Nub.Lang/Frontend/Parsing/Definitions/DefinitionNode.cs +++ b/src/Nub.Lang.Syntax/Parsing/Definitions/DefinitionNode.cs @@ -1,6 +1,7 @@ -using Nub.Lang.Frontend.Lexing; +using Nub.Lang.Common; +using Nub.Lang.Syntax.Tokenization; -namespace Nub.Lang.Frontend.Parsing.Definitions; +namespace Nub.Lang.Syntax.Parsing.Definitions; public abstract class DefinitionNode(IReadOnlyList tokens, Optional documentation, string @namespace) : Node(tokens) { diff --git a/src/Nub.Lang/Frontend/Parsing/Definitions/FuncDefinitionNode.cs b/src/Nub.Lang.Syntax/Parsing/Definitions/FuncDefinitionNode.cs similarity index 90% rename from src/Nub.Lang/Frontend/Parsing/Definitions/FuncDefinitionNode.cs rename to src/Nub.Lang.Syntax/Parsing/Definitions/FuncDefinitionNode.cs index bd83b98..e32f502 100644 --- a/src/Nub.Lang/Frontend/Parsing/Definitions/FuncDefinitionNode.cs +++ b/src/Nub.Lang.Syntax/Parsing/Definitions/FuncDefinitionNode.cs @@ -1,8 +1,9 @@ -using Nub.Lang.Frontend.Lexing; -using Nub.Lang.Frontend.Parsing.Statements; -using Nub.Lang.Frontend.Typing; +using Nub.Lang.Common; +using Nub.Lang.Syntax.Parsing.Statements; +using Nub.Lang.Syntax.Tokenization; +using Nub.Lang.Syntax.Typing; -namespace Nub.Lang.Frontend.Parsing.Definitions; +namespace Nub.Lang.Syntax.Parsing.Definitions; public class FuncParameter(string name, NubType type) { diff --git a/src/Nub.Lang/Frontend/Parsing/Definitions/StructDefinitionNode.cs b/src/Nub.Lang.Syntax/Parsing/Definitions/StructDefinitionNode.cs similarity index 74% rename from src/Nub.Lang/Frontend/Parsing/Definitions/StructDefinitionNode.cs rename to src/Nub.Lang.Syntax/Parsing/Definitions/StructDefinitionNode.cs index 09bb11a..a039e2e 100644 --- a/src/Nub.Lang/Frontend/Parsing/Definitions/StructDefinitionNode.cs +++ b/src/Nub.Lang.Syntax/Parsing/Definitions/StructDefinitionNode.cs @@ -1,8 +1,9 @@ -using Nub.Lang.Frontend.Lexing; -using Nub.Lang.Frontend.Parsing.Expressions; -using Nub.Lang.Frontend.Typing; +using Nub.Lang.Common; +using Nub.Lang.Syntax.Parsing.Expressions; +using Nub.Lang.Syntax.Tokenization; +using Nub.Lang.Syntax.Typing; -namespace Nub.Lang.Frontend.Parsing.Definitions; +namespace Nub.Lang.Syntax.Parsing.Definitions; public class StructField(string name, NubType type, Optional value) { diff --git a/src/Nub.Lang/Frontend/Parsing/Expressions/AddressOfNode.cs b/src/Nub.Lang.Syntax/Parsing/Expressions/AddressOfNode.cs similarity index 66% rename from src/Nub.Lang/Frontend/Parsing/Expressions/AddressOfNode.cs rename to src/Nub.Lang.Syntax/Parsing/Expressions/AddressOfNode.cs index 9209ffe..ac4f135 100644 --- a/src/Nub.Lang/Frontend/Parsing/Expressions/AddressOfNode.cs +++ b/src/Nub.Lang.Syntax/Parsing/Expressions/AddressOfNode.cs @@ -1,6 +1,6 @@ -using Nub.Lang.Frontend.Lexing; +using Nub.Lang.Syntax.Tokenization; -namespace Nub.Lang.Frontend.Parsing.Expressions; +namespace Nub.Lang.Syntax.Parsing.Expressions; public class AddressOfNode(IReadOnlyList tokens, LValueNode expression) : ExpressionNode(tokens) { diff --git a/src/Nub.Lang/Frontend/Parsing/Expressions/AnonymousFuncNode.cs b/src/Nub.Lang.Syntax/Parsing/Expressions/AnonymousFuncNode.cs similarity index 61% rename from src/Nub.Lang/Frontend/Parsing/Expressions/AnonymousFuncNode.cs rename to src/Nub.Lang.Syntax/Parsing/Expressions/AnonymousFuncNode.cs index 2162e0a..9b06149 100644 --- a/src/Nub.Lang/Frontend/Parsing/Expressions/AnonymousFuncNode.cs +++ b/src/Nub.Lang.Syntax/Parsing/Expressions/AnonymousFuncNode.cs @@ -1,9 +1,9 @@ -using Nub.Lang.Frontend.Lexing; -using Nub.Lang.Frontend.Parsing.Definitions; -using Nub.Lang.Frontend.Parsing.Statements; -using Nub.Lang.Frontend.Typing; +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.Frontend.Parsing.Expressions; +namespace Nub.Lang.Syntax.Parsing.Expressions; public class AnonymousFuncNode(IReadOnlyList tokens, List parameters, BlockNode body, NubType returnType) : ExpressionNode(tokens) { diff --git a/src/Nub.Lang/Frontend/Parsing/Expressions/ArrayIndexAccessNode.cs b/src/Nub.Lang.Syntax/Parsing/Expressions/ArrayIndexAccessNode.cs similarity index 73% rename from src/Nub.Lang/Frontend/Parsing/Expressions/ArrayIndexAccessNode.cs rename to src/Nub.Lang.Syntax/Parsing/Expressions/ArrayIndexAccessNode.cs index c0a1338..705d763 100644 --- a/src/Nub.Lang/Frontend/Parsing/Expressions/ArrayIndexAccessNode.cs +++ b/src/Nub.Lang.Syntax/Parsing/Expressions/ArrayIndexAccessNode.cs @@ -1,6 +1,6 @@ -using Nub.Lang.Frontend.Lexing; +using Nub.Lang.Syntax.Tokenization; -namespace Nub.Lang.Frontend.Parsing.Expressions; +namespace Nub.Lang.Syntax.Parsing.Expressions; public class ArrayIndexAccessNode(IReadOnlyList tokens, ExpressionNode array, ExpressionNode index) : LValueNode(tokens) { diff --git a/src/Nub.Lang/Frontend/Parsing/Expressions/ArrayInitializerNode.cs b/src/Nub.Lang.Syntax/Parsing/Expressions/ArrayInitializerNode.cs similarity index 68% rename from src/Nub.Lang/Frontend/Parsing/Expressions/ArrayInitializerNode.cs rename to src/Nub.Lang.Syntax/Parsing/Expressions/ArrayInitializerNode.cs index 6b92ba4..960075d 100644 --- a/src/Nub.Lang/Frontend/Parsing/Expressions/ArrayInitializerNode.cs +++ b/src/Nub.Lang.Syntax/Parsing/Expressions/ArrayInitializerNode.cs @@ -1,7 +1,7 @@ -using Nub.Lang.Frontend.Lexing; -using Nub.Lang.Frontend.Typing; +using Nub.Lang.Syntax.Tokenization; +using Nub.Lang.Syntax.Typing; -namespace Nub.Lang.Frontend.Parsing.Expressions; +namespace Nub.Lang.Syntax.Parsing.Expressions; public class ArrayInitializerNode(IReadOnlyList tokens, ExpressionNode capacity, NubType elementType) : ExpressionNode(tokens) { diff --git a/src/Nub.Lang/Frontend/Parsing/Expressions/BinaryExpressionNode.cs b/src/Nub.Lang.Syntax/Parsing/Expressions/BinaryExpressionNode.cs similarity index 85% rename from src/Nub.Lang/Frontend/Parsing/Expressions/BinaryExpressionNode.cs rename to src/Nub.Lang.Syntax/Parsing/Expressions/BinaryExpressionNode.cs index 1564591..6cc5912 100644 --- a/src/Nub.Lang/Frontend/Parsing/Expressions/BinaryExpressionNode.cs +++ b/src/Nub.Lang.Syntax/Parsing/Expressions/BinaryExpressionNode.cs @@ -1,6 +1,6 @@ -using Nub.Lang.Frontend.Lexing; +using Nub.Lang.Syntax.Tokenization; -namespace Nub.Lang.Frontend.Parsing.Expressions; +namespace Nub.Lang.Syntax.Parsing.Expressions; public class BinaryExpressionNode(IReadOnlyList tokens, ExpressionNode left, BinaryExpressionOperator @operator, ExpressionNode right) : ExpressionNode(tokens) { diff --git a/src/Nub.Lang/Frontend/Parsing/Expressions/DereferenceNode.cs b/src/Nub.Lang.Syntax/Parsing/Expressions/DereferenceNode.cs similarity index 66% rename from src/Nub.Lang/Frontend/Parsing/Expressions/DereferenceNode.cs rename to src/Nub.Lang.Syntax/Parsing/Expressions/DereferenceNode.cs index e91584e..1f6cd7e 100644 --- a/src/Nub.Lang/Frontend/Parsing/Expressions/DereferenceNode.cs +++ b/src/Nub.Lang.Syntax/Parsing/Expressions/DereferenceNode.cs @@ -1,6 +1,6 @@ -using Nub.Lang.Frontend.Lexing; +using Nub.Lang.Syntax.Tokenization; -namespace Nub.Lang.Frontend.Parsing.Expressions; +namespace Nub.Lang.Syntax.Parsing.Expressions; public class DereferenceNode(IReadOnlyList tokens, ExpressionNode expression) : LValueNode(tokens) { diff --git a/src/Nub.Lang/Frontend/Parsing/Expressions/ExpressionNode.cs b/src/Nub.Lang.Syntax/Parsing/Expressions/ExpressionNode.cs similarity index 76% rename from src/Nub.Lang/Frontend/Parsing/Expressions/ExpressionNode.cs rename to src/Nub.Lang.Syntax/Parsing/Expressions/ExpressionNode.cs index 9a749c3..1e3c0f8 100644 --- a/src/Nub.Lang/Frontend/Parsing/Expressions/ExpressionNode.cs +++ b/src/Nub.Lang.Syntax/Parsing/Expressions/ExpressionNode.cs @@ -1,7 +1,7 @@ -using Nub.Lang.Frontend.Lexing; -using Nub.Lang.Frontend.Typing; +using Nub.Lang.Syntax.Tokenization; +using Nub.Lang.Syntax.Typing; -namespace Nub.Lang.Frontend.Parsing.Expressions; +namespace Nub.Lang.Syntax.Parsing.Expressions; public abstract class ExpressionNode(IReadOnlyList tokens) : Node(tokens) { diff --git a/src/Nub.Lang/Frontend/Parsing/Expressions/FixedArrayInitializerNode.cs b/src/Nub.Lang.Syntax/Parsing/Expressions/FixedArrayInitializerNode.cs similarity index 67% rename from src/Nub.Lang/Frontend/Parsing/Expressions/FixedArrayInitializerNode.cs rename to src/Nub.Lang.Syntax/Parsing/Expressions/FixedArrayInitializerNode.cs index 2c952c7..e709967 100644 --- a/src/Nub.Lang/Frontend/Parsing/Expressions/FixedArrayInitializerNode.cs +++ b/src/Nub.Lang.Syntax/Parsing/Expressions/FixedArrayInitializerNode.cs @@ -1,7 +1,7 @@ -using Nub.Lang.Frontend.Lexing; -using Nub.Lang.Frontend.Typing; +using Nub.Lang.Syntax.Tokenization; +using Nub.Lang.Syntax.Typing; -namespace Nub.Lang.Frontend.Parsing.Expressions; +namespace Nub.Lang.Syntax.Parsing.Expressions; public class FixedArrayInitializerNode(IReadOnlyList tokens, NubType elementType, int capacity) : ExpressionNode(tokens) { diff --git a/src/Nub.Lang/Frontend/Parsing/Expressions/FuncCallNode.cs b/src/Nub.Lang.Syntax/Parsing/Expressions/FuncCallNode.cs similarity index 80% rename from src/Nub.Lang/Frontend/Parsing/Expressions/FuncCallNode.cs rename to src/Nub.Lang.Syntax/Parsing/Expressions/FuncCallNode.cs index 7a44a78..b50a6ef 100644 --- a/src/Nub.Lang/Frontend/Parsing/Expressions/FuncCallNode.cs +++ b/src/Nub.Lang.Syntax/Parsing/Expressions/FuncCallNode.cs @@ -1,6 +1,6 @@ -using Nub.Lang.Frontend.Lexing; +using Nub.Lang.Syntax.Tokenization; -namespace Nub.Lang.Frontend.Parsing.Expressions; +namespace Nub.Lang.Syntax.Parsing.Expressions; public class FuncCallNode(IReadOnlyList tokens, ExpressionNode expression, List parameters) : ExpressionNode(tokens) { diff --git a/src/Nub.Lang/Frontend/Parsing/Expressions/IdentifierNode.cs b/src/Nub.Lang.Syntax/Parsing/Expressions/IdentifierNode.cs similarity index 74% rename from src/Nub.Lang/Frontend/Parsing/Expressions/IdentifierNode.cs rename to src/Nub.Lang.Syntax/Parsing/Expressions/IdentifierNode.cs index e1086f8..1ff9afa 100644 --- a/src/Nub.Lang/Frontend/Parsing/Expressions/IdentifierNode.cs +++ b/src/Nub.Lang.Syntax/Parsing/Expressions/IdentifierNode.cs @@ -1,6 +1,7 @@ -using Nub.Lang.Frontend.Lexing; +using Nub.Lang.Common; +using Nub.Lang.Syntax.Tokenization; -namespace Nub.Lang.Frontend.Parsing.Expressions; +namespace Nub.Lang.Syntax.Parsing.Expressions; public class IdentifierNode(IReadOnlyList tokens, Optional @namespace, string name) : LValueNode(tokens) { diff --git a/src/Nub.Lang/Frontend/Parsing/Expressions/LiteralNode.cs b/src/Nub.Lang.Syntax/Parsing/Expressions/LiteralNode.cs similarity index 70% rename from src/Nub.Lang/Frontend/Parsing/Expressions/LiteralNode.cs rename to src/Nub.Lang.Syntax/Parsing/Expressions/LiteralNode.cs index 1f52d00..9b02bcc 100644 --- a/src/Nub.Lang/Frontend/Parsing/Expressions/LiteralNode.cs +++ b/src/Nub.Lang.Syntax/Parsing/Expressions/LiteralNode.cs @@ -1,6 +1,6 @@ -using Nub.Lang.Frontend.Lexing; +using Nub.Lang.Syntax.Tokenization; -namespace Nub.Lang.Frontend.Parsing.Expressions; +namespace Nub.Lang.Syntax.Parsing.Expressions; public class LiteralNode(IReadOnlyList tokens, string literal, LiteralKind kind) : ExpressionNode(tokens) { diff --git a/src/Nub.Lang/Frontend/Parsing/Expressions/MemberAccessNode.cs b/src/Nub.Lang.Syntax/Parsing/Expressions/MemberAccessNode.cs similarity index 72% rename from src/Nub.Lang/Frontend/Parsing/Expressions/MemberAccessNode.cs rename to src/Nub.Lang.Syntax/Parsing/Expressions/MemberAccessNode.cs index c2aff51..54ffc5b 100644 --- a/src/Nub.Lang/Frontend/Parsing/Expressions/MemberAccessNode.cs +++ b/src/Nub.Lang.Syntax/Parsing/Expressions/MemberAccessNode.cs @@ -1,6 +1,6 @@ -using Nub.Lang.Frontend.Lexing; +using Nub.Lang.Syntax.Tokenization; -namespace Nub.Lang.Frontend.Parsing.Expressions; +namespace Nub.Lang.Syntax.Parsing.Expressions; public class MemberAccessNode(IReadOnlyList tokens, ExpressionNode expression, string member) : LValueNode(tokens) { diff --git a/src/Nub.Lang/Frontend/Parsing/Expressions/StructInitializerNode.cs b/src/Nub.Lang.Syntax/Parsing/Expressions/StructInitializerNode.cs similarity index 72% rename from src/Nub.Lang/Frontend/Parsing/Expressions/StructInitializerNode.cs rename to src/Nub.Lang.Syntax/Parsing/Expressions/StructInitializerNode.cs index b7d6861..d6198dd 100644 --- a/src/Nub.Lang/Frontend/Parsing/Expressions/StructInitializerNode.cs +++ b/src/Nub.Lang.Syntax/Parsing/Expressions/StructInitializerNode.cs @@ -1,7 +1,7 @@ -using Nub.Lang.Frontend.Lexing; -using Nub.Lang.Frontend.Typing; +using Nub.Lang.Syntax.Tokenization; +using Nub.Lang.Syntax.Typing; -namespace Nub.Lang.Frontend.Parsing.Expressions; +namespace Nub.Lang.Syntax.Parsing.Expressions; public class StructInitializerNode(IReadOnlyList tokens, NubStructType structType, Dictionary initializers) : ExpressionNode(tokens) { diff --git a/src/Nub.Lang/Frontend/Parsing/Expressions/UnaryExpressionNode.cs b/src/Nub.Lang.Syntax/Parsing/Expressions/UnaryExpressionNode.cs similarity index 79% rename from src/Nub.Lang/Frontend/Parsing/Expressions/UnaryExpressionNode.cs rename to src/Nub.Lang.Syntax/Parsing/Expressions/UnaryExpressionNode.cs index ec75ff8..aa2f01f 100644 --- a/src/Nub.Lang/Frontend/Parsing/Expressions/UnaryExpressionNode.cs +++ b/src/Nub.Lang.Syntax/Parsing/Expressions/UnaryExpressionNode.cs @@ -1,6 +1,6 @@ -using Nub.Lang.Frontend.Lexing; +using Nub.Lang.Syntax.Tokenization; -namespace Nub.Lang.Frontend.Parsing.Expressions; +namespace Nub.Lang.Syntax.Parsing.Expressions; public class UnaryExpressionNode(IReadOnlyList tokens, UnaryExpressionOperator @operator, ExpressionNode operand) : ExpressionNode(tokens) { diff --git a/src/Nub.Lang/Frontend/Parsing/Node.cs b/src/Nub.Lang.Syntax/Parsing/Node.cs similarity index 62% rename from src/Nub.Lang/Frontend/Parsing/Node.cs rename to src/Nub.Lang.Syntax/Parsing/Node.cs index 7f84457..0fba550 100644 --- a/src/Nub.Lang/Frontend/Parsing/Node.cs +++ b/src/Nub.Lang.Syntax/Parsing/Node.cs @@ -1,6 +1,6 @@ -using Nub.Lang.Frontend.Lexing; +using Nub.Lang.Syntax.Tokenization; -namespace Nub.Lang.Frontend.Parsing; +namespace Nub.Lang.Syntax.Parsing; public abstract class Node(IReadOnlyList tokens) { diff --git a/src/Nub.Lang/Frontend/Parsing/Parser.cs b/src/Nub.Lang.Syntax/Parsing/Parser.cs similarity index 99% rename from src/Nub.Lang/Frontend/Parsing/Parser.cs rename to src/Nub.Lang.Syntax/Parsing/Parser.cs index 9514d59..16179e4 100644 --- a/src/Nub.Lang/Frontend/Parsing/Parser.cs +++ b/src/Nub.Lang.Syntax/Parsing/Parser.cs @@ -1,13 +1,14 @@ using System.Diagnostics; using System.Diagnostics.CodeAnalysis; -using Nub.Lang.Diagnostics; -using Nub.Lang.Frontend.Lexing; -using Nub.Lang.Frontend.Parsing.Definitions; -using Nub.Lang.Frontend.Parsing.Expressions; -using Nub.Lang.Frontend.Parsing.Statements; -using Nub.Lang.Frontend.Typing; +using Nub.Lang.Common; +using Nub.Lang.Syntax.Diagnostics; +using Nub.Lang.Syntax.Parsing.Definitions; +using Nub.Lang.Syntax.Parsing.Expressions; +using Nub.Lang.Syntax.Parsing.Statements; +using Nub.Lang.Syntax.Tokenization; +using Nub.Lang.Syntax.Typing; -namespace Nub.Lang.Frontend.Parsing; +namespace Nub.Lang.Syntax.Parsing; public static class Parser { diff --git a/src/Nub.Lang/Frontend/Parsing/Statements/ArrayIndexAssignmentNode.cs b/src/Nub.Lang.Syntax/Parsing/Statements/ArrayIndexAssignmentNode.cs similarity index 69% rename from src/Nub.Lang/Frontend/Parsing/Statements/ArrayIndexAssignmentNode.cs rename to src/Nub.Lang.Syntax/Parsing/Statements/ArrayIndexAssignmentNode.cs index 1737521..890feee 100644 --- a/src/Nub.Lang/Frontend/Parsing/Statements/ArrayIndexAssignmentNode.cs +++ b/src/Nub.Lang.Syntax/Parsing/Statements/ArrayIndexAssignmentNode.cs @@ -1,7 +1,7 @@ -using Nub.Lang.Frontend.Lexing; -using Nub.Lang.Frontend.Parsing.Expressions; +using Nub.Lang.Syntax.Parsing.Expressions; +using Nub.Lang.Syntax.Tokenization; -namespace Nub.Lang.Frontend.Parsing.Statements; +namespace Nub.Lang.Syntax.Parsing.Statements; public class ArrayIndexAssignmentNode(IReadOnlyList tokens, ArrayIndexAccessNode arrayIndexAccess, ExpressionNode value) : StatementNode(tokens) { diff --git a/src/Nub.Lang/Frontend/Parsing/Statements/BlockNode.cs b/src/Nub.Lang.Syntax/Parsing/Statements/BlockNode.cs similarity index 66% rename from src/Nub.Lang/Frontend/Parsing/Statements/BlockNode.cs rename to src/Nub.Lang.Syntax/Parsing/Statements/BlockNode.cs index 0d6b50e..89732b7 100644 --- a/src/Nub.Lang/Frontend/Parsing/Statements/BlockNode.cs +++ b/src/Nub.Lang.Syntax/Parsing/Statements/BlockNode.cs @@ -1,6 +1,6 @@ -using Nub.Lang.Frontend.Lexing; +using Nub.Lang.Syntax.Tokenization; -namespace Nub.Lang.Frontend.Parsing.Statements; +namespace Nub.Lang.Syntax.Parsing.Statements; public class BlockNode(IReadOnlyList tokens, List statements) : Node(tokens) { diff --git a/src/Nub.Lang.Syntax/Parsing/Statements/BreakNode.cs b/src/Nub.Lang.Syntax/Parsing/Statements/BreakNode.cs new file mode 100644 index 0000000..e8e4300 --- /dev/null +++ b/src/Nub.Lang.Syntax/Parsing/Statements/BreakNode.cs @@ -0,0 +1,5 @@ +using Nub.Lang.Syntax.Tokenization; + +namespace Nub.Lang.Syntax.Parsing.Statements; + +public class BreakNode(IReadOnlyList tokens) : StatementNode(tokens); \ No newline at end of file diff --git a/src/Nub.Lang.Syntax/Parsing/Statements/ContinueNode.cs b/src/Nub.Lang.Syntax/Parsing/Statements/ContinueNode.cs new file mode 100644 index 0000000..3309119 --- /dev/null +++ b/src/Nub.Lang.Syntax/Parsing/Statements/ContinueNode.cs @@ -0,0 +1,5 @@ +using Nub.Lang.Syntax.Tokenization; + +namespace Nub.Lang.Syntax.Parsing.Statements; + +public class ContinueNode(IReadOnlyList tokens) : StatementNode(tokens); \ No newline at end of file diff --git a/src/Nub.Lang/Frontend/Parsing/Statements/DereferenceAssignmentNode.cs b/src/Nub.Lang.Syntax/Parsing/Statements/DereferenceAssignmentNode.cs similarity index 67% rename from src/Nub.Lang/Frontend/Parsing/Statements/DereferenceAssignmentNode.cs rename to src/Nub.Lang.Syntax/Parsing/Statements/DereferenceAssignmentNode.cs index 60b1632..77b140e 100644 --- a/src/Nub.Lang/Frontend/Parsing/Statements/DereferenceAssignmentNode.cs +++ b/src/Nub.Lang.Syntax/Parsing/Statements/DereferenceAssignmentNode.cs @@ -1,7 +1,7 @@ -using Nub.Lang.Frontend.Lexing; -using Nub.Lang.Frontend.Parsing.Expressions; +using Nub.Lang.Syntax.Parsing.Expressions; +using Nub.Lang.Syntax.Tokenization; -namespace Nub.Lang.Frontend.Parsing.Statements; +namespace Nub.Lang.Syntax.Parsing.Statements; public class DereferenceAssignmentNode(IReadOnlyList tokens, DereferenceNode dereference, ExpressionNode value) : StatementNode(tokens) { diff --git a/src/Nub.Lang/Frontend/Parsing/Statements/IfNode.cs b/src/Nub.Lang.Syntax/Parsing/Statements/IfNode.cs similarity index 68% rename from src/Nub.Lang/Frontend/Parsing/Statements/IfNode.cs rename to src/Nub.Lang.Syntax/Parsing/Statements/IfNode.cs index e9934df..a84af29 100644 --- a/src/Nub.Lang/Frontend/Parsing/Statements/IfNode.cs +++ b/src/Nub.Lang.Syntax/Parsing/Statements/IfNode.cs @@ -1,7 +1,8 @@ -using Nub.Lang.Frontend.Lexing; -using Nub.Lang.Frontend.Parsing.Expressions; +using Nub.Lang.Common; +using Nub.Lang.Syntax.Parsing.Expressions; +using Nub.Lang.Syntax.Tokenization; -namespace Nub.Lang.Frontend.Parsing.Statements; +namespace Nub.Lang.Syntax.Parsing.Statements; public class IfNode(IReadOnlyList tokens, ExpressionNode condition, BlockNode body, Optional> @else) : StatementNode(tokens) { diff --git a/src/Nub.Lang/Frontend/Parsing/Statements/MemberAssignmentNode.cs b/src/Nub.Lang.Syntax/Parsing/Statements/MemberAssignmentNode.cs similarity index 67% rename from src/Nub.Lang/Frontend/Parsing/Statements/MemberAssignmentNode.cs rename to src/Nub.Lang.Syntax/Parsing/Statements/MemberAssignmentNode.cs index acf23cd..19c169a 100644 --- a/src/Nub.Lang/Frontend/Parsing/Statements/MemberAssignmentNode.cs +++ b/src/Nub.Lang.Syntax/Parsing/Statements/MemberAssignmentNode.cs @@ -1,7 +1,7 @@ -using Nub.Lang.Frontend.Lexing; -using Nub.Lang.Frontend.Parsing.Expressions; +using Nub.Lang.Syntax.Parsing.Expressions; +using Nub.Lang.Syntax.Tokenization; -namespace Nub.Lang.Frontend.Parsing.Statements; +namespace Nub.Lang.Syntax.Parsing.Statements; public class MemberAssignmentNode(IReadOnlyList tokens, MemberAccessNode expression, ExpressionNode value) : StatementNode(tokens) { diff --git a/src/Nub.Lang/Frontend/Parsing/Statements/ReturnNode.cs b/src/Nub.Lang.Syntax/Parsing/Statements/ReturnNode.cs similarity index 53% rename from src/Nub.Lang/Frontend/Parsing/Statements/ReturnNode.cs rename to src/Nub.Lang.Syntax/Parsing/Statements/ReturnNode.cs index 1ece587..3acc5fd 100644 --- a/src/Nub.Lang/Frontend/Parsing/Statements/ReturnNode.cs +++ b/src/Nub.Lang.Syntax/Parsing/Statements/ReturnNode.cs @@ -1,7 +1,8 @@ -using Nub.Lang.Frontend.Lexing; -using Nub.Lang.Frontend.Parsing.Expressions; +using Nub.Lang.Common; +using Nub.Lang.Syntax.Parsing.Expressions; +using Nub.Lang.Syntax.Tokenization; -namespace Nub.Lang.Frontend.Parsing.Statements; +namespace Nub.Lang.Syntax.Parsing.Statements; public class ReturnNode(IReadOnlyList tokens, Optional value) : StatementNode(tokens) { diff --git a/src/Nub.Lang/Frontend/Parsing/Statements/StatementExpressionNode.cs b/src/Nub.Lang.Syntax/Parsing/Statements/StatementExpressionNode.cs similarity index 58% rename from src/Nub.Lang/Frontend/Parsing/Statements/StatementExpressionNode.cs rename to src/Nub.Lang.Syntax/Parsing/Statements/StatementExpressionNode.cs index 7ce7e98..d9400e6 100644 --- a/src/Nub.Lang/Frontend/Parsing/Statements/StatementExpressionNode.cs +++ b/src/Nub.Lang.Syntax/Parsing/Statements/StatementExpressionNode.cs @@ -1,7 +1,7 @@ -using Nub.Lang.Frontend.Lexing; -using Nub.Lang.Frontend.Parsing.Expressions; +using Nub.Lang.Syntax.Parsing.Expressions; +using Nub.Lang.Syntax.Tokenization; -namespace Nub.Lang.Frontend.Parsing.Statements; +namespace Nub.Lang.Syntax.Parsing.Statements; public class StatementExpressionNode(IReadOnlyList tokens, ExpressionNode expression) : StatementNode(tokens) { diff --git a/src/Nub.Lang.Syntax/Parsing/Statements/StatementNode.cs b/src/Nub.Lang.Syntax/Parsing/Statements/StatementNode.cs new file mode 100644 index 0000000..aaa2cea --- /dev/null +++ b/src/Nub.Lang.Syntax/Parsing/Statements/StatementNode.cs @@ -0,0 +1,5 @@ +using Nub.Lang.Syntax.Tokenization; + +namespace Nub.Lang.Syntax.Parsing.Statements; + +public abstract class StatementNode(IReadOnlyList tokens) : Node(tokens); \ No newline at end of file diff --git a/src/Nub.Lang/Frontend/Parsing/Statements/VariableAssignmentNode.cs b/src/Nub.Lang.Syntax/Parsing/Statements/VariableAssignmentNode.cs similarity index 66% rename from src/Nub.Lang/Frontend/Parsing/Statements/VariableAssignmentNode.cs rename to src/Nub.Lang.Syntax/Parsing/Statements/VariableAssignmentNode.cs index dd64213..e6878f4 100644 --- a/src/Nub.Lang/Frontend/Parsing/Statements/VariableAssignmentNode.cs +++ b/src/Nub.Lang.Syntax/Parsing/Statements/VariableAssignmentNode.cs @@ -1,7 +1,7 @@ -using Nub.Lang.Frontend.Lexing; -using Nub.Lang.Frontend.Parsing.Expressions; +using Nub.Lang.Syntax.Parsing.Expressions; +using Nub.Lang.Syntax.Tokenization; -namespace Nub.Lang.Frontend.Parsing.Statements; +namespace Nub.Lang.Syntax.Parsing.Statements; public class VariableAssignmentNode(IReadOnlyList tokens, IdentifierNode identifier, ExpressionNode value) : StatementNode(tokens) { diff --git a/src/Nub.Lang/Frontend/Parsing/Statements/VariableDeclarationNode.cs b/src/Nub.Lang.Syntax/Parsing/Statements/VariableDeclarationNode.cs similarity index 65% rename from src/Nub.Lang/Frontend/Parsing/Statements/VariableDeclarationNode.cs rename to src/Nub.Lang.Syntax/Parsing/Statements/VariableDeclarationNode.cs index 24ea259..d5beed9 100644 --- a/src/Nub.Lang/Frontend/Parsing/Statements/VariableDeclarationNode.cs +++ b/src/Nub.Lang.Syntax/Parsing/Statements/VariableDeclarationNode.cs @@ -1,8 +1,9 @@ -using Nub.Lang.Frontend.Lexing; -using Nub.Lang.Frontend.Parsing.Expressions; -using Nub.Lang.Frontend.Typing; +using Nub.Lang.Common; +using Nub.Lang.Syntax.Parsing.Expressions; +using Nub.Lang.Syntax.Tokenization; +using Nub.Lang.Syntax.Typing; -namespace Nub.Lang.Frontend.Parsing.Statements; +namespace Nub.Lang.Syntax.Parsing.Statements; public class VariableDeclarationNode(IReadOnlyList tokens, string name, Optional explicitType, Optional value) : StatementNode(tokens) { diff --git a/src/Nub.Lang/Frontend/Parsing/Statements/WhileNode.cs b/src/Nub.Lang.Syntax/Parsing/Statements/WhileNode.cs similarity index 63% rename from src/Nub.Lang/Frontend/Parsing/Statements/WhileNode.cs rename to src/Nub.Lang.Syntax/Parsing/Statements/WhileNode.cs index 4dce315..13aa304 100644 --- a/src/Nub.Lang/Frontend/Parsing/Statements/WhileNode.cs +++ b/src/Nub.Lang.Syntax/Parsing/Statements/WhileNode.cs @@ -1,7 +1,7 @@ -using Nub.Lang.Frontend.Lexing; -using Nub.Lang.Frontend.Parsing.Expressions; +using Nub.Lang.Syntax.Parsing.Expressions; +using Nub.Lang.Syntax.Tokenization; -namespace Nub.Lang.Frontend.Parsing.Statements; +namespace Nub.Lang.Syntax.Parsing.Statements; public class WhileNode(IReadOnlyList tokens, ExpressionNode condition, BlockNode body) : StatementNode(tokens) { diff --git a/src/Nub.Lang/Source.cs b/src/Nub.Lang.Syntax/Source.cs similarity index 99% rename from src/Nub.Lang/Source.cs rename to src/Nub.Lang.Syntax/Source.cs index c2d3ef7..3cd0095 100644 --- a/src/Nub.Lang/Source.cs +++ b/src/Nub.Lang.Syntax/Source.cs @@ -1,6 +1,6 @@ using System.Diagnostics.CodeAnalysis; -namespace Nub.Lang; +namespace Nub.Lang.Syntax; /// /// Represents a location in source code with line and column information. diff --git a/src/Nub.Lang/Frontend/Lexing/DocumentationToken.cs b/src/Nub.Lang.Syntax/Tokenization/DocumentationToken.cs similarity index 69% rename from src/Nub.Lang/Frontend/Lexing/DocumentationToken.cs rename to src/Nub.Lang.Syntax/Tokenization/DocumentationToken.cs index d276789..d0b4ccc 100644 --- a/src/Nub.Lang/Frontend/Lexing/DocumentationToken.cs +++ b/src/Nub.Lang.Syntax/Tokenization/DocumentationToken.cs @@ -1,4 +1,6 @@ -namespace Nub.Lang.Frontend.Lexing; +using Nub.Lang.Common; + +namespace Nub.Lang.Syntax.Tokenization; public class DocumentationToken(SourceSpan span, string documentation) : Token(span) { diff --git a/src/Nub.Lang/Frontend/Lexing/IdentifierToken.cs b/src/Nub.Lang.Syntax/Tokenization/IdentifierToken.cs similarity index 63% rename from src/Nub.Lang/Frontend/Lexing/IdentifierToken.cs rename to src/Nub.Lang.Syntax/Tokenization/IdentifierToken.cs index f0e60ad..512a31c 100644 --- a/src/Nub.Lang/Frontend/Lexing/IdentifierToken.cs +++ b/src/Nub.Lang.Syntax/Tokenization/IdentifierToken.cs @@ -1,4 +1,6 @@ -namespace Nub.Lang.Frontend.Lexing; +using Nub.Lang.Common; + +namespace Nub.Lang.Syntax.Tokenization; public class IdentifierToken(SourceSpan span, string value) : Token(span) { diff --git a/src/Nub.Lang/Frontend/Lexing/LiteralToken.cs b/src/Nub.Lang.Syntax/Tokenization/LiteralToken.cs similarity index 78% rename from src/Nub.Lang/Frontend/Lexing/LiteralToken.cs rename to src/Nub.Lang.Syntax/Tokenization/LiteralToken.cs index 2164ca4..3ee15bd 100644 --- a/src/Nub.Lang/Frontend/Lexing/LiteralToken.cs +++ b/src/Nub.Lang.Syntax/Tokenization/LiteralToken.cs @@ -1,4 +1,6 @@ -namespace Nub.Lang.Frontend.Lexing; +using Nub.Lang.Common; + +namespace Nub.Lang.Syntax.Tokenization; public class LiteralToken(SourceSpan span, LiteralKind kind, string value) : Token(span) { diff --git a/src/Nub.Lang/Frontend/Lexing/ModifierToken.cs b/src/Nub.Lang.Syntax/Tokenization/ModifierToken.cs similarity index 73% rename from src/Nub.Lang/Frontend/Lexing/ModifierToken.cs rename to src/Nub.Lang.Syntax/Tokenization/ModifierToken.cs index d9d0a25..fae5977 100644 --- a/src/Nub.Lang/Frontend/Lexing/ModifierToken.cs +++ b/src/Nub.Lang.Syntax/Tokenization/ModifierToken.cs @@ -1,4 +1,6 @@ -namespace Nub.Lang.Frontend.Lexing; +using Nub.Lang.Common; + +namespace Nub.Lang.Syntax.Tokenization; public class ModifierToken(SourceSpan span, Modifier modifier) : Token(span) { diff --git a/src/Nub.Lang/Frontend/Lexing/SymbolToken.cs b/src/Nub.Lang.Syntax/Tokenization/SymbolToken.cs similarity index 90% rename from src/Nub.Lang/Frontend/Lexing/SymbolToken.cs rename to src/Nub.Lang.Syntax/Tokenization/SymbolToken.cs index 24fcc56..708adce 100644 --- a/src/Nub.Lang/Frontend/Lexing/SymbolToken.cs +++ b/src/Nub.Lang.Syntax/Tokenization/SymbolToken.cs @@ -1,4 +1,6 @@ -namespace Nub.Lang.Frontend.Lexing; +using Nub.Lang.Common; + +namespace Nub.Lang.Syntax.Tokenization; public class SymbolToken(SourceSpan span, Symbol symbol) : Token(span) { diff --git a/src/Nub.Lang/Frontend/Lexing/Token.cs b/src/Nub.Lang.Syntax/Tokenization/Token.cs similarity index 57% rename from src/Nub.Lang/Frontend/Lexing/Token.cs rename to src/Nub.Lang.Syntax/Tokenization/Token.cs index 6dabe8c..b76d8cb 100644 --- a/src/Nub.Lang/Frontend/Lexing/Token.cs +++ b/src/Nub.Lang.Syntax/Tokenization/Token.cs @@ -1,4 +1,6 @@ -namespace Nub.Lang.Frontend.Lexing; +using Nub.Lang.Common; + +namespace Nub.Lang.Syntax.Tokenization; public abstract class Token(SourceSpan span) { diff --git a/src/Nub.Lang/Frontend/Lexing/Lexer.cs b/src/Nub.Lang.Syntax/Tokenization/Tokenizer.cs similarity index 98% rename from src/Nub.Lang/Frontend/Lexing/Lexer.cs rename to src/Nub.Lang.Syntax/Tokenization/Tokenizer.cs index c5f9473..6fe56ba 100644 --- a/src/Nub.Lang/Frontend/Lexing/Lexer.cs +++ b/src/Nub.Lang.Syntax/Tokenization/Tokenizer.cs @@ -1,8 +1,9 @@ -using Nub.Lang.Diagnostics; +using Nub.Lang.Common; +using Nub.Lang.Syntax.Diagnostics; -namespace Nub.Lang.Frontend.Lexing; +namespace Nub.Lang.Syntax.Tokenization; -public static class Lexer +public static class Tokenizer { private static readonly Dictionary Keywords = new() { diff --git a/src/Nub.Lang/Frontend/Typing/NubType.cs b/src/Nub.Lang.Syntax/Typing/NubType.cs similarity index 99% rename from src/Nub.Lang/Frontend/Typing/NubType.cs rename to src/Nub.Lang.Syntax/Typing/NubType.cs index aee1a68..25d5a4f 100644 --- a/src/Nub.Lang/Frontend/Typing/NubType.cs +++ b/src/Nub.Lang.Syntax/Typing/NubType.cs @@ -1,6 +1,6 @@ using System.Diagnostics.CodeAnalysis; -namespace Nub.Lang.Frontend.Typing; +namespace Nub.Lang.Syntax.Typing; public abstract class NubType { diff --git a/src/Nub.Lang/Frontend/Typing/TypeChecker.cs b/src/Nub.Lang.Syntax/Typing/TypeChecker.cs similarity index 98% rename from src/Nub.Lang/Frontend/Typing/TypeChecker.cs rename to src/Nub.Lang.Syntax/Typing/TypeChecker.cs index 9623e2f..ff0d2f5 100644 --- a/src/Nub.Lang/Frontend/Typing/TypeChecker.cs +++ b/src/Nub.Lang.Syntax/Typing/TypeChecker.cs @@ -1,12 +1,12 @@ using System.Diagnostics; -using Nub.Lang.Diagnostics; -using Nub.Lang.Frontend.Lexing; -using Nub.Lang.Frontend.Parsing; -using Nub.Lang.Frontend.Parsing.Definitions; -using Nub.Lang.Frontend.Parsing.Expressions; -using Nub.Lang.Frontend.Parsing.Statements; +using Nub.Lang.Syntax.Diagnostics; +using Nub.Lang.Syntax.Parsing; +using Nub.Lang.Syntax.Parsing.Definitions; +using Nub.Lang.Syntax.Parsing.Expressions; +using Nub.Lang.Syntax.Parsing.Statements; +using Nub.Lang.Syntax.Tokenization; -namespace Nub.Lang.Frontend.Typing; +namespace Nub.Lang.Syntax.Typing; public static class TypeChecker { diff --git a/src/Nub.Lang.sln b/src/Nub.Lang.sln index 3b0a90e..6cc6537 100644 --- a/src/Nub.Lang.sln +++ b/src/Nub.Lang.sln @@ -1,9 +1,13 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nub.Lang", "Nub.Lang\Nub.Lang.csproj", "{5047E21F-590D-4CB3-AFF3-064316485009}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nub.Lang.Syntax", "Nub.Lang.Syntax\Nub.Lang.Syntax.csproj", "{5047E21F-590D-4CB3-AFF3-064316485009}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nub.Lang.CLI", "Nub.Lang.CLI\Nub.Lang.CLI.csproj", "{A22F17ED-FA17-45AB-92BA-CD02C28B3524}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nub.Lang.Generation", "Nub.Lang.Generation\Nub.Lang.Generation.csproj", "{F903F1B9-69A6-4522-B483-81A4B072C8B1}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nub.Lang.Common", "Nub.Lang.Common\Nub.Lang.Common.csproj", "{91ECE034-32D4-48E6-A905-5F95DB95A3D4}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -18,5 +22,13 @@ Global {A22F17ED-FA17-45AB-92BA-CD02C28B3524}.Debug|Any CPU.Build.0 = Debug|Any CPU {A22F17ED-FA17-45AB-92BA-CD02C28B3524}.Release|Any CPU.ActiveCfg = Release|Any CPU {A22F17ED-FA17-45AB-92BA-CD02C28B3524}.Release|Any CPU.Build.0 = Release|Any CPU + {F903F1B9-69A6-4522-B483-81A4B072C8B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F903F1B9-69A6-4522-B483-81A4B072C8B1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F903F1B9-69A6-4522-B483-81A4B072C8B1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F903F1B9-69A6-4522-B483-81A4B072C8B1}.Release|Any CPU.Build.0 = Release|Any CPU + {91ECE034-32D4-48E6-A905-5F95DB95A3D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {91ECE034-32D4-48E6-A905-5F95DB95A3D4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {91ECE034-32D4-48E6-A905-5F95DB95A3D4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {91ECE034-32D4-48E6-A905-5F95DB95A3D4}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection EndGlobal diff --git a/src/Nub.Lang/Frontend/Parsing/Statements/BreakNode.cs b/src/Nub.Lang/Frontend/Parsing/Statements/BreakNode.cs deleted file mode 100644 index 40b2cef..0000000 --- a/src/Nub.Lang/Frontend/Parsing/Statements/BreakNode.cs +++ /dev/null @@ -1,5 +0,0 @@ -using Nub.Lang.Frontend.Lexing; - -namespace Nub.Lang.Frontend.Parsing.Statements; - -public class BreakNode(IReadOnlyList tokens) : StatementNode(tokens); \ No newline at end of file diff --git a/src/Nub.Lang/Frontend/Parsing/Statements/ContinueNode.cs b/src/Nub.Lang/Frontend/Parsing/Statements/ContinueNode.cs deleted file mode 100644 index 5674333..0000000 --- a/src/Nub.Lang/Frontend/Parsing/Statements/ContinueNode.cs +++ /dev/null @@ -1,5 +0,0 @@ -using Nub.Lang.Frontend.Lexing; - -namespace Nub.Lang.Frontend.Parsing.Statements; - -public class ContinueNode(IReadOnlyList tokens) : StatementNode(tokens); \ No newline at end of file diff --git a/src/Nub.Lang/Frontend/Parsing/Statements/StatementNode.cs b/src/Nub.Lang/Frontend/Parsing/Statements/StatementNode.cs deleted file mode 100644 index cc22374..0000000 --- a/src/Nub.Lang/Frontend/Parsing/Statements/StatementNode.cs +++ /dev/null @@ -1,5 +0,0 @@ -using Nub.Lang.Frontend.Lexing; - -namespace Nub.Lang.Frontend.Parsing.Statements; - -public abstract class StatementNode(IReadOnlyList tokens) : Node(tokens); \ No newline at end of file