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; } }
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)); } } }