// Parse the parameter declarations on a function void ParseParameters(ast.ExprNodeFunction fn) { // Must have open paren t.SkipRequired(Token.openRound); // Empty? if (t.SkipOptional(Token.closeRound)) { return; } // Parameters while (true) { // Name t.Require(Token.identifier); fn.Parameters.Add(new ast.Parameter(t.GetBookmark(), t.identifier)); t.Next(); // Another? if (!t.SkipOptional(Token.comma)) { break; } } // Finished t.SkipRequired(Token.closeRound); }
// Parse a function declaration ast.ExprNodeFunction ParseFunction() { // Create the function var fn = new ast.ExprNodeFunction(t.GetBookmark()); // Functions can be anonymous if (t.token == Token.identifier) { fn.Name = t.identifier; t.Next(); } // Parameters ParseParameters(fn); // Body fn.Code = ParseStatementBlock(TriState.Yes); return(fn); }
// Parse a function declaration ast.ExprNodeFunction ParseFunction() { // Create the function var fn = new ast.ExprNodeFunction(t.GetBookmark()); // Functions can be anonymous if (t.token == Token.identifier) { fn.Name = t.identifier; t.Next(); } // Parameters ParseParameters(fn); // Body fn.Code = ParseStatementBlock(TriState.Yes); return fn; }