public function __construct(array $options = null, Compiler $compiler = null, Parser $parser = null, Lexer $lexer = null)
{
$this->defineOptions(['adapter' => 'file', 'adapter_options' => [], 'compiler_options' => [], 'parser_options' => [], 'lexer_options' => []], $options);
//Quick Options.
//These get passed to the actual option arrays of the related objects
//@DEPRECATED lifeTime and cachePath will be removed in the near future!
$this->forwardOption('lifeTime', 'adapter_options', 'ttl');
$this->forwardOption('ttl', 'adapter_options');
$this->forwardOption('cachePath', 'adapter_options', 'path');
$this->forwardOption('cache_dir', 'adapter_options', 'path');
$this->forwardOption('cache_path', 'adapter_options', 'path');
$this->forwardOption('paths', 'compiler_options');
$this->forwardOption('pretty', 'compiler_options');
$this->forwardOption('indent_style', 'compiler_options');
$this->forwardOption('indent_width', 'compiler_options');
$this->forwardOption('stand_alone', 'compiler_options');
$this->forwardOption('extensions', 'compiler_options');
$this->forwardOption('mode', 'compiler_options');
$this->forwardOption('doctypes', 'compiler_options');
$this->forwardOption('filters', 'compiler_options');
$this->forwardOption('filter_map', 'compiler_options');
$this->lexer = $lexer ?: new Lexer($this->options['lexer_options']);
$this->parser = $parser ?: new Parser($this->options['parser_options'], $this->lexer);
$this->compiler = $compiler ?: new Compiler($this->options['compiler_options'], $this->parser);
}