namespace Antlr.Runtime.Debug
{
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    using IOException = System.IO.IOException;
    using Antlr.Runtime.Tree;

    public class ParserDebugger
    {
        IDebugEventListener dbg;

        public ParserDebugger( Parser parser )
            : this( parser, DebugEventSocketProxy.DEFAULT_DEBUGGER_PORT )
        {
        }
        public ParserDebugger( Parser parser, int port )
        {
            DebugEventSocketProxy proxy = new DebugEventSocketProxy( parser, port, null );
            DebugListener = proxy;
            parser.TokenStream = new DebugTokenStream( parser.TokenStream, proxy );
            try
            {
                proxy.handshake();
            }
            catch ( IOException e )
            {
                reportError( ioe );
            }
            ITreeAdaptor adap = new CommonTreeAdaptor();
            TreeAdaptor = adap;
            proxy.TreeAdaptor = adap;
        }
        public ParserDebugger( Parser parser, IDebugEventListener dbg )
        {
            ITreeAdaptor adap = new CommonTreeAdaptor();
            TreeAdaptor = adap;
        }

        protected virtual bool EvalPredicate( bool result, string predicate )
        {
            dbg.SemanticPredicate( result, predicate );
            return result;
        }

    }
}