예제 #1
0
        public ParseModule Parse(string?filePath, IEnumerable <Token> tokens, IList <ParseError> errors)
        {
            _filePath = filePath;
            _tokens.Clear();
            _tokens.AddRange(tokens);

            TokenSource tokenSource = new TokenSource(_tokens, 0, errors);

            ParseModule outputModule = new ParseModule();

            _symbolMap = outputModule.SymbolMap;

            ParseModuleHopper hopper = new ParseModuleHopper(outputModule);

            while (tokenSource.Peek().Type != TokenType.None)
            {
                ParseTopLevelStatement(ref tokenSource)?.AcceptTopLevelVisitor(hopper);
            }

            return(outputModule);
        }