Exemplo n.º 1
0
        static string GenCode(string myCode)
        {
            Variable TermList     = new Variable();
            Variable FunctionCode = new Variable();

            string CS_code = "";

            int cs_pointer = myCode.IndexOf("\n//cs");

            if (cs_pointer > 0)
            {
                CS_code = myCode.Substring(cs_pointer); // CS code comes after
                myCode  = myCode.Substring(0, cs_pointer);
            }
            myCode.Replace("//yp", "%YPCode");

            StringWriter myCS_SW   = new StringWriter();
            StringReader myCode_SR = new StringReader(" yp_nop_header_nop. \n " + myCode + "\n");

            YP.see(myCode_SR);
            YP.tell(myCS_SW);

            //m_log.Debug("Mycode\n ===================================\n" + myCode+"\n");

// disable warning: don't see how we can code this differently short
// of rewriting the whole thing
#pragma warning disable 0168, 0219
            foreach (bool l1 in Parser.parseInput(TermList))
            {
                foreach (bool l2 in YPCompiler.makeFunctionPseudoCode(TermList, FunctionCode))
                {
                    // ListPair VFC = new ListPair(FunctionCode, new Variable());
                    //m_log.Debug("-------------------------")
                    //m_log.Debug(FunctionCode.ToString())
                    //m_log.Debug("-------------------------")
                    YPCompiler.convertFunctionCSharp(FunctionCode);
                    //YPCompiler.convertStringCodesCSharp(VFC);
                }
            }
#pragma warning restore 0168, 0219
            YP.seen();
            myCS_SW.Close();
            YP.told();
            StringBuilder bu        = myCS_SW.GetStringBuilder();
            string        finalcode = "//YPEncoded\n" + bu.ToString();
            // FIX script events (we're in the same script)
            // 'YP.script_event(Atom.a(@"sayit"),' ==> 'sayit('
            finalcode = Regex.Replace(finalcode,
                                      @"YP.script_event\(Atom.a\(\@\""(.*?)""\)\,",
                                      @"this.$1(",
                                      RegexOptions.Compiled | RegexOptions.Singleline);
            finalcode = Regex.Replace(finalcode,
                                      @"YP.script_event\(Atom.a\(\""(.*?)""\)\,",
                                      @"this.$1(",
                                      RegexOptions.Compiled | RegexOptions.Singleline);
            finalcode = Regex.Replace(finalcode,
                                      @" static ",
                                      @" ",
                                      RegexOptions.Compiled | RegexOptions.Singleline);

            finalcode = CS_code + "\n\r" + finalcode;
            finalcode = Regex.Replace(finalcode,
                                      @"PrologCallback",
                                      @"public IEnumerable<bool> ",
                                      RegexOptions.Compiled | RegexOptions.Singleline);
            return(finalcode);
        }