Exemple #1
0
        public override Expression VisitFunctionCall(DreamGrammarParser.FunctionCallContext context)
        {
            Expression expression = base.VisitFunctionCall(context);


            List <string> funcParams = new List <string>();
            int           count      = context.ChildCount - 1;

            for (int i = 1; i < count; i++)
            {
                funcParams.Add(context.children[i].GetText());
            }

            /*string[,] gradeArray =
             *  {{"chemistry", "history", "mathematics"}, {"78", "61", "82"}};
             *
             * Expression arrayExpression = Expression.Constant(gradeArray);
             * MethodCallExpression methodCall = Expression.ArrayIndex(arrayExpression);*/

            string[,] gradeArray =
            { { "chemistry", "history", "mathematics" }, { "78", "61", "82" } };

            Expression arrayExpression = Expression.Constant(gradeArray);

            MethodCallExpression methodCall = Expression.ArrayIndex(arrayExpression, Expression.Constant(0), Expression.Constant(2));


            return(methodCall);
        }
Exemple #2
0
        /*
         * public override CSharpSyntaxNode VisitAssignmentExpression([NotNull] DreamGrammarParser.AssignmentExpressionContext context)
         * {
         *  return base.VisitAssignmentExpression(context);
         * }
         */

        public override CSharpSyntaxNode VisitFunctionCall([NotNull] DreamGrammarParser.FunctionCallContext context)
        {
            SyntaxToken name       = SyntaxFactory.Identifier(context.funcName().GetText());
            SyntaxToken returnType = SyntaxFactory.Token(SyntaxKind.VoidKeyword);

            var parameters = new List <ArgumentSyntax>();

            for (int i = 2; i < context.ChildCount - 1; i++)
            {
                var param = context.children[i].Accept(this);
                if (param != null)
                {
                    if (param is LiteralExpressionSyntax)
                    {
                        parameters.Add(SyntaxFactory.Argument(param as LiteralExpressionSyntax));
                        continue;
                    }

                    if (param is IdentifierNameSyntax)
                    {
                        parameters.Add(SyntaxFactory.Argument(param as IdentifierNameSyntax));
                        continue;
                    }

                    if (param is ArgumentSyntax)
                    {
                        parameters.Add(param as ArgumentSyntax);
                        continue;
                    }
                }
            }

            var builtinFunctions = new List <String>()
            {
                "print", "printLine", "read", "readLine"
            };

            String funcName = context.funcName().GetText();

            if (builtinFunctions.Contains(funcName))
            {
                return(GenrateBuiltInFunction(funcName, parameters));
            }

            if (parameters.Count() > 0)
            {
                var seperatedList = BuildArgumentList(parameters);
                return(SyntaxFactory.ExpressionStatement(
                           SyntaxFactory.InvocationExpression(
                               SyntaxFactory.IdentifierName(funcName)).WithArgumentList(
                               SyntaxFactory.ArgumentList(BuildArgumentList(parameters)))));
            }

            return(SyntaxFactory.ExpressionStatement(
                       SyntaxFactory.InvocationExpression(
                           SyntaxFactory.IdentifierName(funcName))));
        }
Exemple #3
0
        public override Expression VisitFunctionCall(DreamGrammarParser.FunctionCallContext context)
        {
            var functionCallName = RemoveLeadingAndTrailingQuotes(context.children[0].GetText());

            object[] t = new object[context.ChildCount - 1];
            for (int i = 1; i < context.ChildCount; i++)
            {
                t[i - 1] = context.children[i].Accept(this);
            }

            var returnLabel = Expression.Label();

            DreamMethodCall dreamMethodCall = new DreamMethodCall(
                functionCallName,
                null,
                null,
                highLevelFunctions,
                returnLabel);

            return(dreamMethodCall);

            //return new PrintExpression(functionCallName);
        }