using Canon.Core.Enums; namespace Canon.Core.SyntaxNodes; public class VarDeclaration : NonTerminatedSyntaxNode { public override NonTerminatorType Type => NonTerminatorType.VarDeclaration; public bool IsRecursive { get; private init; } /// /// 声明的变量 /// public (IdentifierList, TypeSyntaxNode) Variable => GetVariable(); private (IdentifierList, TypeSyntaxNode) GetVariable() { if (IsRecursive) { return (Children[2].Convert(), Children[4].Convert()); } else { return (Children[0].Convert(), Children[2].Convert()); } } public static VarDeclaration Create(List children) { bool isRecursive; if (children.Count == 3) { isRecursive = false; } else if (children.Count == 5) { isRecursive = true; } else { throw new InvalidOperationException(); } return new VarDeclaration { Children = children, IsRecursive = isRecursive }; } }