feat: 语法树的访问者和类型检测访问者 (#56)

Reviewed-on: PostGuard/Canon#56
This commit is contained in:
2024-04-26 10:18:49 +08:00
parent b20c3234c5
commit 17dbcccb59
63 changed files with 2757 additions and 704 deletions

View File

@@ -160,6 +160,36 @@ public class NumberSemanticToken : SemanticToken
public required NumberType NumberType { get; init; }
/// <summary>
/// 将数值类型记号识别为整数
/// </summary>
/// <returns>该记号表示的整数</returns>
/// <exception cref="InvalidOperationException">目标记号不是整数类型</exception>
public int ParseAsInteger()
{
if (NumberType != NumberType.Integer)
{
throw new InvalidOperationException("Target semantic token isn't integer");
}
return int.Parse(LiteralValue);
}
/// <summary>
/// 将数值类型记号识别为浮点数
/// </summary>
/// <returns>该记号标识的浮点数</returns>
/// <exception cref="InvalidOperationException">目标记号不是浮点数类型</exception>
public double ParseAsReal()
{
if (NumberType != NumberType.Real)
{
throw new InvalidOperationException("Target semantic token isn't real");
}
return double.Parse(LiteralValue);
}
public override int GetHashCode()
{
return base.GetHashCode() ^ NumberType.GetHashCode();