/// <summary> /// Parser for Formals /// </summary> /// <param name="functionDefinition">functionDefinition to add formals to</param> /// <returns>Parsed Formals</returns> public void ParseFormals(FunctionDefinition functionDefinition) { if (TokenStream.Peek(1).GetValue().ToString() != "(") { return; //No formals, so return empty formals } //Skip ( token NextToken("(","(formal1, formal2)",'('); while (TokenStream.HasNext()) { //Parse formals if (TokenStream.Peek(1).GetValue().ToString() == ")") { break; //End of formals } else if(TokenStream.Peek(1).GetValue().ToString() == ",") { //Skip , token NextToken(",", "(formal1, formal2)", ','); } functionDefinition.AddFormal(ParseFormal()); } //Skip ) token NextToken(")", "(formal1, formal2)", ')'); }
/// <summary> /// Visit FuncBindAssignment /// </summary> /// <param name="assignment">FuncBindAssignment to check</param> public override void Visit(FuncBindAssignment assignment) { //FuncBind is a function, so let checking do by FunctionDefinition visitor FunctionDefinition function = new FunctionDefinition(); function.SetIdentifier(assignment.GetIdentifier()); foreach (String identifier in assignment.GetIdentifiers()) { Formal formal = new Formal(); formal.SetIdentifier(identifier); function.AddFormal(formal); } function.AddStatement(assignment.GetStatement()); //Check this new function function.AcceptVisitor(this); //Add to SymbolTable SymbolTable.AddFunctionDefinition(function); }