Пример #1
0
        private SyntaxVisitorResult <IN, OUT> Visit(OptionSyntaxNode <IN> node, object context = null)
        {
            var child = node.Children != null && node.Children.Any() ? node.Children[0] : null;

            if (child == null || node.IsEmpty)
            {
                if (node.IsGroupOption)
                {
                    return(SyntaxVisitorResult <IN, OUT> .NewOptionGroupNone());
                }
                else
                {
                    return(SyntaxVisitorResult <IN, OUT> .NewOptionNone());
                }
            }

            var innerResult = Visit(child, context);

            if (child is SyntaxLeaf <IN> leaf)
            {
                return(SyntaxVisitorResult <IN, OUT> .NewToken(leaf.Token));
            }
            if (child is GroupSyntaxNode <IN> group)
            {
                return(SyntaxVisitorResult <IN, OUT> .NewOptionGroupSome(innerResult.GroupResult));
            }
            return(SyntaxVisitorResult <IN, OUT> .NewOptionSome(innerResult.ValueResult));
        }
Пример #2
0
 private SyntaxVisitorResult <IN, OUT> Visit(SyntaxLeaf <IN> leaf)
 {
     return(SyntaxVisitorResult <IN, OUT> .NewToken(leaf.Token));
 }