예제 #1
0
        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);
        }
예제 #2
0
 public override void Parse(INodesFactory <LangElement, Span> factory, IErrorSink <Span> errors, IErrorRecovery recovery = null)
 {
     Parse((NodesFactory)factory, errors, recovery, LanguageFeatures.Basic, Lexer.LexicalStates.INITIAL);
 }
예제 #3
0
 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);
     }
 }