From 15878d7e3ba294218840483eb80002146d276c43 Mon Sep 17 00:00:00 2001 From: ninemine <106434473+NINEMINEsigma@users.noreply.github.com> Date: Wed, 2 Jul 2025 18:46:09 +0800 Subject: [PATCH] EP 0.1.1 --- Convention/[Symbolization]/Detail/Keyword.cs | 100 ++++++++++++++---- .../[Symbolization]/Detail/Namespace.cs | 3 +- .../[Symbolization]/Detail/PrimitiveType.cs | 4 + Convention/[Symbolization]/Detail/Variable.cs | 4 + Convention/[Symbolization]/Symbolization.cs | 5 + 5 files changed, 93 insertions(+), 23 deletions(-) diff --git a/Convention/[Symbolization]/Detail/Keyword.cs b/Convention/[Symbolization]/Detail/Keyword.cs index 55c99ac..6f9942f 100644 --- a/Convention/[Symbolization]/Detail/Keyword.cs +++ b/Convention/[Symbolization]/Detail/Keyword.cs @@ -16,11 +16,6 @@ namespace Convention.Symbolization.Internal public static readonly Dictionary Keywords = new(); public abstract SymbolizationContext Execute(SymbolizationContext context, Variable[] leftParameters, Variable[] rightParameters); - - public override string ToString() - { - return SymbolInfo.SymbolName; - } } public abstract class Keyword : Keyword where T:Keyword,new() @@ -49,19 +44,6 @@ namespace Convention.Symbolization.Internal namespace Convention.Symbolization.Keyword { - public sealed class ExitScope : Internal.Keyword - { - public ExitScope() : base("__exit_scope__") - { - } - - public override SymbolizationContext Execute(SymbolizationContext context, Internal.Variable[] leftParameters, Internal.Variable[] rightParameters) - { - context.CurrentNamespace.EndAndTApplyUpdate(); - return context.ParentContext; - } - } - public sealed class Namespace : Internal.Keyword { public Namespace() : base("namespace") @@ -80,6 +62,69 @@ namespace Convention.Symbolization.Keyword } } + public sealed class Return : Internal.Keyword + { + public Return() : base("return") + { + } + + public override SymbolizationContext Execute(SymbolizationContext context, Internal.Variable[] leftParameters, Internal.Variable[] rightParameters) + { + if (leftParameters.Length != 0) + throw new InvalidGrammarException($"{this}: has invalid subject"); + if (rightParameters.Length > 1) + throw new InvalidGrammarException($"{this}: has invalid object"); + // Inject return command to context + return context; + } + } + + public sealed class While : Internal.Keyword + { + public While() : base("while") + { + } + public override SymbolizationContext Execute(SymbolizationContext context, Internal.Variable[] leftParameters, Internal.Variable[] rightParameters) + { + if (leftParameters.Length != 0) + throw new InvalidGrammarException($"{this}: needs to have one and only one subject"); + if (rightParameters.Length != 1) + throw new InvalidGrammarException($"{this}: has invalid object"); + SymbolizationContext subContext + return context; + } + } + + public sealed class Break : Internal.Keyword + { + public Break() : base("break") + { + } + public override SymbolizationContext Execute(SymbolizationContext context, Internal.Variable[] leftParameters, Internal.Variable[] rightParameters) + { + if (leftParameters.Length != 0) + throw new InvalidGrammarException($"{this}: has invalid subject"); + if (rightParameters.Length != 0) + throw new InvalidGrammarException($"{this}: has invalid object"); + return context; + } + } + + public sealed class Continue : Internal.Keyword + { + public Continue() : base("continue") + { + } + public override SymbolizationContext Execute(SymbolizationContext context, Internal.Variable[] leftParameters, Internal.Variable[] rightParameters) + { + if (leftParameters.Length != 0) + throw new InvalidGrammarException($"{this}: has invalid subject"); + if (rightParameters.Length != 0) + throw new InvalidGrammarException($"{this}: has invalid object"); + return context; + } + } + public sealed class Structure : Internal.Keyword { public Structure() : base("struct") @@ -92,10 +137,21 @@ namespace Convention.Symbolization.Keyword throw new InvalidGrammarException($"{this}: has invalid subject"); if (rightParameters.Length != 1) throw new InvalidGrammarException($"{this}: needs to have one and only one object"); - Internal.Namespace subNamespace = context.CurrentNamespace.CreateOrGetSubNamespace(rightParameters[0].ToString()); - subNamespace.BeginUpdate(); - SymbolizationContext subContext = new(context, subNamespace); - return subContext; + return context; + } + + public sealed class Function : Internal.Keyword + { + public Function() : base("def") + { + } + + public override SymbolizationContext Execute(SymbolizationContext context, Internal.Variable[] leftParameters, Internal.Variable[] rightParameters) + { + if (leftParameters.Length != 0) + throw new InvalidGrammarException($"{this}: has invalid subject"); + + } } } } diff --git a/Convention/[Symbolization]/Detail/Namespace.cs b/Convention/[Symbolization]/Detail/Namespace.cs index ac16fb3..1130d52 100644 --- a/Convention/[Symbolization]/Detail/Namespace.cs +++ b/Convention/[Symbolization]/Detail/Namespace.cs @@ -45,11 +45,12 @@ namespace Convention.Symbolization.Internal Structures.Add(structure.SymbolInfo.SymbolName, structure); } - public void EndAndTApplyUpdate() + public bool EndAndTApplyUpdate() { Updateable--; if (Updateable == 0) Refresh(); + return Updateable == 0; } private readonly Dictionary SymbolCounter = new(); diff --git a/Convention/[Symbolization]/Detail/PrimitiveType.cs b/Convention/[Symbolization]/Detail/PrimitiveType.cs index 90a5a3f..20954c4 100644 --- a/Convention/[Symbolization]/Detail/PrimitiveType.cs +++ b/Convention/[Symbolization]/Detail/PrimitiveType.cs @@ -49,5 +49,9 @@ namespace Convention.Symbolization.Primitive { return this.Value.Equals(other.Value); } + public override string ToString() + { + return Value.ToString(); + } } } diff --git a/Convention/[Symbolization]/Detail/Variable.cs b/Convention/[Symbolization]/Detail/Variable.cs index e6a797d..ebe3d66 100644 --- a/Convention/[Symbolization]/Detail/Variable.cs +++ b/Convention/[Symbolization]/Detail/Variable.cs @@ -22,6 +22,10 @@ namespace Convention.Symbolization.Internal { return base.GetHashCode(); } + public override string ToString() + { + return SymbolInfo.SymbolName; + } } diff --git a/Convention/[Symbolization]/Symbolization.cs b/Convention/[Symbolization]/Symbolization.cs index 44c6f16..73f3736 100644 --- a/Convention/[Symbolization]/Symbolization.cs +++ b/Convention/[Symbolization]/Symbolization.cs @@ -19,6 +19,11 @@ namespace Convention.Symbolization public readonly SymbolizationContext ParentContext; public readonly Dictionary Variables = new(); public readonly Internal.Namespace CurrentNamespace; + + public SymbolizationContext Compile() + { + return this; + } } public class SymbolizationRunner