From 6356e37f77e170c299a4ea0abfd3090ad2ef4c13 Mon Sep 17 00:00:00 2001 From: nub31 Date: Tue, 28 Jan 2025 17:37:09 +0100 Subject: [PATCH] Refactor --- .../Generator.cs => Backend/Custom/CustomGenerator.cs} | 8 ++++---- .../{Generation => Backend/Custom}/SymbolTable.cs | 6 +++--- .../Nub.Lang/{ => Frontend}/Lexing/IdentifierToken.cs | 2 +- Nub.Lang/Nub.Lang/{ => Frontend}/Lexing/Lexer.cs | 2 +- .../Nub.Lang/{ => Frontend}/Lexing/LiteralToken.cs | 2 +- Nub.Lang/Nub.Lang/{ => Frontend}/Lexing/SymbolToken.cs | 2 +- Nub.Lang/Nub.Lang/Frontend/Lexing/Token.cs | 3 +++ .../{ => Frontend}/Parsing/BinaryExpressionNode.cs | 2 +- Nub.Lang/Nub.Lang/{ => Frontend}/Parsing/BlockNode.cs | 2 +- Nub.Lang/Nub.Lang/Frontend/Parsing/DefinitionNode.cs | 3 +++ .../Nub.Lang/{ => Frontend}/Parsing/ExpressionNode.cs | 2 +- .../{ => Frontend}/Parsing/ExternFuncDefinitionNode.cs | 2 +- Nub.Lang/Nub.Lang/{ => Frontend}/Parsing/FuncCall.cs | 2 +- .../{ => Frontend}/Parsing/FuncCallExpressionNode.cs | 2 +- .../{ => Frontend}/Parsing/FuncCallStatementNode.cs | 2 +- .../Parsing/GlobalVariableDefinitionNode.cs | 2 +- .../Nub.Lang/{ => Frontend}/Parsing/IdentifierNode.cs | 2 +- Nub.Lang/Nub.Lang/{ => Frontend}/Parsing/IfNode.cs | 2 +- .../Nub.Lang/{ => Frontend}/Parsing/LiteralNode.cs | 2 +- .../{ => Frontend}/Parsing/LocalFuncDefinitionNode.cs | 2 +- Nub.Lang/Nub.Lang/Frontend/Parsing/Node.cs | 3 +++ Nub.Lang/Nub.Lang/{ => Frontend}/Parsing/Parser.cs | 4 ++-- Nub.Lang/Nub.Lang/{ => Frontend}/Parsing/ReturnNode.cs | 2 +- Nub.Lang/Nub.Lang/Frontend/Parsing/StatementNode.cs | 3 +++ Nub.Lang/Nub.Lang/{ => Frontend}/Parsing/Syscall.cs | 2 +- .../{ => Frontend}/Parsing/SyscallExpressionNode.cs | 2 +- .../{ => Frontend}/Parsing/SyscallStatementNode.cs | 2 +- .../{ => Frontend}/Parsing/VariableAssignmentNode.cs | 2 +- .../{ => Frontend}/Parsing/VariableReassignmentNode.cs | 2 +- .../Nub.Lang/{ => Frontend}/Typing/ExpressionTyper.cs | 4 ++-- Nub.Lang/Nub.Lang/Lexing/Token.cs | 3 --- Nub.Lang/Nub.Lang/Output/build.sh | 6 ------ Nub.Lang/Nub.Lang/Parsing/DefinitionNode.cs | 3 --- Nub.Lang/Nub.Lang/Parsing/Node.cs | 3 --- Nub.Lang/Nub.Lang/Parsing/StatementNode.cs | 3 --- Nub.Lang/Nub.Lang/Program.cs | 10 +++++----- Nub.Lang/Nub.Lang/{Input => input}/core/print.nub | 0 .../{Output/core => input/core/string}/strcmp.asm | 0 .../core/utils.nub => input/core/string/strcmp.nub} | 1 - .../{Output/core => input/core/string}/strlen.asm | 0 Nub.Lang/Nub.Lang/input/core/string/strlen.nub | 3 +++ Nub.Lang/Nub.Lang/{Input => input}/program.nub | 0 Nub.Lang/Nub.Lang/output/build.sh | 6 ++++++ Nub.Lang/Nub.Lang/{Output => output}/debug.sh | 0 Nub.Lang/Nub.Lang/{Output => output}/run.sh | 0 45 files changed, 59 insertions(+), 57 deletions(-) rename Nub.Lang/Nub.Lang/{Generation/Generator.cs => Backend/Custom/CustomGenerator.cs} (99%) rename Nub.Lang/Nub.Lang/{Generation => Backend/Custom}/SymbolTable.cs (98%) rename Nub.Lang/Nub.Lang/{ => Frontend}/Lexing/IdentifierToken.cs (70%) rename Nub.Lang/Nub.Lang/{ => Frontend}/Lexing/Lexer.cs (99%) rename Nub.Lang/Nub.Lang/{ => Frontend}/Lexing/LiteralToken.cs (78%) rename Nub.Lang/Nub.Lang/{ => Frontend}/Lexing/SymbolToken.cs (92%) create mode 100644 Nub.Lang/Nub.Lang/Frontend/Lexing/Token.cs rename Nub.Lang/Nub.Lang/{ => Frontend}/Parsing/BinaryExpressionNode.cs (92%) rename Nub.Lang/Nub.Lang/{ => Frontend}/Parsing/BlockNode.cs (79%) create mode 100644 Nub.Lang/Nub.Lang/Frontend/Parsing/DefinitionNode.cs rename Nub.Lang/Nub.Lang/{ => Frontend}/Parsing/ExpressionNode.cs (85%) rename Nub.Lang/Nub.Lang/{ => Frontend}/Parsing/ExternFuncDefinitionNode.cs (93%) rename Nub.Lang/Nub.Lang/{ => Frontend}/Parsing/FuncCall.cs (86%) rename Nub.Lang/Nub.Lang/{ => Frontend}/Parsing/FuncCallExpressionNode.cs (82%) rename Nub.Lang/Nub.Lang/{ => Frontend}/Parsing/FuncCallStatementNode.cs (82%) rename Nub.Lang/Nub.Lang/{ => Frontend}/Parsing/GlobalVariableDefinitionNode.cs (82%) rename Nub.Lang/Nub.Lang/{ => Frontend}/Parsing/IdentifierNode.cs (82%) rename Nub.Lang/Nub.Lang/{ => Frontend}/Parsing/IfNode.cs (89%) rename Nub.Lang/Nub.Lang/{ => Frontend}/Parsing/LiteralNode.cs (79%) rename Nub.Lang/Nub.Lang/{ => Frontend}/Parsing/LocalFuncDefinitionNode.cs (93%) create mode 100644 Nub.Lang/Nub.Lang/Frontend/Parsing/Node.cs rename Nub.Lang/Nub.Lang/{ => Frontend}/Parsing/Parser.cs (99%) rename Nub.Lang/Nub.Lang/{ => Frontend}/Parsing/ReturnNode.cs (80%) create mode 100644 Nub.Lang/Nub.Lang/Frontend/Parsing/StatementNode.cs rename Nub.Lang/Nub.Lang/{ => Frontend}/Parsing/Syscall.cs (78%) rename Nub.Lang/Nub.Lang/{ => Frontend}/Parsing/SyscallExpressionNode.cs (74%) rename Nub.Lang/Nub.Lang/{ => Frontend}/Parsing/SyscallStatementNode.cs (74%) rename Nub.Lang/Nub.Lang/{ => Frontend}/Parsing/VariableAssignmentNode.cs (81%) rename Nub.Lang/Nub.Lang/{ => Frontend}/Parsing/VariableReassignmentNode.cs (81%) rename Nub.Lang/Nub.Lang/{ => Frontend}/Typing/ExpressionTyper.cs (99%) delete mode 100644 Nub.Lang/Nub.Lang/Lexing/Token.cs delete mode 100644 Nub.Lang/Nub.Lang/Output/build.sh delete mode 100644 Nub.Lang/Nub.Lang/Parsing/DefinitionNode.cs delete mode 100644 Nub.Lang/Nub.Lang/Parsing/Node.cs delete mode 100644 Nub.Lang/Nub.Lang/Parsing/StatementNode.cs rename Nub.Lang/Nub.Lang/{Input => input}/core/print.nub (100%) rename Nub.Lang/Nub.Lang/{Output/core => input/core/string}/strcmp.asm (100%) rename Nub.Lang/Nub.Lang/{Input/core/utils.nub => input/core/string/strcmp.nub} (61%) rename Nub.Lang/Nub.Lang/{Output/core => input/core/string}/strlen.asm (100%) create mode 100644 Nub.Lang/Nub.Lang/input/core/string/strlen.nub rename Nub.Lang/Nub.Lang/{Input => input}/program.nub (100%) create mode 100644 Nub.Lang/Nub.Lang/output/build.sh rename Nub.Lang/Nub.Lang/{Output => output}/debug.sh (100%) rename Nub.Lang/Nub.Lang/{Output => output}/run.sh (100%) diff --git a/Nub.Lang/Nub.Lang/Generation/Generator.cs b/Nub.Lang/Nub.Lang/Backend/Custom/CustomGenerator.cs similarity index 99% rename from Nub.Lang/Nub.Lang/Generation/Generator.cs rename to Nub.Lang/Nub.Lang/Backend/Custom/CustomGenerator.cs index 3d890a9..fb0b37c 100644 --- a/Nub.Lang/Nub.Lang/Generation/Generator.cs +++ b/Nub.Lang/Nub.Lang/Backend/Custom/CustomGenerator.cs @@ -1,9 +1,9 @@ using System.Text; -using Nub.Lang.Parsing; +using Nub.Lang.Frontend.Parsing; -namespace Nub.Lang.Generation; +namespace Nub.Lang.Backend.Custom; -public class Generator +public class CustomGenerator { private const string Entrypoint = "main"; @@ -15,7 +15,7 @@ public class Generator private int _stringIndex; private int _labelIndex; - public Generator(IReadOnlyCollection definitions) + public CustomGenerator(IReadOnlyCollection definitions) { _strings = []; _definitions = definitions; diff --git a/Nub.Lang/Nub.Lang/Generation/SymbolTable.cs b/Nub.Lang/Nub.Lang/Backend/Custom/SymbolTable.cs similarity index 98% rename from Nub.Lang/Nub.Lang/Generation/SymbolTable.cs rename to Nub.Lang/Nub.Lang/Backend/Custom/SymbolTable.cs index 88615fb..d1dd1e8 100644 --- a/Nub.Lang/Nub.Lang/Generation/SymbolTable.cs +++ b/Nub.Lang/Nub.Lang/Backend/Custom/SymbolTable.cs @@ -1,7 +1,7 @@ -using Nub.Lang.Parsing; -using Nub.Core; +using Nub.Core; +using Nub.Lang.Frontend.Parsing; -namespace Nub.Lang.Generation; +namespace Nub.Lang.Backend.Custom; public class SymbolTable { diff --git a/Nub.Lang/Nub.Lang/Lexing/IdentifierToken.cs b/Nub.Lang/Nub.Lang/Frontend/Lexing/IdentifierToken.cs similarity index 70% rename from Nub.Lang/Nub.Lang/Lexing/IdentifierToken.cs rename to Nub.Lang/Nub.Lang/Frontend/Lexing/IdentifierToken.cs index 6fae8d2..332bb85 100644 --- a/Nub.Lang/Nub.Lang/Lexing/IdentifierToken.cs +++ b/Nub.Lang/Nub.Lang/Frontend/Lexing/IdentifierToken.cs @@ -1,4 +1,4 @@ -namespace Nub.Lang.Lexing; +namespace Nub.Lang.Frontend.Lexing; public class IdentifierToken(string value) : Token { diff --git a/Nub.Lang/Nub.Lang/Lexing/Lexer.cs b/Nub.Lang/Nub.Lang/Frontend/Lexing/Lexer.cs similarity index 99% rename from Nub.Lang/Nub.Lang/Lexing/Lexer.cs rename to Nub.Lang/Nub.Lang/Frontend/Lexing/Lexer.cs index dd8065d..8645751 100644 --- a/Nub.Lang/Nub.Lang/Lexing/Lexer.cs +++ b/Nub.Lang/Nub.Lang/Frontend/Lexing/Lexer.cs @@ -1,6 +1,6 @@ using Nub.Core; -namespace Nub.Lang.Lexing; +namespace Nub.Lang.Frontend.Lexing; public class Lexer { diff --git a/Nub.Lang/Nub.Lang/Lexing/LiteralToken.cs b/Nub.Lang/Nub.Lang/Frontend/Lexing/LiteralToken.cs similarity index 78% rename from Nub.Lang/Nub.Lang/Lexing/LiteralToken.cs rename to Nub.Lang/Nub.Lang/Frontend/Lexing/LiteralToken.cs index 8d5b6f1..7128b1a 100644 --- a/Nub.Lang/Nub.Lang/Lexing/LiteralToken.cs +++ b/Nub.Lang/Nub.Lang/Frontend/Lexing/LiteralToken.cs @@ -1,4 +1,4 @@ -namespace Nub.Lang.Lexing; +namespace Nub.Lang.Frontend.Lexing; public class LiteralToken(Type type, string value) : Token { diff --git a/Nub.Lang/Nub.Lang/Lexing/SymbolToken.cs b/Nub.Lang/Nub.Lang/Frontend/Lexing/SymbolToken.cs similarity index 92% rename from Nub.Lang/Nub.Lang/Lexing/SymbolToken.cs rename to Nub.Lang/Nub.Lang/Frontend/Lexing/SymbolToken.cs index d284b8a..4f8595f 100644 --- a/Nub.Lang/Nub.Lang/Lexing/SymbolToken.cs +++ b/Nub.Lang/Nub.Lang/Frontend/Lexing/SymbolToken.cs @@ -1,4 +1,4 @@ -namespace Nub.Lang.Lexing; +namespace Nub.Lang.Frontend.Lexing; public class SymbolToken(Symbol symbol) : Token { diff --git a/Nub.Lang/Nub.Lang/Frontend/Lexing/Token.cs b/Nub.Lang/Nub.Lang/Frontend/Lexing/Token.cs new file mode 100644 index 0000000..c63ca90 --- /dev/null +++ b/Nub.Lang/Nub.Lang/Frontend/Lexing/Token.cs @@ -0,0 +1,3 @@ +namespace Nub.Lang.Frontend.Lexing; + +public abstract class Token; \ No newline at end of file diff --git a/Nub.Lang/Nub.Lang/Parsing/BinaryExpressionNode.cs b/Nub.Lang/Nub.Lang/Frontend/Parsing/BinaryExpressionNode.cs similarity index 92% rename from Nub.Lang/Nub.Lang/Parsing/BinaryExpressionNode.cs rename to Nub.Lang/Nub.Lang/Frontend/Parsing/BinaryExpressionNode.cs index 9d440d0..d2e6f6b 100644 --- a/Nub.Lang/Nub.Lang/Parsing/BinaryExpressionNode.cs +++ b/Nub.Lang/Nub.Lang/Frontend/Parsing/BinaryExpressionNode.cs @@ -1,4 +1,4 @@ -namespace Nub.Lang.Parsing; +namespace Nub.Lang.Frontend.Parsing; public class BinaryExpressionNode(ExpressionNode left, BinaryExpressionOperator @operator, ExpressionNode right) : ExpressionNode { diff --git a/Nub.Lang/Nub.Lang/Parsing/BlockNode.cs b/Nub.Lang/Nub.Lang/Frontend/Parsing/BlockNode.cs similarity index 79% rename from Nub.Lang/Nub.Lang/Parsing/BlockNode.cs rename to Nub.Lang/Nub.Lang/Frontend/Parsing/BlockNode.cs index 496afec..972f19a 100644 --- a/Nub.Lang/Nub.Lang/Parsing/BlockNode.cs +++ b/Nub.Lang/Nub.Lang/Frontend/Parsing/BlockNode.cs @@ -1,4 +1,4 @@ -namespace Nub.Lang.Parsing; +namespace Nub.Lang.Frontend.Parsing; public class BlockNode(IReadOnlyCollection statements) : Node { diff --git a/Nub.Lang/Nub.Lang/Frontend/Parsing/DefinitionNode.cs b/Nub.Lang/Nub.Lang/Frontend/Parsing/DefinitionNode.cs new file mode 100644 index 0000000..b0d239a --- /dev/null +++ b/Nub.Lang/Nub.Lang/Frontend/Parsing/DefinitionNode.cs @@ -0,0 +1,3 @@ +namespace Nub.Lang.Frontend.Parsing; + +public abstract class DefinitionNode : Node; \ No newline at end of file diff --git a/Nub.Lang/Nub.Lang/Parsing/ExpressionNode.cs b/Nub.Lang/Nub.Lang/Frontend/Parsing/ExpressionNode.cs similarity index 85% rename from Nub.Lang/Nub.Lang/Parsing/ExpressionNode.cs rename to Nub.Lang/Nub.Lang/Frontend/Parsing/ExpressionNode.cs index b7ac992..fa7c103 100644 --- a/Nub.Lang/Nub.Lang/Parsing/ExpressionNode.cs +++ b/Nub.Lang/Nub.Lang/Frontend/Parsing/ExpressionNode.cs @@ -1,4 +1,4 @@ -namespace Nub.Lang.Parsing; +namespace Nub.Lang.Frontend.Parsing; public abstract class ExpressionNode : Node { diff --git a/Nub.Lang/Nub.Lang/Parsing/ExternFuncDefinitionNode.cs b/Nub.Lang/Nub.Lang/Frontend/Parsing/ExternFuncDefinitionNode.cs similarity index 93% rename from Nub.Lang/Nub.Lang/Parsing/ExternFuncDefinitionNode.cs rename to Nub.Lang/Nub.Lang/Frontend/Parsing/ExternFuncDefinitionNode.cs index e4fd036..540cb90 100644 --- a/Nub.Lang/Nub.Lang/Parsing/ExternFuncDefinitionNode.cs +++ b/Nub.Lang/Nub.Lang/Frontend/Parsing/ExternFuncDefinitionNode.cs @@ -1,6 +1,6 @@ using Nub.Core; -namespace Nub.Lang.Parsing; +namespace Nub.Lang.Frontend.Parsing; public class ExternFuncDefinitionNode(string name, IReadOnlyCollection parameters, Optional returnType) : DefinitionNode { diff --git a/Nub.Lang/Nub.Lang/Parsing/FuncCall.cs b/Nub.Lang/Nub.Lang/Frontend/Parsing/FuncCall.cs similarity index 86% rename from Nub.Lang/Nub.Lang/Parsing/FuncCall.cs rename to Nub.Lang/Nub.Lang/Frontend/Parsing/FuncCall.cs index 0289a8a..322ce20 100644 --- a/Nub.Lang/Nub.Lang/Parsing/FuncCall.cs +++ b/Nub.Lang/Nub.Lang/Frontend/Parsing/FuncCall.cs @@ -1,4 +1,4 @@ -namespace Nub.Lang.Parsing; +namespace Nub.Lang.Frontend.Parsing; public class FuncCall(string name, IReadOnlyCollection parameters) { diff --git a/Nub.Lang/Nub.Lang/Parsing/FuncCallExpressionNode.cs b/Nub.Lang/Nub.Lang/Frontend/Parsing/FuncCallExpressionNode.cs similarity index 82% rename from Nub.Lang/Nub.Lang/Parsing/FuncCallExpressionNode.cs rename to Nub.Lang/Nub.Lang/Frontend/Parsing/FuncCallExpressionNode.cs index 9837fea..de013d2 100644 --- a/Nub.Lang/Nub.Lang/Parsing/FuncCallExpressionNode.cs +++ b/Nub.Lang/Nub.Lang/Frontend/Parsing/FuncCallExpressionNode.cs @@ -1,4 +1,4 @@ -namespace Nub.Lang.Parsing; +namespace Nub.Lang.Frontend.Parsing; public class FuncCallExpressionNode(FuncCall funcCall) : ExpressionNode { diff --git a/Nub.Lang/Nub.Lang/Parsing/FuncCallStatementNode.cs b/Nub.Lang/Nub.Lang/Frontend/Parsing/FuncCallStatementNode.cs similarity index 82% rename from Nub.Lang/Nub.Lang/Parsing/FuncCallStatementNode.cs rename to Nub.Lang/Nub.Lang/Frontend/Parsing/FuncCallStatementNode.cs index bd60bf5..8b10d5e 100644 --- a/Nub.Lang/Nub.Lang/Parsing/FuncCallStatementNode.cs +++ b/Nub.Lang/Nub.Lang/Frontend/Parsing/FuncCallStatementNode.cs @@ -1,4 +1,4 @@ -namespace Nub.Lang.Parsing; +namespace Nub.Lang.Frontend.Parsing; public class FuncCallStatementNode(FuncCall funcCall) : StatementNode { diff --git a/Nub.Lang/Nub.Lang/Parsing/GlobalVariableDefinitionNode.cs b/Nub.Lang/Nub.Lang/Frontend/Parsing/GlobalVariableDefinitionNode.cs similarity index 82% rename from Nub.Lang/Nub.Lang/Parsing/GlobalVariableDefinitionNode.cs rename to Nub.Lang/Nub.Lang/Frontend/Parsing/GlobalVariableDefinitionNode.cs index 1f4c5d5..04a69d2 100644 --- a/Nub.Lang/Nub.Lang/Parsing/GlobalVariableDefinitionNode.cs +++ b/Nub.Lang/Nub.Lang/Frontend/Parsing/GlobalVariableDefinitionNode.cs @@ -1,4 +1,4 @@ -namespace Nub.Lang.Parsing; +namespace Nub.Lang.Frontend.Parsing; public class GlobalVariableDefinitionNode(string name, ExpressionNode value) : DefinitionNode { diff --git a/Nub.Lang/Nub.Lang/Parsing/IdentifierNode.cs b/Nub.Lang/Nub.Lang/Frontend/Parsing/IdentifierNode.cs similarity index 82% rename from Nub.Lang/Nub.Lang/Parsing/IdentifierNode.cs rename to Nub.Lang/Nub.Lang/Frontend/Parsing/IdentifierNode.cs index c196572..be242b8 100644 --- a/Nub.Lang/Nub.Lang/Parsing/IdentifierNode.cs +++ b/Nub.Lang/Nub.Lang/Frontend/Parsing/IdentifierNode.cs @@ -1,4 +1,4 @@ -namespace Nub.Lang.Parsing; +namespace Nub.Lang.Frontend.Parsing; public class IdentifierNode(string identifier) : ExpressionNode { diff --git a/Nub.Lang/Nub.Lang/Parsing/IfNode.cs b/Nub.Lang/Nub.Lang/Frontend/Parsing/IfNode.cs similarity index 89% rename from Nub.Lang/Nub.Lang/Parsing/IfNode.cs rename to Nub.Lang/Nub.Lang/Frontend/Parsing/IfNode.cs index 40d9f03..b777672 100644 --- a/Nub.Lang/Nub.Lang/Parsing/IfNode.cs +++ b/Nub.Lang/Nub.Lang/Frontend/Parsing/IfNode.cs @@ -1,6 +1,6 @@ using Nub.Core; -namespace Nub.Lang.Parsing; +namespace Nub.Lang.Frontend.Parsing; public class IfNode(ExpressionNode condition, BlockNode body, Optional> @else) : StatementNode { diff --git a/Nub.Lang/Nub.Lang/Parsing/LiteralNode.cs b/Nub.Lang/Nub.Lang/Frontend/Parsing/LiteralNode.cs similarity index 79% rename from Nub.Lang/Nub.Lang/Parsing/LiteralNode.cs rename to Nub.Lang/Nub.Lang/Frontend/Parsing/LiteralNode.cs index d3eccb3..a5065d8 100644 --- a/Nub.Lang/Nub.Lang/Parsing/LiteralNode.cs +++ b/Nub.Lang/Nub.Lang/Frontend/Parsing/LiteralNode.cs @@ -1,4 +1,4 @@ -namespace Nub.Lang.Parsing; +namespace Nub.Lang.Frontend.Parsing; public class LiteralNode(string literal, Type type) : ExpressionNode { diff --git a/Nub.Lang/Nub.Lang/Parsing/LocalFuncDefinitionNode.cs b/Nub.Lang/Nub.Lang/Frontend/Parsing/LocalFuncDefinitionNode.cs similarity index 93% rename from Nub.Lang/Nub.Lang/Parsing/LocalFuncDefinitionNode.cs rename to Nub.Lang/Nub.Lang/Frontend/Parsing/LocalFuncDefinitionNode.cs index b2c0e45..aa65420 100644 --- a/Nub.Lang/Nub.Lang/Parsing/LocalFuncDefinitionNode.cs +++ b/Nub.Lang/Nub.Lang/Frontend/Parsing/LocalFuncDefinitionNode.cs @@ -1,6 +1,6 @@ using Nub.Core; -namespace Nub.Lang.Parsing; +namespace Nub.Lang.Frontend.Parsing; public class LocalFuncDefinitionNode(string name, IReadOnlyCollection parameters, BlockNode body, Optional returnType) : DefinitionNode { diff --git a/Nub.Lang/Nub.Lang/Frontend/Parsing/Node.cs b/Nub.Lang/Nub.Lang/Frontend/Parsing/Node.cs new file mode 100644 index 0000000..0165fd8 --- /dev/null +++ b/Nub.Lang/Nub.Lang/Frontend/Parsing/Node.cs @@ -0,0 +1,3 @@ +namespace Nub.Lang.Frontend.Parsing; + +public abstract class Node; \ No newline at end of file diff --git a/Nub.Lang/Nub.Lang/Parsing/Parser.cs b/Nub.Lang/Nub.Lang/Frontend/Parsing/Parser.cs similarity index 99% rename from Nub.Lang/Nub.Lang/Parsing/Parser.cs rename to Nub.Lang/Nub.Lang/Frontend/Parsing/Parser.cs index 2145779..79456f6 100644 --- a/Nub.Lang/Nub.Lang/Parsing/Parser.cs +++ b/Nub.Lang/Nub.Lang/Frontend/Parsing/Parser.cs @@ -1,8 +1,8 @@ using System.Diagnostics.CodeAnalysis; -using Nub.Lang.Lexing; using Nub.Core; +using Nub.Lang.Frontend.Lexing; -namespace Nub.Lang.Parsing; +namespace Nub.Lang.Frontend.Parsing; public class Parser { diff --git a/Nub.Lang/Nub.Lang/Parsing/ReturnNode.cs b/Nub.Lang/Nub.Lang/Frontend/Parsing/ReturnNode.cs similarity index 80% rename from Nub.Lang/Nub.Lang/Parsing/ReturnNode.cs rename to Nub.Lang/Nub.Lang/Frontend/Parsing/ReturnNode.cs index 8a9141d..44d53e7 100644 --- a/Nub.Lang/Nub.Lang/Parsing/ReturnNode.cs +++ b/Nub.Lang/Nub.Lang/Frontend/Parsing/ReturnNode.cs @@ -1,6 +1,6 @@ using Nub.Core; -namespace Nub.Lang.Parsing; +namespace Nub.Lang.Frontend.Parsing; public class ReturnNode(Optional value) : StatementNode { diff --git a/Nub.Lang/Nub.Lang/Frontend/Parsing/StatementNode.cs b/Nub.Lang/Nub.Lang/Frontend/Parsing/StatementNode.cs new file mode 100644 index 0000000..9ad7834 --- /dev/null +++ b/Nub.Lang/Nub.Lang/Frontend/Parsing/StatementNode.cs @@ -0,0 +1,3 @@ +namespace Nub.Lang.Frontend.Parsing; + +public abstract class StatementNode : Node; \ No newline at end of file diff --git a/Nub.Lang/Nub.Lang/Parsing/Syscall.cs b/Nub.Lang/Nub.Lang/Frontend/Parsing/Syscall.cs similarity index 78% rename from Nub.Lang/Nub.Lang/Parsing/Syscall.cs rename to Nub.Lang/Nub.Lang/Frontend/Parsing/Syscall.cs index 93c2a61..eb76aaf 100644 --- a/Nub.Lang/Nub.Lang/Parsing/Syscall.cs +++ b/Nub.Lang/Nub.Lang/Frontend/Parsing/Syscall.cs @@ -1,4 +1,4 @@ -namespace Nub.Lang.Parsing; +namespace Nub.Lang.Frontend.Parsing; public class Syscall(IReadOnlyCollection parameters) { diff --git a/Nub.Lang/Nub.Lang/Parsing/SyscallExpressionNode.cs b/Nub.Lang/Nub.Lang/Frontend/Parsing/SyscallExpressionNode.cs similarity index 74% rename from Nub.Lang/Nub.Lang/Parsing/SyscallExpressionNode.cs rename to Nub.Lang/Nub.Lang/Frontend/Parsing/SyscallExpressionNode.cs index e4f5949..0426ead 100644 --- a/Nub.Lang/Nub.Lang/Parsing/SyscallExpressionNode.cs +++ b/Nub.Lang/Nub.Lang/Frontend/Parsing/SyscallExpressionNode.cs @@ -1,4 +1,4 @@ -namespace Nub.Lang.Parsing; +namespace Nub.Lang.Frontend.Parsing; public class SyscallExpressionNode(Syscall syscall) : ExpressionNode { diff --git a/Nub.Lang/Nub.Lang/Parsing/SyscallStatementNode.cs b/Nub.Lang/Nub.Lang/Frontend/Parsing/SyscallStatementNode.cs similarity index 74% rename from Nub.Lang/Nub.Lang/Parsing/SyscallStatementNode.cs rename to Nub.Lang/Nub.Lang/Frontend/Parsing/SyscallStatementNode.cs index a48f182..48fedb1 100644 --- a/Nub.Lang/Nub.Lang/Parsing/SyscallStatementNode.cs +++ b/Nub.Lang/Nub.Lang/Frontend/Parsing/SyscallStatementNode.cs @@ -1,4 +1,4 @@ -namespace Nub.Lang.Parsing; +namespace Nub.Lang.Frontend.Parsing; public class SyscallStatementNode(Syscall syscall) : StatementNode { diff --git a/Nub.Lang/Nub.Lang/Parsing/VariableAssignmentNode.cs b/Nub.Lang/Nub.Lang/Frontend/Parsing/VariableAssignmentNode.cs similarity index 81% rename from Nub.Lang/Nub.Lang/Parsing/VariableAssignmentNode.cs rename to Nub.Lang/Nub.Lang/Frontend/Parsing/VariableAssignmentNode.cs index 0805b53..e76cb63 100644 --- a/Nub.Lang/Nub.Lang/Parsing/VariableAssignmentNode.cs +++ b/Nub.Lang/Nub.Lang/Frontend/Parsing/VariableAssignmentNode.cs @@ -1,4 +1,4 @@ -namespace Nub.Lang.Parsing; +namespace Nub.Lang.Frontend.Parsing; public class VariableAssignmentNode(string name, ExpressionNode value) : StatementNode { diff --git a/Nub.Lang/Nub.Lang/Parsing/VariableReassignmentNode.cs b/Nub.Lang/Nub.Lang/Frontend/Parsing/VariableReassignmentNode.cs similarity index 81% rename from Nub.Lang/Nub.Lang/Parsing/VariableReassignmentNode.cs rename to Nub.Lang/Nub.Lang/Frontend/Parsing/VariableReassignmentNode.cs index 147807b..74fa9a4 100644 --- a/Nub.Lang/Nub.Lang/Parsing/VariableReassignmentNode.cs +++ b/Nub.Lang/Nub.Lang/Frontend/Parsing/VariableReassignmentNode.cs @@ -1,4 +1,4 @@ -namespace Nub.Lang.Parsing; +namespace Nub.Lang.Frontend.Parsing; public class VariableReassignmentNode(string name, ExpressionNode value) : StatementNode { diff --git a/Nub.Lang/Nub.Lang/Typing/ExpressionTyper.cs b/Nub.Lang/Nub.Lang/Frontend/Typing/ExpressionTyper.cs similarity index 99% rename from Nub.Lang/Nub.Lang/Typing/ExpressionTyper.cs rename to Nub.Lang/Nub.Lang/Frontend/Typing/ExpressionTyper.cs index a2ff298..151ca39 100644 --- a/Nub.Lang/Nub.Lang/Typing/ExpressionTyper.cs +++ b/Nub.Lang/Nub.Lang/Frontend/Typing/ExpressionTyper.cs @@ -1,7 +1,7 @@ using Nub.Core; -using Nub.Lang.Parsing; +using Nub.Lang.Frontend.Parsing; -namespace Nub.Lang.Typing; +namespace Nub.Lang.Frontend.Typing; public class Func(string name, IReadOnlyCollection parameters, Optional body, Optional returnType) { diff --git a/Nub.Lang/Nub.Lang/Lexing/Token.cs b/Nub.Lang/Nub.Lang/Lexing/Token.cs deleted file mode 100644 index 7e4da5f..0000000 --- a/Nub.Lang/Nub.Lang/Lexing/Token.cs +++ /dev/null @@ -1,3 +0,0 @@ -namespace Nub.Lang.Lexing; - -public abstract class Token; \ No newline at end of file diff --git a/Nub.Lang/Nub.Lang/Output/build.sh b/Nub.Lang/Nub.Lang/Output/build.sh deleted file mode 100644 index 3607710..0000000 --- a/Nub.Lang/Nub.Lang/Output/build.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -nasm -g -felf64 out.asm -o out.o -nasm -g -felf64 core/strlen.asm -o strlen.o -nasm -g -felf64 core/strcmp.asm -o strcmp.o - -ld -o out out.o strlen.o strcmp.o diff --git a/Nub.Lang/Nub.Lang/Parsing/DefinitionNode.cs b/Nub.Lang/Nub.Lang/Parsing/DefinitionNode.cs deleted file mode 100644 index 85e10d6..0000000 --- a/Nub.Lang/Nub.Lang/Parsing/DefinitionNode.cs +++ /dev/null @@ -1,3 +0,0 @@ -namespace Nub.Lang.Parsing; - -public abstract class DefinitionNode : Node; \ No newline at end of file diff --git a/Nub.Lang/Nub.Lang/Parsing/Node.cs b/Nub.Lang/Nub.Lang/Parsing/Node.cs deleted file mode 100644 index f23e16c..0000000 --- a/Nub.Lang/Nub.Lang/Parsing/Node.cs +++ /dev/null @@ -1,3 +0,0 @@ -namespace Nub.Lang.Parsing; - -public abstract class Node; \ No newline at end of file diff --git a/Nub.Lang/Nub.Lang/Parsing/StatementNode.cs b/Nub.Lang/Nub.Lang/Parsing/StatementNode.cs deleted file mode 100644 index d2c8544..0000000 --- a/Nub.Lang/Nub.Lang/Parsing/StatementNode.cs +++ /dev/null @@ -1,3 +0,0 @@ -namespace Nub.Lang.Parsing; - -public abstract class StatementNode : Node; \ No newline at end of file diff --git a/Nub.Lang/Nub.Lang/Program.cs b/Nub.Lang/Nub.Lang/Program.cs index 5492bed..269d5b0 100644 --- a/Nub.Lang/Nub.Lang/Program.cs +++ b/Nub.Lang/Nub.Lang/Program.cs @@ -1,7 +1,7 @@ -using Nub.Lang.Generation; -using Nub.Lang.Lexing; -using Nub.Lang.Parsing; -using Nub.Lang.Typing; +using Nub.Lang.Backend.Custom; +using Nub.Lang.Frontend.Lexing; +using Nub.Lang.Frontend.Parsing; +using Nub.Lang.Frontend.Typing; var src = File.ReadAllText(args[0]); @@ -14,7 +14,7 @@ var definitions = parser.Parse(); var typer = new ExpressionTyper(definitions); typer.Populate(); -var generator = new Generator(definitions); +var generator = new CustomGenerator(definitions); var asm = generator.Generate(); Console.WriteLine(asm); diff --git a/Nub.Lang/Nub.Lang/Input/core/print.nub b/Nub.Lang/Nub.Lang/input/core/print.nub similarity index 100% rename from Nub.Lang/Nub.Lang/Input/core/print.nub rename to Nub.Lang/Nub.Lang/input/core/print.nub diff --git a/Nub.Lang/Nub.Lang/Output/core/strcmp.asm b/Nub.Lang/Nub.Lang/input/core/string/strcmp.asm similarity index 100% rename from Nub.Lang/Nub.Lang/Output/core/strcmp.asm rename to Nub.Lang/Nub.Lang/input/core/string/strcmp.asm diff --git a/Nub.Lang/Nub.Lang/Input/core/utils.nub b/Nub.Lang/Nub.Lang/input/core/string/strcmp.nub similarity index 61% rename from Nub.Lang/Nub.Lang/Input/core/utils.nub rename to Nub.Lang/Nub.Lang/input/core/string/strcmp.nub index dae83b1..aa81777 100644 --- a/Nub.Lang/Nub.Lang/Input/core/utils.nub +++ b/Nub.Lang/Nub.Lang/input/core/string/strcmp.nub @@ -1,4 +1,3 @@ namespace core; -extern func strlen(msg: String): int64; extern func strcmp(a: String, b: String): bool; diff --git a/Nub.Lang/Nub.Lang/Output/core/strlen.asm b/Nub.Lang/Nub.Lang/input/core/string/strlen.asm similarity index 100% rename from Nub.Lang/Nub.Lang/Output/core/strlen.asm rename to Nub.Lang/Nub.Lang/input/core/string/strlen.asm diff --git a/Nub.Lang/Nub.Lang/input/core/string/strlen.nub b/Nub.Lang/Nub.Lang/input/core/string/strlen.nub new file mode 100644 index 0000000..eb59ffa --- /dev/null +++ b/Nub.Lang/Nub.Lang/input/core/string/strlen.nub @@ -0,0 +1,3 @@ +namespace core; + +extern func strlen(msg: String): int64; diff --git a/Nub.Lang/Nub.Lang/Input/program.nub b/Nub.Lang/Nub.Lang/input/program.nub similarity index 100% rename from Nub.Lang/Nub.Lang/Input/program.nub rename to Nub.Lang/Nub.Lang/input/program.nub diff --git a/Nub.Lang/Nub.Lang/output/build.sh b/Nub.Lang/Nub.Lang/output/build.sh new file mode 100644 index 0000000..4acf5dc --- /dev/null +++ b/Nub.Lang/Nub.Lang/output/build.sh @@ -0,0 +1,6 @@ +#!/bin/sh +nasm -g -felf64 out.asm -o out.o +nasm -g -felf64 ../input/core/string/strlen.asm -o strlen.o +nasm -g -felf64 ../input/core/string/strcmp.asm -o strcmp.o + +ld -o out out.o strlen.o strcmp.o diff --git a/Nub.Lang/Nub.Lang/Output/debug.sh b/Nub.Lang/Nub.Lang/output/debug.sh similarity index 100% rename from Nub.Lang/Nub.Lang/Output/debug.sh rename to Nub.Lang/Nub.Lang/output/debug.sh diff --git a/Nub.Lang/Nub.Lang/Output/run.sh b/Nub.Lang/Nub.Lang/output/run.sh similarity index 100% rename from Nub.Lang/Nub.Lang/Output/run.sh rename to Nub.Lang/Nub.Lang/output/run.sh