public LangElement Parse( ITokenProvider <SemanticValueType, Span> lexer, INodesFactory <LangElement, Span> astFactory, LanguageFeatures language, IErrorSink <Span> errors = null, IErrorRecovery errorRecovery = null, int positionShift = 0) { if (lexer == null) { throw new ArgumentNullException(nameof(lexer)); } // initialization: _languageFeatures = language; _lexer = new CompliantLexer(lexer, language); _astFactory = astFactory ?? throw new ArgumentNullException(nameof(astFactory)); _errors = errors ?? new EmptyErrorSink <Span>(); if (errorRecovery != null) { _lexer = new BufferedLexer(_lexer); _errorRecovery = errorRecovery; } else { _errorRecovery = EmptyErrorRecovery.Instance; } //InitializeFields(); _currentScope = new Scope(0); base.Scanner = _lexer; bool accept = base.Parse(); // return(_astRoot); }
public override void Parse(INodesFactory <LangElement, Span> factory, IErrorSink <Span> errors, IErrorRecovery recovery = null) { Parse((NodesFactory)factory, errors, recovery, LanguageFeatures.Basic, Lexer.LexicalStates.INITIAL); }
public override void Parse(INodesFactory <LangElement, Span> factory, IErrorSink <Span> errors, IErrorRecovery recovery = null) { using (var source = new StringReader(this.Code)) { _lexer = new CollectionLexer(source, errors); ast = new Parser().Parse(_lexer, factory, _features, errors, recovery); } }