From 48bf6bcc0f29827a77553f0e088050c04eadf708 Mon Sep 17 00:00:00 2001 From: Creeper Lv Date: Sun, 20 Jul 2025 01:50:28 +0800 Subject: [PATCH] Working on the assembler. --- src/SVM.Assembler.Core/Assembler.cs | 38 +++++++++++++++++++ .../SVM.Assembler.Core.csproj | 2 +- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/SVM.Assembler.Core/Assembler.cs b/src/SVM.Assembler.Core/Assembler.cs index bbc4fd7..1887fda 100644 --- a/src/SVM.Assembler.Core/Assembler.cs +++ b/src/SVM.Assembler.Core/Assembler.cs @@ -68,6 +68,7 @@ LabelConstant InternalLbl lexer.Content = input; lexer.SourceID = ID; OperationResult operationResult = new OperationResult(); + InternalLabel CurrentLabel = InternalLabel.Code; while (true) { var lexResult = lexer.Lex(); @@ -76,8 +77,40 @@ LabelConstant InternalLbl switch (r.LexSegmentId) { case "InternalLbl": + switch (r.LexMatchedItemId) + { + case "LabelCode": + CurrentLabel = InternalLabel.Code; + break; + case "LabelData": + CurrentLabel = InternalLabel.Data; + break; + case "LabelConstant": + CurrentLabel = InternalLabel.Const; + break; + default: + break; + } break; default: + switch (CurrentLabel) + { + case InternalLabel.Code: + switch (r.LexSegmentId) + { + case "GenericLabel": + break; + default: + break; + } + break; + case InternalLabel.Data: + break; + case InternalLabel.Const: + break; + default: + break; + } break; } } @@ -85,10 +118,15 @@ LabelConstant InternalLbl return operationResult; } } + public enum InternalLabel + { + Code, Data, Const + } [Serializable] public class IntermediateObject { public Dictionary data = new Dictionary(); + public Dictionary consts = new Dictionary(); public List instructions = new List(); } [Serializable] diff --git a/src/SVM.Assembler.Core/SVM.Assembler.Core.csproj b/src/SVM.Assembler.Core/SVM.Assembler.Core.csproj index 623f403..3f0e0c6 100644 --- a/src/SVM.Assembler.Core/SVM.Assembler.Core.csproj +++ b/src/SVM.Assembler.Core/SVM.Assembler.Core.csproj @@ -6,7 +6,7 @@ - +