EP Symbolization 重构line-word-index

This commit is contained in:
ninemine
2025-07-05 16:57:59 +08:00
parent 8123ed4b15
commit 522010e7cd
9 changed files with 132 additions and 85 deletions

View File

@@ -31,7 +31,7 @@ namespace Convention.Symbolization.Internal
public abstract class Variable<T> : Variable, IEquatable<T>
{
protected Variable(string symbolName) : base(new VariableSymbol(symbolName, typeof(T))) { }
protected Variable(string symbolName, int lineIndex, int wordIndex) : base(new VariableSymbol(symbolName, typeof(T), lineIndex, wordIndex)) { }
public abstract bool Equals(T other);
public override bool Equals(Variable other)
@@ -62,24 +62,24 @@ namespace Convention.Symbolization.Internal
public abstract class CloneableVariable<T> : Variable<T>, ICloneable
{
protected CloneableVariable(string symbolName) : base(symbolName)
protected CloneableVariable(string symbolName, int lineIndex, int wordIndex) : base(symbolName, lineIndex, wordIndex)
{
}
public object Clone() => CloneVariable(SymbolInfo.SymbolName);
public object Clone() => CloneVariable(SymbolInfo.SymbolName, 0, 0);
public abstract T CloneVariable(string targetSymbolName);
public abstract T CloneVariable(string targetSymbolName, int lineIndex, int wordIndex);
}
public sealed class NullVariable : CloneableVariable<NullVariable>
{
public NullVariable(string symbolName) : base(symbolName)
public NullVariable(string symbolName, int lineIndex, int wordIndex) : base(symbolName, lineIndex, wordIndex)
{
}
public override NullVariable CloneVariable(string targetSymbolName)
public override NullVariable CloneVariable(string targetSymbolName, int lineIndex, int wordIndex)
{
return new(targetSymbolName);
return new(targetSymbolName, lineIndex, wordIndex);
}
public override bool Equals(NullVariable other)
@@ -90,13 +90,17 @@ namespace Convention.Symbolization.Internal
public readonly struct VariableSymbol
{
public readonly int LineIndex;
public readonly int WordIndex;
public readonly string SymbolName;
public readonly Type VariableType;
public VariableSymbol(string symbolName, Type variableType)
public VariableSymbol(string symbolName, Type variableType, int lineIndex,int wordIndex)
{
this.SymbolName = symbolName;
this.VariableType = variableType;
this.LineIndex = lineIndex;
this.WordIndex = wordIndex;
}
public bool Equals(VariableSymbol other)