private void translate_Dependency_List(string expressionText, out MathematicaScalar scalar, out OperandsByName operands) { var finalScalarText = new StringBuilder(expressionText); operands = OperandsByName.Create(); var varIdx = 1; var allMatches = GenUtils.ExtractDistinctInternalExpressions(expressionText); foreach (var rgexMatch in allMatches) { var rhsExprText = rgexMatch.Value.Substring(1, rgexMatch.Value.Length - 2); var rhsExpr = BasicExpressionGenerator.Generate_PolyadicOperand( GMacRootAst.ScalarType, translate_LanguageExpression(rhsExprText) ); var lhsVarName = "var" + (varIdx++).ToString("0000"); finalScalarText = finalScalarText.Replace(rgexMatch.Value, lhsVarName); operands.AddOperand(lhsVarName, rhsExpr); } scalar = MathematicaScalar.Create(Cas, finalScalarText.ToString()); }
public OperandsByName ReplaceLValueByExpression(OperandsByName oldOperands, SymbolLValue oldLvalue, ILanguageExpressionAtomic newExpr) { var newOperands = new Dictionary <string, ILanguageExpressionAtomic>(); foreach (var pair in oldOperands.OperandsDictionary) { var newOpExpr = ReplaceLValueByExpression(pair.Value, oldLvalue, newExpr); newOperands.Add(pair.Key, newOpExpr); } oldOperands.OperandsDictionary.Clear(); foreach (var pair in newOperands) { oldOperands.AddOperand(pair.Key, pair.Value); } return(oldOperands); }