parent
20e82c6f4f
commit
580f2d505a
|
@ -31,7 +31,7 @@ public class CodeGeneratorVisitor(ICompilerLogger? logger = null) : TypeCheckVis
|
|||
|
||||
public override void PostVisit(ConstDeclaration constDeclaration)
|
||||
{
|
||||
base.PreVisit(constDeclaration);
|
||||
base.PostVisit(constDeclaration);
|
||||
|
||||
(IdentifierSemanticToken token, ConstValue constValue) = constDeclaration.ConstValue;
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ public abstract class PascalType : IEquatable<PascalType>
|
|||
return false;
|
||||
}
|
||||
|
||||
return IsReference == other.IsReference;
|
||||
return true;
|
||||
}
|
||||
|
||||
public T Convert<T>() where T : PascalType
|
||||
|
|
|
@ -44,7 +44,16 @@ public class SymbolTable
|
|||
/// </summary>
|
||||
/// <param name="symbol">欲添加的符号</param>
|
||||
/// <returns>是否添加成功</returns>
|
||||
public bool TryAddSymbol(Symbol symbol) => _symbols.TryAdd(symbol.SymbolName, symbol);
|
||||
public bool TryAddSymbol(Symbol symbol)
|
||||
{
|
||||
if (_symbols.ContainsKey(symbol.SymbolName))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
_symbols.Add(symbol.SymbolName, symbol);
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 尝试从符号表极其父符号表查找符号
|
||||
|
|
|
@ -22,7 +22,7 @@ public class TypeCheckVisitor(ICompilerLogger? logger = null) : SyntaxNodeVisito
|
|||
|
||||
public override void PreVisit(ConstDeclaration constDeclaration)
|
||||
{
|
||||
base.PostVisit(constDeclaration);
|
||||
base.PreVisit(constDeclaration);
|
||||
|
||||
(IdentifierSemanticToken token, ConstValue constValue) = constDeclaration.ConstValue;
|
||||
|
||||
|
|
|
@ -54,4 +54,14 @@ public class SymbolTableTests
|
|||
Assert.True(table.TryGetSymbol("temperature", out Symbol? temp));
|
||||
Assert.Equal(PascalBasicType.Real, temp.SymbolType);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DuplicatedTest()
|
||||
{
|
||||
SymbolTable table = new();
|
||||
|
||||
Assert.True(table.TryAddSymbol(
|
||||
new Symbol{SymbolName = "a", SymbolType = PascalBasicType.Integer, Const = true}));
|
||||
Assert.False(table.TryAddSymbol(new Symbol{SymbolName = "a", SymbolType = PascalBasicType.Boolean}));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user