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