コード例 #1
0
        void parsedSources(ParsePerformanceData[] pfd)
        {
            // Output parse time stats
            if (pfd != null)
            {
                foreach (var ppd in pfd)
                {
                    ErrorLogger.Log("Parsed " + ppd.AmountFiles + " files in " +
                                    ppd.BaseDirectory + " in " +
                                    Math.Round(ppd.TotalDuration, 2).ToString() + "s (~" +
                                    Math.Round(ppd.FileDuration, 3).ToString() + "s per file)",
                                    ErrorType.Information, ErrorOrigin.Parser);
                }
            }

            // For debugging purposes dump all parse results (errors etc.) to a log file.
            try
            {
                ParseLog.Write(ASTCache, IDEInterface.ConfigDirectory + "\\" + Version.ToString() + ".GlobalParseLog.log");
            }
            catch (Exception ex)
            {
                ErrorLogger.Log(ex, ErrorType.Warning, ErrorOrigin.System);
            }
        }
コード例 #2
0
        public async void StartParse()
        {
            if (StartPage > EndPage)
            {
                ParseLog?.Invoke("Error:     Начальная страница не может быть больше конечной!");
                return;
            }
            for (var i = StartPage; i <= EndPage; i++)
            {
                if (!Abort)
                {
                    ParseLog?.Invoke("Warning:     Сканирование прервано!");
                    return;
                }

                var html = await GetSourceByPage(i);

                var htmlDocument = new HtmlDocument();
                htmlDocument.LoadHtml(html);

                Parse(htmlDocument);

                ParseLog?.Invoke($"OK:     Готова страница № {i}");
            }
            ParseLog?.Invoke("OK:     Все страницы просканированы!");
        }
コード例 #3
0
        public void WriteShopProcessingLog(ParseLog logEntry)
        {
            var db = GetDb();

            db.ParseLogs.Attach(logEntry);
            db.SaveChanges();
        }
コード例 #4
0
        // обновление строки прогресса
        private void UpdateProgress(ParseLog parseLog)
        {
            int i = 0;

            while (true)
            {
                ProgressBar.Step = Convert.ToInt32(parseLog.GetProgess() * 100);
                ProgressBar.PerformStep();
                Thread.Sleep(10);
                if (ProgressBar.Step == Convert.ToInt32(parseLog.GetProgess() * 100))
                {
                    i++;
                }
                else
                {
                    i = 0;
                }
                if (i == 50)
                {
                    break;
                }
            }
            ProgressBar.Step = 100;
            ProgressBar.PerformStep();
        }
コード例 #5
0
        private StackElement <SYMBOL_ENUM, TREE_NODE> addToStack(Command <SYMBOL_ENUM, TREE_NODE> command,
                                                                 AttachPoint <SYMBOL_ENUM, TREE_NODE> attachPoint,
                                                                 SYMBOL_ENUM symbol,
                                                                 int markWith,
                                                                 string text, Option <object> userObject, bool recovered)
        {
            // if stack is empty and we are adding start symbol (meaning full, successful parse)
            if (attachPoint.Stack == null && symbol.Equals(StartSymbol) && IsEndOfInput)
            {
                return(stackMaster.Add(command.IsShift, attachPoint,
                                       new StackElement <SYMBOL_ENUM, TREE_NODE>()
                {
                    Symbol = StartSymbol,
                    MarkedWith = markWith,
                    UserObject = userObject,
                    NodeIndex = actionTable.StartNodeIndex,
                    IsRecovered = recovered,
                    RecorderLink = new CommandRecorder <SYMBOL_ENUM, TREE_NODE>(command, messages)
                }));
            }
            else
            {
                int target_id;
                IEnumerable <NfaCell <SYMBOL_ENUM, TREE_NODE> > recovery_items;

                // compute where we will go with the symbol in DFA
                if (actionTable.TryGetTarget(anchoredDfaNode(attachPoint.Stack), symbol, out target_id, out recovery_items))
                {
                    StackElement <SYMBOL_ENUM, TREE_NODE> added = stackMaster.Add(command.IsShift, attachPoint,
                                                                                  new StackElement <SYMBOL_ENUM, TREE_NODE>()
                    {
                        Symbol       = symbol,
                        MarkedWith   = markWith,
                        TextInfo     = text,
                        UserObject   = userObject,
                        Coordinates  = Coordinates,
                        NodeIndex    = target_id,
                        IsRecovered  = recovered,
                        RecorderLink = new CommandRecorder <SYMBOL_ENUM, TREE_NODE>(command, messages)
                    });

                    added.RecoveryItems = recovery_items;

                    return(added);
                }
                else
                {
                    if (options.Trace)
                    {
                        System.IO.File.WriteAllLines("parser_history.dump", ParseLog.Select(it => it.ToString() + Environment.NewLine));
                    }

                    throw new Exception("Internal parser error on symbol: " + this.symbolsRep.Get(symbol) + " at node: " + anchoredDfaNode(attachPoint.Stack)
                                        + " with stack: " + stackToString(attachPoint.Stack));
                }
            }
        }
コード例 #6
0
 // загрузка логов в базу
 private void ButtonRun_Click(object sender, EventArgs e)
 {
     if (stringConnection != "" && stringConnection != null && directoryFile != "" && directoryFile != null)
     {
         State.ForeColor = Color.Black; State.Text = "Please wait";
         ParseLog parseLog = new ParseLog(directoryFile, stringConnection);
         parseLog.ReadLogFile();
         this.UpdateProgress(parseLog);
         State.ForeColor = Color.Green; State.Text = "Complite!";
     }
     else
     {
         State.ForeColor = Color.Red; State.Text = "Noncorrect string connection or firectory file!";
     }
 }
コード例 #7
0
        private IEnumerable <CommandRecorder <SYMBOL_ENUM, TREE_NODE> > doParse()
        {
            bufferedActions = new LinkedList <Tuple <ActionRecoveryEnum, ParseAction <SYMBOL_ENUM, TREE_NODE> > >();

            while (true)
            {
                stackMaster.LoopOverStacks();
                // get all messages and commands stacked so far
                messages = stackMaster.AttachedMessages.ToList();

                OnParsingStep(this, EventArgs.Empty);

                if (options.Trace)
                {
                    parseLog.AddLast(new ParseHistory()
                    {
                        Step   = parseLog.Count,
                        Stack  = stackToString(lastOfStackOrNull),
                        NodeId = lastStoredDfaNodeIndex(),
                        Input  = "<<< " + String.Join(" ", stackMaster.Input.Take(historyHorizon).Select(it => it.ToString()))
                    });
                }

                if (IsEndOfInput && stack.Count() == 1 && lastOfStackOrNull.Symbol.Equals(StartSymbol))
                {
                    yield return(lastOfStackOrNull.RecorderLink);

                    if (!stackMaster.RemoveStack())
                    {
                        yield break;
                    }
                }
                else if (!process(lastStoredDfaNodeIndex()))
                {
                    if (options.Trace)
                    {
                        ParseLog.Last().Killed = true;
                    }

                    if (!stackMaster.RemoveStack())
                    {
                        yield break;
                    }
                }
            }
        }