using Canon.Core.Enums; namespace Canon.Core.SyntaxNodes; public class ExpressionList : NonTerminatedSyntaxNode { public override NonTerminatorType Type => NonTerminatorType.ExpressionList; public bool IsRecursive { get; private init; } /// /// 声明的表达式列表 /// public IEnumerable Expressions => GetExpressions(); public static ExpressionList Create(List children) { bool isRecursive; if (children.Count == 1) { isRecursive = false; } else if (children.Count == 3) { isRecursive = true; } else { throw new InvalidOperationException(); } return new ExpressionList { Children = children, IsRecursive = isRecursive }; } private IEnumerable GetExpressions() { ExpressionList list = this; while (true) { if (list.IsRecursive) { yield return list.Children[2].Convert(); list = list.Children[0].Convert(); } else { yield return list.Children[0].Convert(); break; } } } }