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); }
/* * 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)))); }
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); }