/// <summary> /// Call this to get the result of rewriting. Call ExecuteRewriteStep to execute a rewriting step. ExecuteRewriteStep /// returns a boolean value indicating whether further rewriting took place. This method should preferrably only be /// called after the rewriting process terminated. This will create copies of the current execution cache. /// </summary> public InterpreterResult GetCurrentRewriteResult() { var retVal = new InterpreterResult(initialProgram); retVal.Messages.AddRange(ValidationMessages); retVal.ProgramOut.Statements.AddRange(typeChecker.TypeDefinitions); retVal.ProgramOut.Statements.AddRange(typeChecker.VariableMappings); foreach (var term in executionCache) { retVal.ProgramOut.Statements.Add(term.RootTerm.CreateCopy()); } foreach (var rule in programRules) { // Term products of arity one must be turned back into normal terms if (rule.Head is TrsTermProduct && ((TrsTermProduct)rule.Head).TermList.Count == 1) { retVal.ProgramOut.Statements.Add(new TrsReductionRule(((TrsTermProduct)rule.Head).TermList[0], rule.Tail)); } else { retVal.ProgramOut.Statements.Add(rule.CreateCopy()); } } return(retVal); }
/// <summary> /// Call this to get the result of rewriting. Call ExecuteRewriteStep to execute a rewriting step. ExecuteRewriteStep /// returns a boolean value indicating whether further rewriting took place. This method should preferrably only be /// called after the rewriting process terminated. This will create copies of the current execution cache. /// </summary> public InterpreterResult GetCurrentRewriteResult() { var retVal = new InterpreterResult(initialProgram); retVal.Messages.AddRange(ValidationMessages); retVal.ProgramOut.Statements.AddRange(typeChecker.TypeDefinitions); retVal.ProgramOut.Statements.AddRange(typeChecker.VariableMappings); foreach (var term in executionCache) { retVal.ProgramOut.Statements.Add(term.RootTerm.CreateCopy()); } foreach (var rule in programRules) { // Term products of arity one must be turned back into normal terms if (rule.Head is TrsTermProduct && ((TrsTermProduct)rule.Head).TermList.Count == 1) { retVal.ProgramOut.Statements.Add(new TrsReductionRule(((TrsTermProduct)rule.Head).TermList[0], rule.Tail)); } else { retVal.ProgramOut.Statements.Add(rule.CreateCopy()); } } return retVal; }