Hetu constructor

Hetu({
  1. HetuConfig? config,
  2. HTLogger? logger,
  3. HTResourceContext<HTSource>? sourceContext,
  4. HTLocale? locale,
  5. HTLexicon? lexicon,
  6. HTLexer? lexer,
  7. HTParser? parser,
})

Create a Hetu environment.

Implementation

Hetu({
  HetuConfig? config,
  HTLogger? logger,
  HTResourceContext<HTSource>? sourceContext,
  HTLocale? locale,
  HTLexicon? lexicon,
  HTLexer? lexer,
  // String parserName = 'default',
  HTParser? parser,
})  : config = config ?? HetuConfig(),
      sourceContext = sourceContext ?? HTOverlayContext() {
  lexicon ??= lexer?.lexicon ?? HTLexiconHetu();
  console = Console(
    lexicon: lexicon,
    logger: logger ?? HTConsoleLogger(),
  );
  if (locale != null) {
    HTLocale.current = locale;
  }
  if (parser != null) {
    this.parser = parser;
    if (lexer != null) {
      this.parser.lexer = lexer;
    } else {
      this.parser.lexer.lexicon = lexicon;
    }
  } else {
    if (lexer != null) {
      this.parser = HTParserHetu(
        config: this.config,
        lexer: lexer,
      );
    } else {
      this.parser = HTParserHetu(
        config: this.config,
        lexicon: lexicon,
      );
    }
  }
  // if (parser != null) {
  //   _currentParser = parser;
  // } else {
  //   _currentParser = HTParserHetu(
  //     config: this.config,
  //   );
  // }
  // if (lexer != null) {
  //   _currentParser.lexer = lexer;
  // }
  // _currentParser.lexer.lexicon = lexicon;
  // _parsers[parserName] = _currentParser;
  bundler = HTBundler(
    config: this.config,
    sourceContext: this.sourceContext,
    parser: this.parser,
  );
  analyzer = HTAnalyzer(
    config: this.config,
    sourceContext: this.sourceContext,
    lexicon: lexicon,
  );
  compiler = HTCompiler(
    config: this.config,
    lexicon: lexicon,
  );
  interpreter = HTInterpreter(
    config: this.config,
    sourceContext: this.sourceContext,
    lexicon: lexicon,
  );
}