コード例 #1
0
        public override CSharpSyntaxNode VisitDictionary([NotNull] DonatelloParser.DictionaryContext context)
        {
            var children = context.form();

            var keyValueList = new List <ExpressionSyntax>();

            for (int i = 0; i < children.Length; i += 2) //select every two key/value pair
            {
                keyValueList.Add(
                    InvocationExpression(
                        MemberAccessExpression(
                            SyntaxKind.SimpleMemberAccessExpression,
                            IdentifierName(nameof(Constructors)),
                            IdentifierName(nameof(Constructors.CreateKeyValuePair))))
                    .WithArgumentList(
                        ArgumentList(
                            SeparatedList(new[] {
                    Argument(this.Visit(children[i]) as ExpressionSyntax),             //key
                    Argument(this.Visit(children[i + 1]) as ExpressionSyntax)
                }))));                                                                 //value
            }
            return
                (InvocationExpression(
                     MemberAccessExpression(
                         SyntaxKind.SimpleMemberAccessExpression,
                         IdentifierName(nameof(ImmutableDictionary)),
                         IdentifierName(nameof(ImmutableDictionary.CreateRange))))
                 .WithArgumentList(
                     ArgumentList(
                         SingletonSeparatedList(
                             Argument(
                                 ImplicitArrayCreationExpression(
                                     InitializerExpression(
                                         SyntaxKind.ArrayInitializerExpression,
                                         SeparatedList(keyValueList))))))));
        }
コード例 #2
0
 /// <summary>
 /// Enter a parse tree produced by <see cref="DonatelloParser.dictionary"/>.
 /// <para>The default implementation does nothing.</para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 public virtual void EnterDictionary([NotNull] DonatelloParser.DictionaryContext context)
 {
 }
コード例 #3
0
 /// <summary>
 /// Visit a parse tree produced by <see cref="DonatelloParser.dictionary"/>.
 /// <para>
 /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
 /// on <paramref name="context"/>.
 /// </para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 /// <return>The visitor result.</return>
 public virtual Result VisitDictionary([NotNull] DonatelloParser.DictionaryContext context)
 {
     return(VisitChildren(context));
 }