diff --git a/Convention/[Symbolization]/Internal/Functional.cs b/Convention/[Symbolization]/Internal/Functional.cs index e8c8f93..692bcda 100644 --- a/Convention/[Symbolization]/Internal/Functional.cs +++ b/Convention/[Symbolization]/Internal/Functional.cs @@ -6,11 +6,13 @@ using System.Threading.Tasks; namespace Convention.Symbolization.Internal { - public class Function : Variable + public abstract class Function : Variable { - public Variable Invoke(Variable[] parameters) + public readonly FunctionSymbol FunctionInfo; + public abstract Variable Invoke(Variable[] parameters); + public Function(string symbolName, Type returnType, Type[] parameterTypes, Modification[] modifiers) { - + FunctionInfo = new(symbolName, returnType, parameterTypes, modifiers); } } diff --git a/Convention/[Symbolization]/Internal/Modification.cs b/Convention/[Symbolization]/Internal/Modification.cs index b2e4562..b93e692 100644 --- a/Convention/[Symbolization]/Internal/Modification.cs +++ b/Convention/[Symbolization]/Internal/Modification.cs @@ -6,7 +6,7 @@ using System.Threading.Tasks; namespace Convention.Symbolization.Internal { - public class Modification : Variable + public abstract class Modification : Variable { } } diff --git a/Convention/[Symbolization]/Internal/Structure.cs b/Convention/[Symbolization]/Internal/Structure.cs new file mode 100644 index 0000000..93a5f08 --- /dev/null +++ b/Convention/[Symbolization]/Internal/Structure.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Convention.Symbolization.Internal +{ + public sealed class Structure : Variable + { + public readonly string Name; + private Dictionary VariableSymbolAndDefaultValue; + + private Structure(string name) + { + this.Name = name; + } + public Structure(string name, Dictionary variableSymbolAndDefaultValue) + { + this.Name = name; + this.VariableSymbolAndDefaultValue = variableSymbolAndDefaultValue; + } + + public override object Clone() + { + Structure target = new(Name); + foreach (var pair in VariableSymbolAndDefaultValue) + { + target.VariableSymbolAndDefaultValue[pair.Key] = pair.Value; + } + return target; + } + } +} diff --git a/Convention/[Symbolization]/Internal/Variable.cs b/Convention/[Symbolization]/Internal/Variable.cs index 305777b..d525b88 100644 --- a/Convention/[Symbolization]/Internal/Variable.cs +++ b/Convention/[Symbolization]/Internal/Variable.cs @@ -6,9 +6,9 @@ using System.Threading.Tasks; namespace Convention.Symbolization.Internal { - public class Variable + public abstract class Variable : ICloneable { - + public abstract object Clone(); } public readonly struct VariableSymbol