Exemple #1
0
        public Expr ToExpr()
        {
            var(VN, VSN, VRN) = _variables.OfType <VarPowN, VarN, VarRootN>();
            var numerators = VN.Concat <Variable>(VSN).Concat(VRN).Select(f => f.ToExpr());

            var(VD, VSD, VRD) = _variables.OfType <VarPowD, VarD, VarRootD>();
            var denominators = VD.Concat <Variable>(VSD).Concat(VRD).Select(f => f.ToExpr());
            var numerator    = numerators.IsEmpty() ? new One() : numerators.Aggregate((n1, n2) => MultiplyOp.Create(n1, n2));

            if (denominators.IsEmpty())
            {
                return(numerator);
            }
            return(DivideOp.Create(numerator, denominators.Aggregate((n1, n2) => MultiplyOp.Create(n1, n2))));
        }
            public void OutputOneDone(int type, string str, List <VN> va)
            {
                VN tvn = new VN();

                if (IsKeyword(str) != 0)
                {
                    Init_last();
                    Keyword = str;
                    return;
                }

                switch (type)
                {
                case TYPE_IDENTIFIER:
                {
                    Identifier = str;
                    if (Keyword != "")
                    {
                        int pos = 0;
                        for (int i = 0; i < MAX_KEYWORDS; i++)
                        {
                            if (String.Compare(Keyword, Keywords[i], false) == 0)
                            {
                                pos = i;
                                break;
                            }
                        }
                        tvn.name  = str;
                        tvn.layer = Layer;

                        if (pos > 3)
                        {
                            if (ma.ContainsKey(Identifier) == false)
                            {
                                ma.Add(Identifier, va.Count());
                            }
                            else
                            {
                                ma[Identifier] = va.Count();
                            }
                            tvn.type = pos;
                            va.Add(tvn);
                        }
                        else
                        {
                            if (ma.ContainsKey(Identifier) == false)
                            {
                                ma.Add(Identifier, 0);
                            }
                            va[ma[Identifier]].items[pos]++;
                        }
                    }
                    else
                    {
                        tvn.name  = str;
                        tvn.layer = Layer;
                        if (ma.ContainsKey(Identifier) == false)
                        {
                            ma.Add(Identifier, 0);
                        }
                        if (Operator == "++")
                        {
                            va[ma[Identifier]].items[4]++;
                        }
                        else if (Operator == "--")
                        {
                            va[ma[Identifier]].items[5]++;
                        }
                    }
                }
                break;

                case TYPE_OPERATOR:
                {
                    if (Operator == "+" || Operator == "-")
                    {
                        if (Identifier != "")
                        {
                            tvn.name  = Identifier;
                            tvn.layer = Layer;
                            if (ma.ContainsKey(Identifier) == false)
                            {
                                ma.Add(Identifier, 0);
                            }
                            if (ma[Identifier] == 0)
                            {
                                return;
                            }
                            if (str[0] == '+')
                            {
                                va[ma[Identifier]].items[4]++;
                            }
                            else
                            {
                                va[ma[Identifier]].items[5]++;
                            }
                            Identifier = "";
                            Operator   = "";
                        }
                        else
                        {
                            Operator += str[0];
                        }
                    }
                    else
                    {
                        if (str[0] == '=' && Operator == "")
                        {
                            if (ma.ContainsKey(Identifier) == false)
                            {
                                ma.Add(Identifier, 0);
                            }
                            va[ma[Identifier]].items[6]++;
                            Operator = "";
                        }
                        else
                        {
                            Operator = str;
                        }
                    }
                }
                break;

                case TYPE_SEPARATOR:
                {
                    tvn.layer = Layer;
                    tvn.name  = Identifier;
                    Separator = str;
                    if (Separator == ";")
                    {
                        Init_last();
                    }
                    else if (Separator == "(")
                    {
                        Operator = "";
                    }
                    else if (Separator != ",")
                    {
                        Keyword  = "";
                        Operator = "";
                    }
                    break;
                }

                default:
                    break;
                }
            }
Exemple #3
0
        public static void parse()
        {
            StreamReader txtL = new StreamReader(path);

            lang.Clear();
            table.Dispose();
            while (!txtL.EndOfStream)
            {
                lang.Add(txtL.ReadLine());
            }


            DataColumn column;
            DataRow    row;

            column               = new DataColumn();
            column.DataType      = System.Type.GetType("System.String");
            column.ColumnName    = "VN";
            column.AutoIncrement = false;
            column.Caption       = "VN";
            column.ReadOnly      = false;
            column.Unique        = false;
            table.Columns.Add(column);

            column               = new DataColumn();
            column.DataType      = System.Type.GetType("System.String");
            column.ColumnName    = "IN";
            column.AutoIncrement = false;
            column.Caption       = "IN";
            column.ReadOnly      = false;
            column.Unique        = false;
            table.Columns.Add(column);

            column               = new DataColumn();
            column.DataType      = System.Type.GetType("System.String");
            column.ColumnName    = "OUT";
            column.AutoIncrement = false;
            column.Caption       = "OUT";
            column.ReadOnly      = false;
            column.Unique        = false;
            table.Columns.Add(column);

            dataSet = new DataSet();
            dataSet.Tables.Add(table);



            foreach (string str in lang)
            {
                if (str.StartsWith("_VN"))
                {
                    VN = str.Substring(str.IndexOf("=") + 1);
                }
                if (str.StartsWith("_VT_IN"))
                {
                    VT_IN = str.Substring(str.IndexOf("=") + 1);
                }
                if (str.StartsWith("_VT_OUT"))
                {
                    VT_OUT = str.Substring(str.IndexOf("=") + 1);
                }
                if (str.StartsWith("_STARTsIMBOL"))
                {
                    startsimpbol = str.Substring(str.IndexOf("=") + 1);
                }
                if (str.Length > 1 && VN.Contains(str.Remove(1)))
                {
                    row        = table.NewRow();
                    row["VN"]  = str.Remove(1);
                    row["IN"]  = str.Substring(str.IndexOf(">") + 1, str.IndexOf(",") - str.IndexOf(">") - 1);
                    row["OUT"] = str.Substring(str.IndexOf(",") + 1);
                    table.Rows.Add(row);

                    rulleIN.Add(str.Remove(1), str.Substring(str.IndexOf(">") + 1, str.IndexOf(",") - str.IndexOf(">") - 1));
                    rulleOut.Add(str.Remove(1), str.Substring(str.IndexOf(",") + 1));
                }
            }
        }