private FunctionForm ParseFunctionForm()
{
Token token = this.NextToken();
if (token == null)
throw new ParserException("expected atom");
if (token.Type != TokenType.Atom)
throw new ParserException(string.Format("unexpected '{0}'", token.Value));
string name = token.Value;
this.ParseToken(TokenType.Separator, "(");
var arguments = this.ParseExpressionList();
this.ParseToken(TokenType.Separator, ")");
this.ParseToken(TokenType.Operator, "->");
var body = this.ParseCompositeExpression();
return new FunctionForm(name, arguments, body);
}