Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
 /// <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;
 }