def builtin(self, keyword):
<EOL>keyword_start = self.tokens.matched.first.start<EOL>keyword_end = self.tokens.matched.first.end<EOL>self.tokens.expect(common_grammar.lparen)<EOL>if self.tokens.matched.start != keyword_end:<EOL><INDENT>return self.error(<EOL>"<STR_LIT>",<EOL>start_token=self.tokens.matched.first)<EOL><DEDENT>expr_type = grammar.BUILTINS[keyword.lower()]<EOL>arguments = [self.expression()]<EOL>while self.tokens.accept(common_grammar.comma):<EOL><INDENT>arguments.append(self.expression())<EOL><DEDENT>self.tokens.expect(common_grammar.rparen)<EOL>if expr_type.arity and expr_type.arity != len(arguments):<EOL><INDENT>return self.error(<EOL>"<STR_LIT>" % (<EOL>keyword, expr_type.arity, len(arguments)),<EOL>start_token=self.tokens.matched.first)<EOL><DEDENT>return expr_type(*arguments, start=keyword_start,<EOL>end=self.tokens.matched.end, source=self.original)<EOL>
Parse the pseudo-function application subgrammar.