示例#1
0
        public void AddLabel(int offset, Label label, bool overwrite)
        {
            // adding null label removes it
            if (label == null)
            {
                if (Labels.ContainsKey(offset))
                {
                    Labels.Remove(offset);
                }

                return;
            }

            if (overwrite)
            {
                if (Labels.ContainsKey(offset))
                {
                    Labels.Remove(offset);
                }
            }

            if (!Labels.ContainsKey(offset))
            {
                label.CleanUp();
                Labels.Add(offset, label);
            }
        }
示例#2
0
        public void MarkLabel(string label)
        {
            if (Labels.ContainsKey(label))
            {
                throw new Exception($"Label [{label}] already defined.");
            }

            Labels[label] = _program.Count;
        }
        public string GetLabel(string name)
        {
            if (Labels.ContainsKey(name))
            {
                return(Labels[name]);
            }

            return(name);
        }
 private void HoistingExecuteStatement(LabelStatement statement)
 {
     if (Labels.ContainsKey(statement.Label))
     {
         throw new RuntimeException(statement.LinePragma,
             string.Format(ExceptionResource.LabelAlreadyExists, statement.Label));
     }
     Labels.Add(statement.Label, statement);
     HoistingExecuteStatement(statement.Statement);
 }
示例#5
0
 public void AddLabel(string name, int position)
 {
     if (!Labels.ContainsKey(name))
     {
         Labels.Add(name, position);
     }
     else
     {
         throw new Exception("Лабелата веќе постои.");
     }
 }
示例#6
0
        public Label GetLabel(uint pos)
        {
            if (Labels.ContainsKey(pos))
            {
                Labels[pos].UsageCount++;
                return(Labels[pos]);
            }

            var label = new Label {
                OpLocation = (int)pos, UsageCount = 1
            };

            Labels.Add(pos, label);
            return(label);
        }
        public override LeadRectD GetInvalidateRect(AnnContainerMapper mapper, IAnnObjectRenderer renderer)
        {
            LeadRectD invalidateRect = base.GetInvalidateRect(mapper, renderer);

            // Add angle label to the invalidate rect
            IAnnLabelRenderer labelRenderer = renderer.LabelRenderer;

            if (labelRenderer != null && labelRenderer.RenderingEngine != null && Labels.ContainsKey("CobbAngle"))
            {
                AnnLabel  label       = Labels["CobbAngle"];
                LeadRectD lablebounds = labelRenderer.GetBounds(mapper, label, FixedStateOperations);
                invalidateRect = LeadRectD.UnionRects(lablebounds, invalidateRect);
            }

            return(invalidateRect);
        }
示例#8
0
        /// <summary>
        /// Emits a label into the code stream.
        /// </summary>
        /// <param name="label">The label name to emit.</param>
        public void Label(int label)
        {
            /*
             * Labels are used to resolve branches inside a procedure. Branches outside
             * of procedures are handled differently, t.b.d.
             *
             * So we store the current instruction offset with the label info to be able to
             * resolve jumps to this location.
             *
             */

            Debug.Assert(!Labels.ContainsKey(label));

            // Add this label to the label list, so we can resolve the jump later on
            Labels.Add(label, (int)CodeStream.Position);
        }
        /// <summary>
        /// Updates the percentage probability of each label at this state.
        /// </summary>
        /// <param name="correctLabel"></param>
        public void AdjustLabels(FeatureValuePair correctLabel)
        {
            //Check impurity. If it is very high, reset the labels.
            if (GiniImpurity > 0.99)
            {
                foreach (var l in Labels.ToList())
                {
                    Labels[l.Key]      = 0;
                    LabelsCount[l.Key] = 0;
                }
            }

            //Reduce label counts occasionally (to prevent going to infinity)
            if (LabelsCount.Sum(p => p.Value) > 10000)
            {
                foreach (FeatureValuePair label in Labels.Select(p => p.Key))
                {
                    LabelsCount[label] /= 10;
                }
            }

            //Add missing label
            if (!Labels.ContainsKey(correctLabel))
            {
                Labels.Add(correctLabel, 0.0);
                LabelsCount.Add(correctLabel, 0);
            }

            //Increase experiences of label
            LabelsCount[correctLabel]++;

            //Recalculate percentages and gini impurity
            double sumCount = LabelsCount.Sum(p => p.Value);
            double sumGini  = 0;

            foreach (var l in Labels.ToList())
            {
                double labelPercent = LabelsCount[l.Key] / (sumCount); // 0.0 to 1.0
                Labels[l.Key] = labelPercent;
                sumGini      += Math.Pow(labelPercent, 2.0);
            }
            double maxGini = 1.00000001 - (1.0 / Labels.Count); // 0.000001 prevents division by zero.

            GiniImpurity = (1 - sumGini) / maxGini;
        }
示例#10
0
        public int GetLabel(string label)
        {
            if (Labels.ContainsKey(label))
            {
                return(Labels[label]);
            }
            else
            {
                if (!ForwardRefs.ContainsKey(label))
                {
                    ForwardRefs[label] = new List <int> ();
                }

                ForwardRefs[label].Add(_program.Count);

                return(int.MaxValue);
            }
        }
        public void AddStatement(Statement statement, ParserState state)
        {
            if (statement.HasLabel && Labels.ContainsKey(statement.Label))
            {
                throw new CompilationException("Statement with same label '" + statement.Label + "' already exists", state);
            }
            if (statement.HasLabel && Constants.ContainsKey(statement.Label))
            {
                throw new CompilationException("Constant with same label '" + statement.Label + "' already exists", state);
            }

            Statements.Add(statement);

            if (statement.HasLabel)
            {
                Labels[statement.Label] = Statements.Count - 1;
            }
        }
示例#12
0
        /// <summary>
        /// Executes the statements and returns the result.
        /// </summary>
        /// <param name="statements">The statements to be executed.</param>
        /// <returns>The execution result of <paramref name="statements"/>.</returns>
        /// <exception cref="ArgumentNullException"><paramref name="statements"/> is <see langword="null"/>, or contains <see langword="null"/>.</exception>
        /// <exception cref="RuntimeException">An exception occurred during the execution of the statements.</exception>
        public ExecuteResult ExecuteStatements(StatementCollection statements)
        {
            if (statements == null || statements.Contains(null))
            {
                throw new ArgumentNullException();
            }
            if (Labels == null)
            {
                Labels = new Dictionary <string, LabelStatement>();
            }
            HoistingExecuteStatements(statements);
            ExecuteResult flow;

            for (int i = 0; i < statements.Count; i++)
            {
                CancellationToken.ThrowIfCancellationRequested();
                flow = ExecuteStatement(statements[i]);
label:
                if (flow.FlowControl == FlowControl.Goto)
                {
                    var go = (string)flow.Data;
                    if (Labels.ContainsKey(go))
                    {
                        i    = statements.IndexOf(Labels[go]);
                        flow = ExecuteStatement(Labels[go]);
                        goto label;
                    }
                    else
                    {
                        return(flow);
                    }
                }
                else if (flow.FlowControl == FlowControl.Break ||
                         flow.FlowControl == FlowControl.Return ||
                         flow.FlowControl == FlowControl.Continue)
                {
                    return(flow);
                }
            }
            Labels.Clear();
            return(ExecuteResult.Next);
        }
示例#13
0
        private LabelMetadata LookupLabel(string Name)
        {
            if (!Labels.ContainsKey(Name))
            {
                // Create the label if it does not exist yet.
                // Remember, labels can be referenced before they are declared

                var Add = new LabelMetadata();
                Add.Label    = Generator.DefineLabel();
                Add.Name     = Name;
                Add.Resolved = false;

                Labels.Add(Name, Add);

                return(Add);
            }
            else
            {
                return(Labels[Name]);
            }
        }
示例#14
0
        public void VerifyForwardRefs()
        {
            foreach (var fwd in ForwardRefs.Keys)
            {
                if (!Labels.ContainsKey(fwd))
                {
                    throw new Exception($"Label [{fwd}] was never defined");
                }

                var address = Labels[fwd];
                var bytes   = Utils.GetBytes(address);

                foreach (var target in ForwardRefs[fwd])
                {
                    for (int i = 0; i < bytes.Length; i++)
                    {
                        _program[i + target] = bytes[i];
                    }
                }
            }
        }
示例#15
0
 public bool IsLabel(string s)
 {
     return(Labels.ContainsKey(s));
 }
示例#16
0
 public bool IsLabelDecalared(string name)
 {
     return(Labels.ContainsKey(name));
 }
示例#17
0
 public static bool SelectLanguage(Language language)
 {
     try
     {
         var languageName = Db.Context.Labels.FirstOrDefault(p => p.LanguageID == language.ID && p.TermID == id_languageName);
         CurrentLanguage = new Language
         {
             ID             = language.ID,
             LanguageNameID = languageName?.ID ?? Default_ID_Language_Name,
             Label          = languageName.Value ?? UnknownLabel
         };
         UnknownLabel = Db.Context.Labels.FirstOrDefault(p => p.LanguageID == language.ID && p.TermID == id_unknownLabel)?.Value ?? "unknown_label";
         Labels.Clear();
         var terms = Db.Context.Terms.ToDictionary(p => p.ID, p => p.Value);
         foreach (var label in Db.Context.Labels.Where(p => p.LanguageID == language.ID))
         {
             var term = terms.FirstOrDefault(p => p.Key == label.TermID).Value;
             if (!Labels.ContainsKey(term))
             {
                 Labels.Add(term, label.Value);
             }
         }
         ModeLabels.Clear();
         foreach (var mode in Db.Context.Modes)
         {
             if (!ModeLabels.ContainsKey(mode.ID))
             {
                 ModeLabels.Add(mode.ID, Labels[terms[mode.LabelID]]);
             }
         }
         NumberLabels.Clear();
         foreach (var number in Db.Context.Numbers)
         {
             if (!NumberLabels.ContainsKey(number.ID))
             {
                 NumberLabels.Add(number.ID, Labels[terms[number.LabelID]]);
             }
         }
         PersonLabels.Clear();
         foreach (var person in Db.Context.Persons)
         {
             if (!PersonLabels.ContainsKey(person.ID))
             {
                 PersonLabels.Add(person.ID, Labels[terms[person.LabelID]]);
             }
         }
         GenderLabels.Clear();
         foreach (var gender in Db.Context.Genders)
         {
             if (!GenderLabels.ContainsKey(gender.ID))
             {
                 GenderLabels.Add(gender.ID, Labels[terms[gender.LabelID]]);
             }
         }
     }
     catch (Exception ex)
     {
         return(false);
     }
     OnLanguageChanged?.Invoke(null, EventArgs.Empty);
     return(true);
 }
        internal override void Process(IChart chart)
        {
            Data = new List <MultiDimensionalPoint>();
            var tags = new List <object>();
            var min  = double.MaxValue;
            var max  = double.MinValue;

            foreach (var obj in SourceCollection)
            {
                var point = new MultiDimensionalPoint(Dimension);

                for (int i = 0; i < Dimension; i++)
                {
                    point[i] = m_Mappings[i](obj);
                }

                if (m_TagMapping != null)
                {
                    tags.Add(m_TagMapping(obj));
                }
                else
                {
                    tags.Add(null);
                }

                Data.Add(point);
            }

            if (m_OpacityDimension.HasValue)
            {
                foreach (var multiDimensionalPoint in Data)
                {
                    if (multiDimensionalPoint[m_OpacityDimension.Value] < min)
                    {
                        min = multiDimensionalPoint[m_OpacityDimension.Value];
                    }

                    if (multiDimensionalPoint[m_OpacityDimension.Value] > max)
                    {
                        max = multiDimensionalPoint[m_OpacityDimension.Value];
                    }
                }
            }

            var chartDataProvider = new ParallelCoordinatesChartDataProvider();

            if (chart.AutoGenerateAxes)
            {
                var labels = new string[Dimension + 1];
                for (int i = 0; i < Dimension; i++)
                {
                    labels[i] = "Axis " + i;
                    if (Labels.ContainsKey(i))
                    {
                        labels[i] = Labels[i];
                    }
                }
                labels[Dimension] = HelperAxisLabel;
                chartDataProvider.AttachAxes(chart, Dimension, labels);
            }

            if (m_OpacityDimension.HasValue)
            {
                int i = 0;
                foreach (var multiDimensionalPoint in Data)
                {
                    ChartLine line = chartDataProvider.AttachDataSet(chart, multiDimensionalPoint, Dimension, tags[i]);
                    line.Opacity = m_MinimumOpacity + (1.0 - m_MinimumOpacity) *
                                   ((multiDimensionalPoint[m_OpacityDimension.Value] - min) / (max - min));
                    i++;
                }
            }
            else
            {
                chartDataProvider.AttachDataSets(chart, Data, Dimension, tags.ToArray());
            }
        }