private Node expression() {
		TokenType type = lookAhead(1);
		if (type == TokenType.FUNCTION) {
			return function();
		} else if (type == TokenType.LBRACKET) {
			return array();
		} else if (type == TokenType.LBRACE) {
			return dictionary();
		} 


		/* added bu Jing Shu and Abdoul Diallo */
		else if (type == TokenType.LSET) {
			return set();
		} 
		else if (type == TokenType.CALLCC) {
			return callcc();
		} 
		else if (type == TokenType.LAMBDA) {
			Token lambdaToken = match(TokenType.LAMBDA);
			return lambda(lambdaToken);
		} 
		/* end */



		else {
			// An expression can result in a string, boolean or number
			return stringExpression();
		}
	}