Ejemplo n.º 1
0
        private async void Syntactic_Click(object sender, RoutedEventArgs e)
        {
            Progress.Visibility = Visibility.Visible;
            var result = await Task.Run(() => {
                return(SyntaxParser());
            });

            Progress.Visibility = Visibility.Collapsed;
            if (result == true)
            {
                ModernDialog modernDialog = new ModernDialog
                {
                    Title   = "LR(1)分析表建立成功!",
                    Content = "查看结果?"
                };
                modernDialog.Buttons = new Button[] { modernDialog.OkButton, modernDialog.CancelButton };
                modernDialog.ShowDialog();
                result = modernDialog.MessageBoxResult.ToString();
                if (result == "OK")
                {
                    LR1 page = new LR1();
                    page.Show();
                }
                else
                {
                    Semantic.IsEnabled = true;
                }
            }
        }
Ejemplo n.º 2
0
        private void BuildLR1Sets()
        {
            Debug.Assert(Grammar.Accept != null);
            Debug.Assert(Grammar.Eof != null);

            var start    = new LR1(CoreFactory.Get(Grammar.Accept.Productions[0]), true, Grammar.Eof.First);
            var startSet = new LR1Set(start);

            var closer = new LR1Set.Closer2(Grammar.LR1Sets, startSet);

            closer.Go();
        }
        private void OpenFile_Click(object sender, EventArgs e)
        {
            OpenFileDialog fileName = new OpenFileDialog();

            fileName.InitialDirectory = Application.StartupPath;
            fileName.Filter           = "txt files (*.txt)|*.txt";
            fileName.FilterIndex      = 1;
            fileName.RestoreDirectory = true;
            if (fileName.ShowDialog() == DialogResult.OK)
            {
                //MessageBox.Show("OK");
                string path = fileName.FileName.ToString();
                backEnd = new LR1(path);
                Dictionary <string, List <string> > rule = backEnd.GetRuleSet();
                RuleDisplay.Clear();
                if (rule == null)
                {
                    MessageBox.Show("LR1运行失败,输入的规则式有问题");
                }
                else
                {
                    foreach (string key in rule.Keys)
                    {
                        foreach (string showRule in rule[key])
                        {
                            RuleDisplay.AppendText(key + "->" + showRule + "\r\n");
                        }
                    }
                    backEnd.SolveFirstSet();
                    backEnd.SolveFollowSet();
                    backEnd.BuildLR1ForView();
                    isSyntaxValid = backEnd.BuildTable();
                    MessageBox.Show("输入的规则式合法");
                    GetLR0.Enabled = true;
                }
            }
        }
Ejemplo n.º 4
0
    public void DrawChart_Performance(string NET_CHANGE_NORMALIZED1, string NET_CHANGE_NORMALIZED2, string Y_AXIS_LABELS_NET_CHANGE, string X_AXIS_LABEL, string X_AXIS_LABEL_POS)
    {
        if (gameObject.activeSelf == false)
        {
            gameObject.SetActive(true);
        }

        if (LineMask.GetComponent <Animation>().isPlaying)
        {
            LineMask.GetComponent <Animation>().Stop();
        }

        //////////////////////////////////////////////////////////////////////////////
        //Performance Chart Specific
        //////////////////////////////////////////////////////////////////////////////

        ClearGraph();

        LineRenderer LR1;
        LineRenderer LR2;

        Line_Perf1.SetActive(true);
        Line_Perf2.SetActive(true);
        Graph_DotPerf1.SetActive(true);
        Graph_DotPerf2.SetActive(true);

        PaddingTop   = 0.0f;
        PaddingSides = 0.0f;

        //////////////////////////////////////////////////////////////////////////////
        //Setup the Graph
        //////////////////////////////////////////////////////////////////////////////

        SetupGraph(PaddingTop, PaddingSides);

        //////////////////////////////////////////////////////////////////////////////
        //Drawing the Two lines
        //////////////////////////////////////////////////////////////////////////////

        string[] graphPoints_1 = NET_CHANGE_NORMALIZED1.Split(';');
        string[] graphPoints_2 = NET_CHANGE_NORMALIZED2.Split(';');
        float    pxSpacing_1   = 1000.0f / graphPoints_1.Length;
        float    pxSpacing_2   = 1000.0f / graphPoints_2.Length;

        LR1 = Line_Perf1.GetComponent <LineRenderer>();
        LR2 = Line_Perf2.GetComponent <LineRenderer>();

        int posCount_1 = 0;
        int posCount_2 = 0;

        var positions_1 = new List <Vector3>();
        var positions_2 = new List <Vector3>();

        if (graphPoints_1.Length > 1 && graphPoints_2.Length > 1)
        {
            //Line 1
            for (int i = 0; i < graphPoints_1.Length; i++)
            {
                if (graphPoints_1[i] != "")
                {
                    posCount_1++;
                    try
                    {
                        positions_1.Add(new Vector3((((pxSpacing_1) + (pxSpacing_1 / (graphPoints_1.Length - 1))) * i) * xScale, float.Parse(graphPoints_1[i]) * yScale, 0.0f));
                        Graph_DotPerf1.transform.localPosition = new Vector3((((pxSpacing_1) + (pxSpacing_1 / (graphPoints_1.Length - 1))) * i) * xScale, float.Parse(graphPoints_1[i]) * yScale, -0.05f);
                    }

                    catch
                    {
                        Debug.LogError("graph 1 point = " + graphPoints_1[i]);
                    }
                }
            }

            //Line 2
            for (int i = 0; i < graphPoints_2.Length; i++)
            {
                if (graphPoints_2[i] != "")
                {
                    posCount_2++;
                    try
                    {
                        positions_2.Add(new Vector3((((pxSpacing_2) + (pxSpacing_2 / (graphPoints_2.Length - 1))) * i) * xScale, float.Parse(graphPoints_2[i]) * yScale, 0.0f));
                        Graph_DotPerf2.transform.localPosition = new Vector3((((pxSpacing_2) + (pxSpacing_2 / (graphPoints_2.Length - 1))) * i) * xScale, float.Parse(graphPoints_2[i]) * yScale, -0.05f);
                    }

                    catch
                    {
                        Debug.LogError("graph 2 point = " + graphPoints_2[i]);
                    }
                }
            }
        }
        else
        {
            ClearGraph();
        }

        if (posCount_1 > 0 || posCount_2 > 0)
        {
            LR1.positionCount = posCount_1;
            LR1.SetPositions(positions_1.ToArray());
            LR1.Simplify(0.15f);

            LR2.positionCount = posCount_2;
            LR2.SetPositions(positions_2.ToArray());
            LR2.Simplify(0.15f);
        }
        else
        {
            ClearGraph();
        }

        //////////////////////////////////////////////////////////////////////////////
        //Displaying the Y-Axis
        //////////////////////////////////////////////////////////////////////////////

        foreach (Transform child in transform.GetComponentsInChildren <Transform>())
        {
            if (child.gameObject.tag == "Graph_LabelY")
            {
                Destroy(child.gameObject);
            }
        }

        string[] yLabels   = Y_AXIS_LABELS_NET_CHANGE.Split(';');
        float    pySpacing = 1000.0f / yLabels.Length;

        for (int i = 0; i < yLabels.Length; i++)
        {
            GameObject instaY = Instantiate(Y_Label, this.GetComponent <Transform>());
            instaY.transform.localPosition = new Vector3((((instaY.GetComponent <RectTransform>().rect.width / 2.0f) * -1.0f) * 0.1f) - yLabelOffset - (PaddingSides * xScale), (((pySpacing) + (pySpacing / (yLabels.Length - 1))) * i) * yScale, -0.01f);
            instaY.GetComponent <TextMeshPro>().SetText(yLabels[i] + "%");

            Transform GridY = instaY.transform.GetChild(0);
            GridY.localPosition = new Vector3((instaY.GetComponent <RectTransform>().rect.width / 2.0f) + (yLabelOffset * 10.0f), 0.0f);
            GridY.localScale    = new Vector3((1000.0f + (PaddingSides * 2.0f)) * xScale * 10.0f, 0.2f, 1.0f);
            GridY.transform.GetChild(0).GetComponent <MeshRenderer>().material.color = new Color(1.0f, 1.0f, 1.0f, 0.35f);
        }

        //////////////////////////////////////////////////////////////////////////////
        //Displaying the X-Axis
        //////////////////////////////////////////////////////////////////////////////

        foreach (Transform child in transform.GetComponentsInChildren <Transform>())
        {
            if (child.gameObject.tag == "Graph_LabelX")
            {
                Destroy(child.gameObject);
            }
        }

        string[] xLabels    = X_AXIS_LABEL.Split(';');
        string[] xLabelsPos = X_AXIS_LABEL_POS.Split(';');

        for (int i = 0; i < xLabelsPos.Length; i++)
        {
            if (xLabelsPos[i] == "")
            {
                xLabelsPos[i] = "0";
            }

            GameObject instaX = Instantiate(X_Label, this.GetComponent <Transform>());
            instaX.transform.localPosition = new Vector3(float.Parse(xLabelsPos[i]) * xScale, 0.0f - xLabelOffset, -0.01f);
            instaX.GetComponent <TextMeshPro>().SetText(xLabels[i]);

            Transform GridX = instaX.transform.GetChild(0);
            GridX.transform.localPosition = new Vector3(0.0f, xLabelOffset * 10.0f);
            GridX.transform.localScale    = new Vector3(0.2f, (1000.0f + PaddingTop) * yScale * 10.0f, 1.0f);
            GridX.transform.GetChild(0).GetComponent <MeshRenderer>().material.color = new Color(1.0f, 1.0f, 1.0f, 0.35f);

            //if (float.Parse(xLabelsPos[i]) < 25.0f)
            //{
            //    instaX.GetComponent<TextMeshPro>().enabled = false;
            //}
        }

        //////////////////////////////////////////////////////////////////////////////
        //Setting up the Line Mask
        //////////////////////////////////////////////////////////////////////////////

        LineMask.transform.localPosition = new Vector3(-PaddingSides * xScale, 0.0f, -0.06f);
        LineMask.transform.localScale    = new Vector3(((1000.0f + (PaddingSides * 2.0f)) * xScale) + 0.1f, (1000.0f + PaddingTop) * yScale, 1.0f);
        LineMask.GetComponent <Animation>().Play();
    }
 public void InputAlorithm(LR1 al)
 {
     alogrithm = al;
 }