Files
Convention-CSharp/Convention/[Symbolization]/Runner/SymbolizationContext.cs

72 lines
2.3 KiB
C#
Raw Normal View History

2025-07-03 21:50:26 +08:00
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace Convention.Symbolization
{
public class SymbolizationContext
{
public SymbolizationContext() : this(null, Internal.Namespace.CreateRootNamespace()) { }
public SymbolizationContext(SymbolizationContext parent) : this(parent, parent.CurrentNamespace) { }
public SymbolizationContext(SymbolizationContext parent, Internal.Namespace newNamespace)
{
this.ParentContext = parent;
this.CurrentNamespace = newNamespace;
}
private readonly SymbolizationContext ParentContext;
public readonly Internal.Namespace CurrentNamespace;
2025-07-07 00:28:37 +08:00
private void CompileToParent()
2025-07-05 16:57:59 +08:00
{
2025-07-07 00:28:37 +08:00
if (ParentContext == null)
return;
2025-07-05 16:57:59 +08:00
}
2025-07-04 23:00:41 +08:00
2025-07-07 00:28:37 +08:00
// Compile begin at scope words to sub context
public void Compile(Dictionary<Internal.Keyword, List<Internal.Variable>> scopeWords)
2025-07-04 23:00:41 +08:00
{
2025-07-07 00:28:37 +08:00
foreach (var (keyword, words) in scopeWords)
{
}
}
// Compile begin at script words to scope words
private void CompileBeginAtScript2Scope(Internal.SymbolizationReader reader)
{
foreach (var word in reader.ScriptWords)
{
reader.ReadWord(word);
}
this.Compile(reader.ScopeWords);
}
// Compile begin at script words to scope words
public void Compile(List<Internal.Variable> scriptWords)
{
this.CompileBeginAtScript2Scope(new() { ScriptWords = scriptWords });
2025-07-04 23:00:41 +08:00
}
2025-07-07 00:28:37 +08:00
// Compile begin at text to script words
2025-07-03 21:50:26 +08:00
public void Compile(string allText)
{
Internal.SymbolizationReader reader = new();
2025-07-07 00:28:37 +08:00
reader ??= new();
2025-07-03 21:50:26 +08:00
foreach (char ch in allText)
reader.ReadChar(ch);
2025-07-04 21:39:02 +08:00
// Turn the script words into scope words
2025-07-07 00:28:37 +08:00
this.CompileBeginAtScript2Scope(reader);
2025-07-03 21:50:26 +08:00
}
2025-07-07 00:28:37 +08:00
// Compile begin at text to script words
2025-07-03 21:50:26 +08:00
public void Compile(ToolFile file)
{
if (file.Exists() == false)
throw new FileNotFoundException($"File not found: {file}", file);
var text = file.LoadAsText();
this.Compile(text);
}
}
}