using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Convention.Symbolization.Internal { public abstract class Keyword : Variable { protected Keyword(string keyword, Type realType) : base(new(keyword, realType)) { Keywords.Add(keyword, this); } public static readonly Dictionary Keywords = new(); } public abstract class Keyword : Keyword where T:Keyword,new() { private static T MyInstance = new(); public static T Instance { get { return MyInstance; } } protected Keyword(string keyword) : base(keyword, typeof(T)) { } public override bool Equals(Variable other) { return MyInstance == other; } } } namespace Convention.Symbolization.Keyword { /// /// namespace-expression /// public sealed class Import : Internal.Keyword { public Import() : base("import") { } } /// /// name { ... } /// public sealed class Namespace : Internal.Keyword { public Namespace() : base("namespace") { } } /// /// FunctionName(parameter-list) -> return-type { ... return return-type-instance; } /// public sealed class FunctionDef : Internal.Keyword { public FunctionDef() : base("def") { } } /// /// symbol; /// public sealed class Return : Internal.Keyword { public Return() : base("return") { } } /// /// (bool-expression) expression /// public sealed class If : Internal.Keyword { public If() : base("if") { } } /// /// expression expression /// public sealed class Else : Internal.Keyword { public Else() : base("else") { } } /// /// (bool-expression) expression /// public sealed class While : Internal.Keyword { public While() : base("while") { } } /// /// ; /// public sealed class Break : Internal.Keyword { public Break() : base("break") { } } /// /// ; /// public sealed class Continue : Internal.Keyword { public Continue() : base("continue") { } } /// /// structureName { ... } /// public sealed class Structure : Internal.Keyword { public Structure() : base("struct") { } } }