private void Parse(DiagnosticsReport diagnostics, IAssemblySource.ConsumeLineDelegate consumeLine)
        {
            var inputStream = new LightInputStream(Input.ReadToEnd());

            var lexer = new ScAsmLexer(inputStream)
            {
                TokenFactory = new LightTokenFactory()
            };

            lexer.RemoveErrorListeners();
            lexer.AddErrorListener(new SyntaxErrorListener <int>(diagnostics));
            var tokens = new CommonTokenStream(lexer);
            var parser = new ScAsmParser(tokens)
            {
                BuildParseTree = false
            };

            parser.AddParseListener(new ParseListener(this, parser, consumeLine));
            parser.RemoveErrorListeners();
            parser.AddErrorListener(new SyntaxErrorListener <IToken>(diagnostics));

            parser.program();
        }
 public ParseListener(TextAssemblySource src, ScAsmParser parser, IAssemblySource.ConsumeLineDelegate consumeLine)
 => (this.src, this.parser, this.consumeLine) = (src, parser, consumeLine);
 public void Produce(DiagnosticsReport diagnostics, IAssemblySource.ConsumeLineDelegate consumeLine)
 => Parse(diagnostics, consumeLine);