예제 #1
0
        protected RCValue DoParse(RCParser parser, RCString right, bool canonical, out bool fragment)
        {
            RCArray <RCToken> tokens = new RCArray <RCToken> ();

            for (int i = 0; i < right.Count; ++i)
            {
                parser.Lex(right[i], tokens);
            }
            RCValue result = parser.Parse(tokens, out fragment, canonical);

            return(result);
        }
예제 #2
0
        public void EvalParse(RCRunner runner, RCClosure closure, RCSymbol left, RCString right)
        {
            RCParser parser    = null;
            bool     canonical = false;
            string   which     = left[0].Part(0).ToString();

            if (which.Equals("csv"))
            {
                parser = new CSVParser();
            }
            else if (which.Equals("xml"))
            {
                parser = new XMLParser();
            }
            else if (which.Equals("json"))
            {
                parser = new JSONParser();
            }
            else if (which.Equals("rcl"))
            {
                parser = new RCLParser(RCSystem.Activator);
            }
            else if (which.Equals("canonical"))
            {
                parser    = new RCLParser(RCSystem.Activator);
                canonical = true;
            }
            else if (which.Equals("log"))
            {
                parser = new LogParser();
            }
            else if (which.Equals("md"))
            {
                parser = new MarkdownParser();
            }
            else
            {
                throw new Exception("Unknown parser: " + which);
            }
            bool    fragment;
            RCValue result;

            try
            {
                result = DoParse(parser, right, canonical, out fragment);
                runner.Yield(closure, result);
            }
            catch (RCSyntaxException ex)
            {
                throw new RCException(closure, ex, RCErrors.Syntax, ex.Message);
            }
        }
예제 #3
0
 public RCRunner(long workers)
 {
     _ctorThread             = Thread.CurrentThread;
     _bots[0]                = new RCBot(this, 0);
     _output[0]              = new Queue <RCAsyncState> ();
     _parser                 = new RCLParser(RCSystem.Activator);
     Console.CancelKeyPress += HandleConsoleCancelKeyPress;
     for (int i = 0; i < workers; ++i)
     {
         Thread worker = new Thread(Work);
         worker.IsBackground = true;
         _workers.Write(worker);
         worker.Start();
     }
 }
예제 #4
0
 public void Reset()
 {
     // Should I take the locks here? One or both? Both.
     lock (_queueLock)
     {
         lock (_botLock)
         {
             _parser           = new RCLParser(RCSystem.Activator);
             _root             = null;
             _result           = null;
             _exception        = null;
             _exceptionClosure = null;
             _exceptionCount   = 0;
             _queue            = new Queue <RCClosure> ();
             _pending          = new Dictionary <long, Dictionary <long, RCClosure> > ();
             _bot       = 1;
             _bots      = new Dictionary <long, RCBot> ();
             _bots[0]   = new RCBot(this, 0);
             _output[0] = new Queue <RCAsyncState> ();
             ++_reset;
         }
     }
 }
예제 #5
0
 public override void Accept(RCParser parser, RCToken token)
 {
     parser.AcceptColumnData(token);
 }
예제 #6
0
 public override void Accept(RCParser parser, RCToken token)
 {
     parser.AcceptXmlBracket(token);
 }
예제 #7
0
 public override void Accept(RCParser parser, RCToken token)
 {
     parser.AcceptTime(token);
 }
예제 #8
0
 public override void Accept(RCParser parser, RCToken token)
 {
     parser.AcceptReference(token);
 }
예제 #9
0
 /// <summary>
 /// Is this the right spot for a visitor? not really sure...
 /// </summary>
 public abstract void Accept(RCParser parser, RCToken token);
예제 #10
0
 public override void Accept(RCParser parser, RCToken token)
 {
     parser.AcceptLiteral(token);
 }
예제 #11
0
 public override void Accept(RCParser parser, RCToken token)
 {
     parser.AcceptEvaluator(token);
 }
예제 #12
0
 public override void Accept(RCParser parser, RCToken token)
 {
     parser.AcceptBoolean(token);
 }
예제 #13
0
 public override void Accept(RCParser parser, RCToken token)
 {
     parser.AcceptNumber(token);
 }
예제 #14
0
 public override void Accept(RCParser parser, RCToken token)
 {
     parser.AcceptString(token);
 }
예제 #15
0
 public override void Accept(RCParser parser, RCToken token)
 {
     parser.AcceptContent(token);
 }