public static ADFunctionCall fce_call(string fceName = "") { STRecord fceRecord = null; var result = new ADFunctionCall(); fceRecord = STSearch(fceName); if (MainFSM.GetNextToken().Type != TokenType.leftRBType) { SyntaxError("Byl ocekavan znak \'(\' pri volani funkce."); } var argumentsList = new List <IADExpression>(); while (MainFSM.PeekNextToken().Type != TokenType.rightRBType) { argumentsList.Add(PrecedenceSyntaxAnalysis.Precedence(TokenType.rightRBType)); if (MainFSM.PeekNextToken().Type == TokenType.comType) { MainFSM.GetNextToken(); } } result.Arguments = argumentsList; result.STRecord = fceRecord; if (MainFSM.GetNextToken().Type != TokenType.rightRBType) { SyntaxError("Byl ocekavan znak \')\' pri volani funkce."); } return(result); }
public static string PrintFunctionCall(ADFunctionCall fceCall) { string result = string.Empty; if (fceCall.Expression == null) { var fceName = fceCall.STRecord.Name; if (fceName == "print_long" || fceName == "print_char") { result += (PrintExpression(fceCall.Arguments[0], false)) + Environment.NewLine; result += ("movq %rdx, %rdi") + Environment.NewLine; result += ($"call {fceName}") + Environment.NewLine; } else { fceCall.Arguments.Reverse(); foreach (var arg in fceCall.Arguments) { result += (PrintExpression(arg)) + Environment.NewLine; result += ("pushq %rdx") + Environment.NewLine; } result += ($"call {fceName}") + Environment.NewLine; } } else { fceCall.Arguments.Reverse(); foreach (var arg in fceCall.Arguments) { result += (PrintExpression(arg)) + Environment.NewLine; result += ("pushq %rdx") + Environment.NewLine; } result += PrintExpression(fceCall.Expression); result += ($"call *%rdx") + Environment.NewLine; } return(result); }
public static void PrintFunctionCall(ADFunctionCall fce, string tab) { Console.WriteLine($"{tab}|- Function Call:"); if (fce.STRecord != null) { Console.WriteLine($"{tab}|\tName: {fce.STRecord.Name}"); } else if (fce.Expression != null) { Console.WriteLine($"{tab}|\tAdress:"); PrintExpression(fce.Expression, tab + "\t\t"); } if (fce.Arguments.Count > 0) { Console.WriteLine($"{tab}|\tArguments:"); foreach (var expr in fce.Arguments) { PrintExpression(expr, tab + "\t\t"); } } }