diff --git a/Convention/[Symbolization]/Detail/Keyword.cs b/Convention/[Symbolization]/Detail/Keyword.cs index 7e112e4..cc09a61 100644 --- a/Convention/[Symbolization]/Detail/Keyword.cs +++ b/Convention/[Symbolization]/Detail/Keyword.cs @@ -53,7 +53,7 @@ namespace Convention.Symbolization.Keyword } /// - /// name + /// name { ... } /// public sealed class Namespace : Internal.Keyword { @@ -63,7 +63,7 @@ namespace Convention.Symbolization.Keyword } /// - /// FunctionName(type1 arg1, type args...) -> return-type + /// FunctionName(parameter-list) -> return-type { ... return return-type-instance; } /// public sealed class FunctionDef : Internal.Keyword { @@ -73,7 +73,7 @@ namespace Convention.Symbolization.Keyword } /// - /// symbol + /// symbol; /// public sealed class Return : Internal.Keyword { @@ -83,7 +83,7 @@ namespace Convention.Symbolization.Keyword } /// - /// (bool-expression) + /// (bool-expression) expression /// public sealed class If : Internal.Keyword { @@ -103,7 +103,7 @@ namespace Convention.Symbolization.Keyword } /// - /// (bool-expression) + /// (bool-expression) expression /// public sealed class While : Internal.Keyword { @@ -113,7 +113,7 @@ namespace Convention.Symbolization.Keyword } /// - /// + /// ; /// public sealed class Break : Internal.Keyword { @@ -123,7 +123,7 @@ namespace Convention.Symbolization.Keyword } /// - /// + /// ; /// public sealed class Continue : Internal.Keyword { @@ -133,7 +133,7 @@ namespace Convention.Symbolization.Keyword } /// - /// structureName + /// structureName { ... } /// public sealed class Structure : Internal.Keyword { diff --git a/Convention/[Symbolization]/Detail/ScriptWordVariable.cs b/Convention/[Symbolization]/Detail/ScriptWordVariable.cs new file mode 100644 index 0000000..e9a7c43 --- /dev/null +++ b/Convention/[Symbolization]/Detail/ScriptWordVariable.cs @@ -0,0 +1,38 @@ +namespace Convention.Symbolization.Internal +{ + public class ScriptWordVariable : CloneableVariable + { + public readonly string word; + + public ScriptWordVariable(string word) : base("") + { + this.word = word; + } + + public override ScriptWordVariable CloneVariable(string targetSymbolName) + { + return new ScriptWordVariable(word); + } + + public override bool Equals(ScriptWordVariable other) + { + return other is not null && word.Equals(other.word); + } + + public Keyword GetKeyword() + { + if(Keyword.Keywords.TryGetValue(word, out var keyword)) + return keyword; + return null; + } + + public Variable GetVariable(SymbolizationContext context) + { + if (context.Variables.TryGetValue(word, out var variable)) + { + return variable; + } + return null; + } + } +} diff --git a/Convention/[Symbolization]/Symbolization.cs b/Convention/[Symbolization]/Symbolization.cs index 73f3736..1a208c1 100644 --- a/Convention/[Symbolization]/Symbolization.cs +++ b/Convention/[Symbolization]/Symbolization.cs @@ -17,6 +17,8 @@ namespace Convention.Symbolization } public readonly SymbolizationContext ParentContext; + public readonly Dictionary> ScriptWords = new(); + public readonly Dictionary> ScriptCommands = new(); public readonly Dictionary Variables = new(); public readonly Internal.Namespace CurrentNamespace;