예제 #1
0
        protected override IEnumerable <UnparsableAst> GetChildren(Unparser.ChildBnfTerms childBnfTerms, object astValue, Unparser.Direction direction)
        {
            foreach (var childRuleReferredBnfTerm in childBnfTerms.Select((childBnfTerm, index) =>
                                                                          new ReferredBnfTermEI(childBnfTerms.ContentIndex, childBnfTerm, direction == Unparser.Direction.LeftToRight ? index : childBnfTerms.Count - 1 - index)
                                                                          ))
            {
                object childAstValue;
                Member member;

                if (IsMemberAtRule(childRuleReferredBnfTerm))
                {
                    member        = GetMemberByAtRule(childRuleReferredBnfTerm);
                    childAstValue = GetValue(member.MemberInfo, astValue);
                }
                else if (childRuleReferredBnfTerm.BnfTerm is BnfiTermCopy)
                {
                    member        = null;
                    childAstValue = astValue;
                }
                else
                {
                    member        = null;
                    childAstValue = astValue;
                }

                if (childAstValue == null && childRuleReferredBnfTerm.BnfTerm is BnfiTermConversion && ((BnfiTermConversion)childRuleReferredBnfTerm.BnfTerm).isOptionalValue)
                {
                    continue;
                }

                yield return(new UnparsableAst(childRuleReferredBnfTerm.BnfTerm, childAstValue, member));
            }
        }
예제 #2
0
 protected override IEnumerable <UnparsableAst> GetChildren(Unparser.ChildBnfTerms childBnfTerms, object astValue, Unparser.Direction direction)
 {
     return(childBnfTerms.Select(childBnfTerm => new UnparsableAst(childBnfTerm, astValue)));
 }
예제 #3
0
 protected override IEnumerable <UnparsableAst> GetChildren(Unparser.ChildBnfTerms childBnfTerms, object astValue, Unparser.Direction direction)
 {
     return(childBnfTerms.Select(childBnfTerm => new UnparsableAst(childBnfTerm, astValue: valueCreatorFromNoAst != null ? valueCreatorFromNoAst() : null)));
 }