From d22a54a19568f8d5e9b6dab1f76f9c5c58682aa5 Mon Sep 17 00:00:00 2001
From: Jeff Ames
Date: Sun, 1 Jun 2008 03:01:33 +0000
Subject: Update svn properties.
---
.../Modules/World/Archiver/ArchiveConstants.cs | 90 +-
.../DotNetEngine/Compiler/LSL/YP2CSConverter.cs | 165 +-
.../DotNetEngine/Compiler/YieldProlog/Atom.cs | 436 +-
.../Compiler/YieldProlog/BagofAnswers.cs | 468 +-
.../Compiler/YieldProlog/FindallAnswers.cs | 206 +-
.../DotNetEngine/Compiler/YieldProlog/Functor.cs | 376 +-
.../DotNetEngine/Compiler/YieldProlog/Functor1.cs | 222 +-
.../DotNetEngine/Compiler/YieldProlog/Functor2.cs | 308 +-
.../DotNetEngine/Compiler/YieldProlog/Functor3.cs | 266 +-
.../Compiler/YieldProlog/IndexedAnswers.cs | 576 +-
.../DotNetEngine/Compiler/YieldProlog/ListPair.cs | 312 +-
.../DotNetEngine/Compiler/YieldProlog/Parser.cs | 8914 ++++++++--------
.../Compiler/YieldProlog/PrologException.cs | 142 +-
.../DotNetEngine/Compiler/YieldProlog/README.TXT | 810 +-
.../YieldProlog/UndefinedPredicateException.cs | 124 +-
.../DotNetEngine/Compiler/YieldProlog/Variable.cs | 392 +-
.../DotNetEngine/Compiler/YieldProlog/YP.cs | 2880 ++---
.../Compiler/YieldProlog/YPCompiler.cs | 10494 +++++++++----------
18 files changed, 13588 insertions(+), 13593 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveConstants.cs b/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveConstants.cs
index d98814b..faffa2b 100644
--- a/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveConstants.cs
+++ b/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveConstants.cs
@@ -1,50 +1,50 @@
-/*
- * Copyright (c) Contributors, http://opensimulator.org/
- * See CONTRIBUTORS.TXT for a full list of copyright holders.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of the OpenSim Project nor the
- * names of its contributors may be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-namespace OpenSim.Region.Environment.Modules.World.Archiver
-{
- ///
- /// Constants for the archiving module
- ///
- public class ArchiveConstants
- {
- ///
- /// Path for the assets held in an archive
- ///
+/*
+ * Copyright (c) Contributors, http://opensimulator.org/
+ * See CONTRIBUTORS.TXT for a full list of copyright holders.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the OpenSim Project nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+namespace OpenSim.Region.Environment.Modules.World.Archiver
+{
+ ///
+ /// Constants for the archiving module
+ ///
+ public class ArchiveConstants
+ {
+ ///
+ /// Path for the assets held in an archive
+ ///
public static readonly string ASSETS_PATH = "assets/";
///
/// Extension used for texture assets in archive
///
- public static readonly string TEXTURE_EXTENSION = ".jp2";
-
- ///
- /// Path for the prims file
- ///
- public static readonly string PRIMS_PATH = "prims.xml";
- }
-}
+ public static readonly string TEXTURE_EXTENSION = ".jp2";
+
+ ///
+ /// Path for the prims file
+ ///
+ public static readonly string PRIMS_PATH = "prims.xml";
+ }
+}
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/YP2CSConverter.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/YP2CSConverter.cs
index 3fc9e00..557c1c9 100644
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/YP2CSConverter.cs
+++ b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/YP2CSConverter.cs
@@ -26,88 +26,83 @@
*
*/
-using System;
-using System.IO;
-using System.Collections.Generic;
-using System.Text;
-using System.Text.RegularExpressions;
-using OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog;
-
-namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL
-{
- public class YP2CSConverter
- {
- public YP2CSConverter()
- {
- }
-
- public string Convert(string Script)
- {
- string CS_code = GenCode(Script);
- return CS_code;
- }
-
-
- 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);
-
- //Console.WriteLine("Mycode\n ===================================\n" + myCode+"\n");
- foreach (bool l1 in Parser.parseInput(TermList))
- {
- foreach (bool l2 in YPCompiler.makeFunctionPseudoCode(TermList, FunctionCode))
- {
- ListPair VFC = new ListPair(FunctionCode, new Variable());
- //Console.WriteLine("-------------------------")
- //Console.WriteLine( FunctionCode.ToString())
- //Console.WriteLine("-------------------------")
- YPCompiler.convertFunctionCSharp(FunctionCode);
- //YPCompiler.convertStringCodesCSharp(VFC);
-
- }
- }
- 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,
- @" static ",
- @" ",
- RegexOptions.Compiled | RegexOptions.Singleline);
-
- finalcode = CS_code+"\n\r"+ finalcode;
- finalcode = Regex.Replace(finalcode,
- @"PrologCallback",
- @"public IEnumerable ",
- RegexOptions.Compiled | RegexOptions.Singleline);
- return finalcode;
- }
-
-
- }
-}
+using System;
+using System.IO;
+using System.Collections.Generic;
+using System.Text;
+using System.Text.RegularExpressions;
+using OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog;
+
+namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL
+{
+ public class YP2CSConverter
+ {
+ public YP2CSConverter()
+ {
+ }
+
+ public string Convert(string Script)
+ {
+ string CS_code = GenCode(Script);
+ return CS_code;
+ }
+
+ 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);
+
+ //Console.WriteLine("Mycode\n ===================================\n" + myCode+"\n");
+ foreach (bool l1 in Parser.parseInput(TermList))
+ {
+ foreach (bool l2 in YPCompiler.makeFunctionPseudoCode(TermList, FunctionCode))
+ {
+ ListPair VFC = new ListPair(FunctionCode, new Variable());
+ //Console.WriteLine("-------------------------")
+ //Console.WriteLine( FunctionCode.ToString())
+ //Console.WriteLine("-------------------------")
+ YPCompiler.convertFunctionCSharp(FunctionCode);
+ //YPCompiler.convertStringCodesCSharp(VFC);
+ }
+ }
+ 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,
+ @" static ",
+ @" ",
+ RegexOptions.Compiled | RegexOptions.Singleline);
+
+ finalcode = CS_code+"\n\r"+ finalcode;
+ finalcode = Regex.Replace(finalcode,
+ @"PrologCallback",
+ @"public IEnumerable ",
+ RegexOptions.Compiled | RegexOptions.Singleline);
+ return finalcode;
+ }
+ }
+}
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Atom.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Atom.cs
index 9b4ca6a..7387ef4 100644
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Atom.cs
+++ b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Atom.cs
@@ -1,218 +1,218 @@
-/*
- * Copyright (C) 2007-2008, Jeff Thompson
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of the copyright holder nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog
-{
- public class Atom : IUnifiable
- {
- private static Dictionary _atomStore = new Dictionary();
- public readonly string _name;
- public readonly Atom _module;
-
- ///
- /// You should not call this constructor, but use Atom.a instead.
- ///
- ///
- ///
- private Atom(string name, Atom module)
- {
- _name = name;
- _module = module;
- }
-
- ///
- /// Return the unique Atom object for name where module is null. You should use this to create
- /// an Atom instead of calling the Atom constructor.
- ///
- ///
- ///
- public static Atom a(string name)
- {
- Atom atom;
- if (!_atomStore.TryGetValue(name, out atom))
- {
- atom = new Atom(name, null);
- _atomStore[name] = atom;
- }
- return atom;
- }
-
- ///
- /// Return an Atom object with the name and module. If module is null or Atom.NIL,
- /// this behaves like Atom.a(name) and returns the unique object where the module is null.
- /// If module is not null or Atom.NIL, this may or may not be the same object as another Atom
- /// with the same name and module.
- ///
- ///
- ///
- ///
- public static Atom a(string name, Atom module)
- {
- if (module == null || module == Atom.NIL)
- return a(name);
- return new Atom(name, module);
- }
-
- ///
- /// If Obj is an Atom unify its _module with Module. If the Atom's _module is null, use Atom.NIL.
- ///
- ///
- ///
- ///
- public static IEnumerable module(object Obj, object Module)
- {
- Obj = YP.getValue(Obj);
- if (Obj is Atom)
- {
- if (((Atom)Obj)._module == null)
- return YP.unify(Module, Atom.NIL);
- else
- return YP.unify(Module, ((Atom)Obj)._module);
- }
- return YP.fail();
- }
-
- public static readonly Atom NIL = Atom.a("[]");
- public static readonly Atom DOT = Atom.a(".");
- public static readonly Atom F = Atom.a("f");
- public static readonly Atom SLASH = Atom.a("/");
- public static readonly Atom HAT = Atom.a("^");
- public static readonly Atom RULE = Atom.a(":-");
-
- public IEnumerable unify(object arg)
- {
- arg = YP.getValue(arg);
- if (arg is Atom)
- return Equals(arg) ? YP.succeed() : YP.fail();
- else if (arg is Variable)
- return ((Variable)arg).unify(this);
- else
- return YP.fail();
- }
-
- public void addUniqueVariables(List variableSet)
- {
- // Atom does not contain variables.
- }
-
- public object makeCopy(Variable.CopyStore copyStore)
- {
- // Atom does not contain variables that need to be copied.
- return this;
- }
-
- public bool termEqual(object term)
- {
- return Equals(YP.getValue(term));
- }
-
- public bool ground()
- {
- // Atom is always ground.
- return true;
- }
-
- public override bool Equals(object obj)
- {
- if (obj is Atom)
- {
- if (_module == null && ((Atom)obj)._module == null)
- // When _declaringClass is null, we always use an identical object from _atomStore.
- return this == obj;
- // Otherwise, ignore _declaringClass and do a normal string compare on the _name.
- return _name == ((Atom)obj)._name;
- }
- return false;
- }
-
- public override string ToString()
- {
- return _name;
- }
-
- public override int GetHashCode()
- {
- // Debug: need to check _declaringClass.
- return _name.GetHashCode();
- }
-
- public string toQuotedString()
- {
- if (_name.Length == 0)
- return "''";
- else if (this == Atom.NIL)
- return "[]";
-
- StringBuilder result = new StringBuilder(_name.Length);
- bool useQuotes = false;
- foreach (char c in _name)
- {
- int cInt = (int)c;
- if (c == '\'')
- {
- result.Append("''");
- useQuotes = true;
- }
- else if (c == '_' || cInt >= (int)'a' && cInt <= (int)'z' ||
- cInt >= (int)'A' && cInt <= (int)'Z' || cInt >= (int)'0' && cInt <= (int)'9')
- result.Append(c);
- else
- {
- // Debug: Need to handle non-printable chars.
- result.Append(c);
- useQuotes = true;
- }
- }
-
- if (!useQuotes && (int)_name[0] >= (int)'a' && (int)_name[0] <= (int)'z')
- return result.ToString();
- else
- {
- // Surround in single quotes.
- result.Append('\'');
- return "'" + result;
- }
- }
-
- ///
- /// Return true if _name is lexicographically less than atom._name.
- ///
- ///
- ///
- public bool lessThan(Atom atom)
- {
- return _name.CompareTo(atom._name) < 0;
- }
- }
-}
+/*
+ * Copyright (C) 2007-2008, Jeff Thompson
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the copyright holder nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog
+{
+ public class Atom : IUnifiable
+ {
+ private static Dictionary _atomStore = new Dictionary();
+ public readonly string _name;
+ public readonly Atom _module;
+
+ ///
+ /// You should not call this constructor, but use Atom.a instead.
+ ///
+ ///
+ ///
+ private Atom(string name, Atom module)
+ {
+ _name = name;
+ _module = module;
+ }
+
+ ///
+ /// Return the unique Atom object for name where module is null. You should use this to create
+ /// an Atom instead of calling the Atom constructor.
+ ///
+ ///
+ ///
+ public static Atom a(string name)
+ {
+ Atom atom;
+ if (!_atomStore.TryGetValue(name, out atom))
+ {
+ atom = new Atom(name, null);
+ _atomStore[name] = atom;
+ }
+ return atom;
+ }
+
+ ///
+ /// Return an Atom object with the name and module. If module is null or Atom.NIL,
+ /// this behaves like Atom.a(name) and returns the unique object where the module is null.
+ /// If module is not null or Atom.NIL, this may or may not be the same object as another Atom
+ /// with the same name and module.
+ ///
+ ///
+ ///
+ ///
+ public static Atom a(string name, Atom module)
+ {
+ if (module == null || module == Atom.NIL)
+ return a(name);
+ return new Atom(name, module);
+ }
+
+ ///
+ /// If Obj is an Atom unify its _module with Module. If the Atom's _module is null, use Atom.NIL.
+ ///
+ ///
+ ///
+ ///
+ public static IEnumerable module(object Obj, object Module)
+ {
+ Obj = YP.getValue(Obj);
+ if (Obj is Atom)
+ {
+ if (((Atom)Obj)._module == null)
+ return YP.unify(Module, Atom.NIL);
+ else
+ return YP.unify(Module, ((Atom)Obj)._module);
+ }
+ return YP.fail();
+ }
+
+ public static readonly Atom NIL = Atom.a("[]");
+ public static readonly Atom DOT = Atom.a(".");
+ public static readonly Atom F = Atom.a("f");
+ public static readonly Atom SLASH = Atom.a("/");
+ public static readonly Atom HAT = Atom.a("^");
+ public static readonly Atom RULE = Atom.a(":-");
+
+ public IEnumerable unify(object arg)
+ {
+ arg = YP.getValue(arg);
+ if (arg is Atom)
+ return Equals(arg) ? YP.succeed() : YP.fail();
+ else if (arg is Variable)
+ return ((Variable)arg).unify(this);
+ else
+ return YP.fail();
+ }
+
+ public void addUniqueVariables(List variableSet)
+ {
+ // Atom does not contain variables.
+ }
+
+ public object makeCopy(Variable.CopyStore copyStore)
+ {
+ // Atom does not contain variables that need to be copied.
+ return this;
+ }
+
+ public bool termEqual(object term)
+ {
+ return Equals(YP.getValue(term));
+ }
+
+ public bool ground()
+ {
+ // Atom is always ground.
+ return true;
+ }
+
+ public override bool Equals(object obj)
+ {
+ if (obj is Atom)
+ {
+ if (_module == null && ((Atom)obj)._module == null)
+ // When _declaringClass is null, we always use an identical object from _atomStore.
+ return this == obj;
+ // Otherwise, ignore _declaringClass and do a normal string compare on the _name.
+ return _name == ((Atom)obj)._name;
+ }
+ return false;
+ }
+
+ public override string ToString()
+ {
+ return _name;
+ }
+
+ public override int GetHashCode()
+ {
+ // Debug: need to check _declaringClass.
+ return _name.GetHashCode();
+ }
+
+ public string toQuotedString()
+ {
+ if (_name.Length == 0)
+ return "''";
+ else if (this == Atom.NIL)
+ return "[]";
+
+ StringBuilder result = new StringBuilder(_name.Length);
+ bool useQuotes = false;
+ foreach (char c in _name)
+ {
+ int cInt = (int)c;
+ if (c == '\'')
+ {
+ result.Append("''");
+ useQuotes = true;
+ }
+ else if (c == '_' || cInt >= (int)'a' && cInt <= (int)'z' ||
+ cInt >= (int)'A' && cInt <= (int)'Z' || cInt >= (int)'0' && cInt <= (int)'9')
+ result.Append(c);
+ else
+ {
+ // Debug: Need to handle non-printable chars.
+ result.Append(c);
+ useQuotes = true;
+ }
+ }
+
+ if (!useQuotes && (int)_name[0] >= (int)'a' && (int)_name[0] <= (int)'z')
+ return result.ToString();
+ else
+ {
+ // Surround in single quotes.
+ result.Append('\'');
+ return "'" + result;
+ }
+ }
+
+ ///
+ /// Return true if _name is lexicographically less than atom._name.
+ ///
+ ///
+ ///
+ public bool lessThan(Atom atom)
+ {
+ return _name.CompareTo(atom._name) < 0;
+ }
+ }
+}
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/BagofAnswers.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/BagofAnswers.cs
index 6aea6f7..88ffdb7 100644
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/BagofAnswers.cs
+++ b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/BagofAnswers.cs
@@ -1,234 +1,234 @@
-/*
- * Copyright (C) 2007-2008, Jeff Thompson
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of the copyright holder nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-using System;
-using System.Collections;
-using System.Collections.Generic;
-
-namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog
-{
- ///
- /// A BagofAnswers holds answers for bagof and setof.
- ///
- public class BagofAnswers
- {
- private object _template;
- private Variable[] _freeVariables;
- private Dictionary> _bagForFreeVariables;
- private List _findallBagArray;
- private static TermArrayEqualityComparer _termArrayEqualityComparer =
- new TermArrayEqualityComparer();
-
- ///
- /// To get the free variables, split off any existential qualifiers from Goal such as the X in
- /// "X ^ f(Y)", get the set of unbound variables in Goal that are not qualifiers, then remove
- /// the unbound variables that are qualifiers as well as the unbound variables in Template.
- ///
- ///
- ///
- public BagofAnswers(object Template, object Goal)
- {
- _template = Template;
-
- // First get the set of variables that are not free variables.
- List variableSet = new List();
- YP.addUniqueVariables(Template, variableSet);
- object UnqualifiedGoal = YP.getValue(Goal);
- while (UnqualifiedGoal is Functor2 && ((Functor2)UnqualifiedGoal)._name == Atom.HAT)
- {
- YP.addUniqueVariables(((Functor2)UnqualifiedGoal)._arg1, variableSet);
- UnqualifiedGoal = YP.getValue(((Functor2)UnqualifiedGoal)._arg2);
- }
-
- // Remember how many non-free variables there are so we can find the unique free variables
- // that are added.
- int nNonFreeVariables = variableSet.Count;
- YP.addUniqueVariables(UnqualifiedGoal, variableSet);
- int nFreeVariables = variableSet.Count - nNonFreeVariables;
- if (nFreeVariables == 0)
- {
- // There were no free variables added, so we won't waste time with _bagForFreeVariables.
- _freeVariables = null;
- _findallBagArray = new List();
- }
- else
- {
- // Copy the free variables.
- _freeVariables = new Variable[nFreeVariables];
- for (int i = 0; i < nFreeVariables; ++i)
- _freeVariables[i] = variableSet[i + nNonFreeVariables];
-
- _bagForFreeVariables = new Dictionary>(_termArrayEqualityComparer);
- }
- }
-
- public void add()
- {
- if (_freeVariables == null)
- // The goal has bound the values in _template but we don't bother with _freeVariables.
- _findallBagArray.Add(YP.makeCopy(_template, new Variable.CopyStore()));
- else
- {
- // The goal has bound the values in _template and _freeVariables.
- // Find the entry for this set of _freeVariables values.
- object[] freeVariableValues = new object[_freeVariables.Length];
- for (int i = 0; i < _freeVariables.Length; ++i)
- freeVariableValues[i] = YP.getValue(_freeVariables[i]);
- List bagArray;
- if (!_bagForFreeVariables.TryGetValue(freeVariableValues, out bagArray))
- {
- bagArray = new List();
- _bagForFreeVariables[freeVariableValues] = bagArray;
- }
-
- // Now copy the template and add to the bag for the freeVariables values.
- bagArray.Add(YP.makeCopy(_template, new Variable.CopyStore()));
- }
- }
-
- ///
- /// For each result, unify the _freeVariables and unify bagArrayVariable with the associated bag.
- ///
- /// this is unified with the List of matches for template that
- /// corresponds to the bindings for freeVariables. Be very careful: this does not unify with a Prolog
- /// list.
- ///
- public IEnumerable resultArray(Variable bagArrayVariable)
- {
- if (_freeVariables == null)
- {
- // No unbound free variables, so we only filled one bag. If empty, bagof fails.
- if (_findallBagArray.Count > 0)
- {
- foreach (bool l1 in bagArrayVariable.unify(_findallBagArray))
- yield return false;
- }
- }
- else
- {
- foreach (KeyValuePair> valuesAndBag in _bagForFreeVariables)
- {
- foreach (bool l1 in YP.unifyArrays(_freeVariables, valuesAndBag.Key))
- {
- foreach (bool l2 in bagArrayVariable.unify(valuesAndBag.Value))
- yield return false;
- }
- // Debug: Should we free memory of the answers already returned?
- }
- }
- }
-
- ///
- /// For each result, unify the _freeVariables and unify Bag with the associated bag.
- ///
- ///
- ///
- public IEnumerable result(object Bag)
- {
- Variable bagArrayVariable = new Variable();
- foreach (bool l1 in resultArray(bagArrayVariable))
- {
- foreach (bool l2 in YP.unify(Bag, ListPair.make((List)bagArrayVariable.getValue())))
- yield return false;
- }
- }
-
- ///
- /// For each result, unify the _freeVariables and unify Bag with the associated bag which is sorted
- /// with duplicates removed, as in setof.
- ///
- ///
- ///
- public IEnumerable resultSet(object Bag)
- {
- Variable bagArrayVariable = new Variable();
- foreach (bool l1 in resultArray(bagArrayVariable))
- {
- List bagArray = (List)bagArrayVariable.getValue();
- YP.sortArray(bagArray);
- foreach (bool l2 in YP.unify(Bag, ListPair.makeWithoutRepeatedTerms(bagArray)))
- yield return false;
- }
- }
-
- public static IEnumerable bagofArray
- (object Template, object Goal, IEnumerable goalIterator, Variable bagArrayVariable)
- {
- BagofAnswers bagOfAnswers = new BagofAnswers(Template, Goal);
- foreach (bool l1 in goalIterator)
- bagOfAnswers.add();
- return bagOfAnswers.resultArray(bagArrayVariable);
- }
-
- public static IEnumerable bagof
- (object Template, object Goal, IEnumerable goalIterator, object Bag)
- {
- BagofAnswers bagOfAnswers = new BagofAnswers(Template, Goal);
- foreach (bool l1 in goalIterator)
- bagOfAnswers.add();
- return bagOfAnswers.result(Bag);
- }
-
- public static IEnumerable setof
- (object Template, object Goal, IEnumerable goalIterator, object Bag)
- {
- BagofAnswers bagOfAnswers = new BagofAnswers(Template, Goal);
- foreach (bool l1 in goalIterator)
- bagOfAnswers.add();
- return bagOfAnswers.resultSet(Bag);
- }
-
- ///
- /// A TermArrayEqualityComparer implements IEqualityComparer to compare two object arrays using YP.termEqual.
- ///
- private class TermArrayEqualityComparer : IEqualityComparer
- {
- public bool Equals(object[] array1, object[] array2)
- {
- if (array1.Length != array2.Length)
- return false;
- for (int i = 0; i < array1.Length; ++i)
- {
- if (!YP.termEqual(array1[i], array2[i]))
- return false;
- }
- return true;
- }
-
- public int GetHashCode(object[] array)
- {
- int hashCode = 0;
- for (int i = 0; i < array.Length; ++i)
- hashCode ^= array[i].GetHashCode();
- return hashCode;
- }
- }
- }
-}
+/*
+ * Copyright (C) 2007-2008, Jeff Thompson
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the copyright holder nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+
+namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog
+{
+ ///
+ /// A BagofAnswers holds answers for bagof and setof.
+ ///
+ public class BagofAnswers
+ {
+ private object _template;
+ private Variable[] _freeVariables;
+ private Dictionary> _bagForFreeVariables;
+ private List _findallBagArray;
+ private static TermArrayEqualityComparer _termArrayEqualityComparer =
+ new TermArrayEqualityComparer();
+
+ ///
+ /// To get the free variables, split off any existential qualifiers from Goal such as the X in
+ /// "X ^ f(Y)", get the set of unbound variables in Goal that are not qualifiers, then remove
+ /// the unbound variables that are qualifiers as well as the unbound variables in Template.
+ ///
+ ///
+ ///
+ public BagofAnswers(object Template, object Goal)
+ {
+ _template = Template;
+
+ // First get the set of variables that are not free variables.
+ List variableSet = new List();
+ YP.addUniqueVariables(Template, variableSet);
+ object UnqualifiedGoal = YP.getValue(Goal);
+ while (UnqualifiedGoal is Functor2 && ((Functor2)UnqualifiedGoal)._name == Atom.HAT)
+ {
+ YP.addUniqueVariables(((Functor2)UnqualifiedGoal)._arg1, variableSet);
+ UnqualifiedGoal = YP.getValue(((Functor2)UnqualifiedGoal)._arg2);
+ }
+
+ // Remember how many non-free variables there are so we can find the unique free variables
+ // that are added.
+ int nNonFreeVariables = variableSet.Count;
+ YP.addUniqueVariables(UnqualifiedGoal, variableSet);
+ int nFreeVariables = variableSet.Count - nNonFreeVariables;
+ if (nFreeVariables == 0)
+ {
+ // There were no free variables added, so we won't waste time with _bagForFreeVariables.
+ _freeVariables = null;
+ _findallBagArray = new List();
+ }
+ else
+ {
+ // Copy the free variables.
+ _freeVariables = new Variable[nFreeVariables];
+ for (int i = 0; i < nFreeVariables; ++i)
+ _freeVariables[i] = variableSet[i + nNonFreeVariables];
+
+ _bagForFreeVariables = new Dictionary>(_termArrayEqualityComparer);
+ }
+ }
+
+ public void add()
+ {
+ if (_freeVariables == null)
+ // The goal has bound the values in _template but we don't bother with _freeVariables.
+ _findallBagArray.Add(YP.makeCopy(_template, new Variable.CopyStore()));
+ else
+ {
+ // The goal has bound the values in _template and _freeVariables.
+ // Find the entry for this set of _freeVariables values.
+ object[] freeVariableValues = new object[_freeVariables.Length];
+ for (int i = 0; i < _freeVariables.Length; ++i)
+ freeVariableValues[i] = YP.getValue(_freeVariables[i]);
+ List bagArray;
+ if (!_bagForFreeVariables.TryGetValue(freeVariableValues, out bagArray))
+ {
+ bagArray = new List();
+ _bagForFreeVariables[freeVariableValues] = bagArray;
+ }
+
+ // Now copy the template and add to the bag for the freeVariables values.
+ bagArray.Add(YP.makeCopy(_template, new Variable.CopyStore()));
+ }
+ }
+
+ ///
+ /// For each result, unify the _freeVariables and unify bagArrayVariable with the associated bag.
+ ///
+ /// this is unified with the List of matches for template that
+ /// corresponds to the bindings for freeVariables. Be very careful: this does not unify with a Prolog
+ /// list.
+ ///
+ public IEnumerable resultArray(Variable bagArrayVariable)
+ {
+ if (_freeVariables == null)
+ {
+ // No unbound free variables, so we only filled one bag. If empty, bagof fails.
+ if (_findallBagArray.Count > 0)
+ {
+ foreach (bool l1 in bagArrayVariable.unify(_findallBagArray))
+ yield return false;
+ }
+ }
+ else
+ {
+ foreach (KeyValuePair> valuesAndBag in _bagForFreeVariables)
+ {
+ foreach (bool l1 in YP.unifyArrays(_freeVariables, valuesAndBag.Key))
+ {
+ foreach (bool l2 in bagArrayVariable.unify(valuesAndBag.Value))
+ yield return false;
+ }
+ // Debug: Should we free memory of the answers already returned?
+ }
+ }
+ }
+
+ ///
+ /// For each result, unify the _freeVariables and unify Bag with the associated bag.
+ ///
+ ///
+ ///
+ public IEnumerable result(object Bag)
+ {
+ Variable bagArrayVariable = new Variable();
+ foreach (bool l1 in resultArray(bagArrayVariable))
+ {
+ foreach (bool l2 in YP.unify(Bag, ListPair.make((List)bagArrayVariable.getValue())))
+ yield return false;
+ }
+ }
+
+ ///
+ /// For each result, unify the _freeVariables and unify Bag with the associated bag which is sorted
+ /// with duplicates removed, as in setof.
+ ///
+ ///
+ ///
+ public IEnumerable resultSet(object Bag)
+ {
+ Variable bagArrayVariable = new Variable();
+ foreach (bool l1 in resultArray(bagArrayVariable))
+ {
+ List bagArray = (List)bagArrayVariable.getValue();
+ YP.sortArray(bagArray);
+ foreach (bool l2 in YP.unify(Bag, ListPair.makeWithoutRepeatedTerms(bagArray)))
+ yield return false;
+ }
+ }
+
+ public static IEnumerable bagofArray
+ (object Template, object Goal, IEnumerable goalIterator, Variable bagArrayVariable)
+ {
+ BagofAnswers bagOfAnswers = new BagofAnswers(Template, Goal);
+ foreach (bool l1 in goalIterator)
+ bagOfAnswers.add();
+ return bagOfAnswers.resultArray(bagArrayVariable);
+ }
+
+ public static IEnumerable bagof
+ (object Template, object Goal, IEnumerable goalIterator, object Bag)
+ {
+ BagofAnswers bagOfAnswers = new BagofAnswers(Template, Goal);
+ foreach (bool l1 in goalIterator)
+ bagOfAnswers.add();
+ return bagOfAnswers.result(Bag);
+ }
+
+ public static IEnumerable setof
+ (object Template, object Goal, IEnumerable goalIterator, object Bag)
+ {
+ BagofAnswers bagOfAnswers = new BagofAnswers(Template, Goal);
+ foreach (bool l1 in goalIterator)
+ bagOfAnswers.add();
+ return bagOfAnswers.resultSet(Bag);
+ }
+
+ ///
+ /// A TermArrayEqualityComparer implements IEqualityComparer to compare two object arrays using YP.termEqual.
+ ///
+ private class TermArrayEqualityComparer : IEqualityComparer
+ {
+ public bool Equals(object[] array1, object[] array2)
+ {
+ if (array1.Length != array2.Length)
+ return false;
+ for (int i = 0; i < array1.Length; ++i)
+ {
+ if (!YP.termEqual(array1[i], array2[i]))
+ return false;
+ }
+ return true;
+ }
+
+ public int GetHashCode(object[] array)
+ {
+ int hashCode = 0;
+ for (int i = 0; i < array.Length; ++i)
+ hashCode ^= array[i].GetHashCode();
+ return hashCode;
+ }
+ }
+ }
+}
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/FindallAnswers.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/FindallAnswers.cs
index 2978cee..dcd4250 100644
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/FindallAnswers.cs
+++ b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/FindallAnswers.cs
@@ -1,103 +1,103 @@
-/*
- * Copyright (C) 2007-2008, Jeff Thompson
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of the copyright holder nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-using System;
-using System.Collections;
-using System.Collections.Generic;
-
-namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog
-{
- ///
- /// A FindallAnswers holds answers for findall.
- ///
- public class FindallAnswers
- {
- private object _template;
- private List _bagArray;
-
- public FindallAnswers(object Template)
- {
- _template = Template;
- _bagArray = new List();
- }
-
- public void add()
- {
- _bagArray.Add(YP.makeCopy(_template, new Variable.CopyStore()));
- }
-
- public List resultArray()
- {
- return _bagArray;
- }
-
- ///
- /// Unify Bag with the result. This frees the internal answers, so you can only call this once.
- ///
- ///
- ///
- public IEnumerable result(object Bag)
- {
- object result = ListPair.make(_bagArray);
- // Try to free the memory.
- _bagArray = null;
- return YP.unify(Bag, result);
- }
-
- ///
- /// This is a simplified findall when the goal is a single call.
- ///
- ///
- ///
- ///
- ///
- public static IEnumerable findall(object Template, IEnumerable goal, object Bag)
- {
- FindallAnswers findallAnswers = new FindallAnswers(Template);
- foreach (bool l1 in goal)
- findallAnswers.add();
- return findallAnswers.result(Bag);
- }
-
- ///
- /// Like findall, except return an array of the results.
- ///
- ///
- ///
- ///
- public static List findallArray(object Template, IEnumerable goal)
- {
- FindallAnswers findallAnswers = new FindallAnswers(Template);
- foreach (bool l1 in goal)
- findallAnswers.add();
- return findallAnswers.resultArray();
- }
- }
-}
+/*
+ * Copyright (C) 2007-2008, Jeff Thompson
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the copyright holder nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+
+namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog
+{
+ ///
+ /// A FindallAnswers holds answers for findall.
+ ///
+ public class FindallAnswers
+ {
+ private object _template;
+ private List _bagArray;
+
+ public FindallAnswers(object Template)
+ {
+ _template = Template;
+ _bagArray = new List();
+ }
+
+ public void add()
+ {
+ _bagArray.Add(YP.makeCopy(_template, new Variable.CopyStore()));
+ }
+
+ public List resultArray()
+ {
+ return _bagArray;
+ }
+
+ ///
+ /// Unify Bag with the result. This frees the internal answers, so you can only call this once.
+ ///
+ ///
+ ///
+ public IEnumerable result(object Bag)
+ {
+ object result = ListPair.make(_bagArray);
+ // Try to free the memory.
+ _bagArray = null;
+ return YP.unify(Bag, result);
+ }
+
+ ///
+ /// This is a simplified findall when the goal is a single call.
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static IEnumerable findall(object Template, IEnumerable goal, object Bag)
+ {
+ FindallAnswers findallAnswers = new FindallAnswers(Template);
+ foreach (bool l1 in goal)
+ findallAnswers.add();
+ return findallAnswers.result(Bag);
+ }
+
+ ///
+ /// Like findall, except return an array of the results.
+ ///
+ ///
+ ///
+ ///
+ public static List findallArray(object Template, IEnumerable goal)
+ {
+ FindallAnswers findallAnswers = new FindallAnswers(Template);
+ foreach (bool l1 in goal)
+ findallAnswers.add();
+ return findallAnswers.resultArray();
+ }
+ }
+}
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor.cs
index 3ba1021..58c0e4b 100644
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor.cs
+++ b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor.cs
@@ -1,188 +1,188 @@
-/*
- * Copyright (C) 2007-2008, Jeff Thompson
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of the copyright holder nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-using System;
-using System.Collections.Generic;
-
-namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog
-{
- public class Functor : IUnifiable
- {
- public readonly Atom _name;
- public readonly object[] _args;
-
- public Functor(Atom name, object[] args)
- {
- if (args.Length <= 3)
- {
- if (args.Length == 0)
- throw new Exception("For arity 0 functor, just use name as an Atom");
- else if (args.Length == 1)
- throw new Exception("For arity 1 functor, use Functor1");
- else if (args.Length == 2)
- throw new Exception("For arity 2 functor, use Functor2");
- else if (args.Length == 3)
- throw new Exception("For arity 3 functor, use Functor3");
- else
- // (This shouldn't happen, but include it for completeness.
- throw new Exception("Cannot create a Functor of arity " + args.Length);
- }
-
- _name = name;
- _args = args;
- }
-
- public Functor(string name, object[] args)
- : this(Atom.a(name), args)
- {
- }
-
- ///
- /// Return an Atom, Functor1, Functor2, Functor3 or Functor depending on the
- /// length of args.
- /// Note that this is different than the Functor constructor which requires
- /// the length of args to be greater than 3.
- ///
- ///
- ///
- ///
- public static object make(Atom name, object[] args)
- {
- if (args.Length <= 0)
- return name;
- else if (args.Length == 1)
- return new Functor1(name, args[0]);
- else if (args.Length == 2)
- return new Functor2(name, args[0], args[1]);
- else if (args.Length == 3)
- return new Functor3(name, args[0], args[1], args[2]);
- else
- return new Functor(name, args);
- }
-
- ///
- /// Call the main make, first converting name to an Atom.
- ///
- ///
- ///
- ///
- public static object make(string name, object[] args)
- {
- return make(Atom.a(name), args);
- }
-
- public IEnumerable unify(object arg)
- {
- arg = YP.getValue(arg);
- if (arg is Functor)
- {
- Functor argFunctor = (Functor)arg;
- if (_name.Equals(argFunctor._name))
- return YP.unifyArrays(_args, argFunctor._args);
- else
- return YP.fail();
- }
- else if (arg is Variable)
- return ((Variable)arg).unify(this);
- else
- return YP.fail();
- }
-
- public override string ToString()
- {
- string result = _name + "(" + YP.getValue(_args[0]);
- for (int i = 1; i < _args.Length; ++i)
- result += ", " + YP.getValue(_args[i]);
- result += ")";
- return result;
- }
-
- public bool termEqual(object term)
- {
- term = YP.getValue(term);
- if (term is Functor)
- {
- Functor termFunctor = (Functor)term;
- if (_name.Equals(termFunctor._name) && _args.Length == termFunctor._args.Length)
- {
- for (int i = 0; i < _args.Length; ++i)
- {
- if (!YP.termEqual(_args[i], termFunctor._args[i]))
- return false;
- }
- return true;
- }
- }
- return false;
- }
-
- public bool lessThan(Functor functor)
- {
- // Do the equal check first since it is faster.
- if (!_name.Equals(functor._name))
- return _name.lessThan(functor._name);
-
- if (_args.Length != functor._args.Length)
- return _args.Length < functor._args.Length;
-
- for (int i = 0; i < _args.Length; ++i)
- {
- if (!YP.termEqual(_args[i], functor._args[i]))
- return YP.termLessThan(_args[i], functor._args[i]);
- }
-
- return false;
- }
-
- public bool ground()
- {
- for (int i = 0; i < _args.Length; ++i)
- {
- if (!YP.ground(_args[i]))
- return false;
- }
- return true;
- }
-
- public void addUniqueVariables(List variableSet)
- {
- for (int i = 0; i < _args.Length; ++i)
- YP.addUniqueVariables(_args[i], variableSet);
- }
-
- public object makeCopy(Variable.CopyStore copyStore)
- {
- object[] argsCopy = new object[_args.Length];
- for (int i = 0; i < _args.Length; ++i)
- argsCopy[i] = YP.makeCopy(_args[i], copyStore);
- return new Functor(_name, argsCopy);
- }
- }
-}
+/*
+ * Copyright (C) 2007-2008, Jeff Thompson
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the copyright holder nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+using System;
+using System.Collections.Generic;
+
+namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog
+{
+ public class Functor : IUnifiable
+ {
+ public readonly Atom _name;
+ public readonly object[] _args;
+
+ public Functor(Atom name, object[] args)
+ {
+ if (args.Length <= 3)
+ {
+ if (args.Length == 0)
+ throw new Exception("For arity 0 functor, just use name as an Atom");
+ else if (args.Length == 1)
+ throw new Exception("For arity 1 functor, use Functor1");
+ else if (args.Length == 2)
+ throw new Exception("For arity 2 functor, use Functor2");
+ else if (args.Length == 3)
+ throw new Exception("For arity 3 functor, use Functor3");
+ else
+ // (This shouldn't happen, but include it for completeness.
+ throw new Exception("Cannot create a Functor of arity " + args.Length);
+ }
+
+ _name = name;
+ _args = args;
+ }
+
+ public Functor(string name, object[] args)
+ : this(Atom.a(name), args)
+ {
+ }
+
+ ///
+ /// Return an Atom, Functor1, Functor2, Functor3 or Functor depending on the
+ /// length of args.
+ /// Note that this is different than the Functor constructor which requires
+ /// the length of args to be greater than 3.
+ ///
+ ///
+ ///
+ ///
+ public static object make(Atom name, object[] args)
+ {
+ if (args.Length <= 0)
+ return name;
+ else if (args.Length == 1)
+ return new Functor1(name, args[0]);
+ else if (args.Length == 2)
+ return new Functor2(name, args[0], args[1]);
+ else if (args.Length == 3)
+ return new Functor3(name, args[0], args[1], args[2]);
+ else
+ return new Functor(name, args);
+ }
+
+ ///
+ /// Call the main make, first converting name to an Atom.
+ ///
+ ///
+ ///
+ ///
+ public static object make(string name, object[] args)
+ {
+ return make(Atom.a(name), args);
+ }
+
+ public IEnumerable unify(object arg)
+ {
+ arg = YP.getValue(arg);
+ if (arg is Functor)
+ {
+ Functor argFunctor = (Functor)arg;
+ if (_name.Equals(argFunctor._name))
+ return YP.unifyArrays(_args, argFunctor._args);
+ else
+ return YP.fail();
+ }
+ else if (arg is Variable)
+ return ((Variable)arg).unify(this);
+ else
+ return YP.fail();
+ }
+
+ public override string ToString()
+ {
+ string result = _name + "(" + YP.getValue(_args[0]);
+ for (int i = 1; i < _args.Length; ++i)
+ result += ", " + YP.getValue(_args[i]);
+ result += ")";
+ return result;
+ }
+
+ public bool termEqual(object term)
+ {
+ term = YP.getValue(term);
+ if (term is Functor)
+ {
+ Functor termFunctor = (Functor)term;
+ if (_name.Equals(termFunctor._name) && _args.Length == termFunctor._args.Length)
+ {
+ for (int i = 0; i < _args.Length; ++i)
+ {
+ if (!YP.termEqual(_args[i], termFunctor._args[i]))
+ return false;
+ }
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public bool lessThan(Functor functor)
+ {
+ // Do the equal check first since it is faster.
+ if (!_name.Equals(functor._name))
+ return _name.lessThan(functor._name);
+
+ if (_args.Length != functor._args.Length)
+ return _args.Length < functor._args.Length;
+
+ for (int i = 0; i < _args.Length; ++i)
+ {
+ if (!YP.termEqual(_args[i], functor._args[i]))
+ return YP.termLessThan(_args[i], functor._args[i]);
+ }
+
+ return false;
+ }
+
+ public bool ground()
+ {
+ for (int i = 0; i < _args.Length; ++i)
+ {
+ if (!YP.ground(_args[i]))
+ return false;
+ }
+ return true;
+ }
+
+ public void addUniqueVariables(List variableSet)
+ {
+ for (int i = 0; i < _args.Length; ++i)
+ YP.addUniqueVariables(_args[i], variableSet);
+ }
+
+ public object makeCopy(Variable.CopyStore copyStore)
+ {
+ object[] argsCopy = new object[_args.Length];
+ for (int i = 0; i < _args.Length; ++i)
+ argsCopy[i] = YP.makeCopy(_args[i], copyStore);
+ return new Functor(_name, argsCopy);
+ }
+ }
+}
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor1.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor1.cs
index 33e2a32..582cd20 100644
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor1.cs
+++ b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor1.cs
@@ -1,111 +1,111 @@
-/*
- * Copyright (C) 2007-2008, Jeff Thompson
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of the copyright holder nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-using System;
-using System.Collections.Generic;
-
-namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog
-{
- public class Functor1 : IUnifiable
- {
- public readonly Atom _name;
- public readonly object _arg1;
-
- public Functor1(Atom name, object arg1)
- {
- _name = name;
- _arg1 = arg1;
- }
-
- public Functor1(string name, object arg1)
- : this(Atom.a(name), arg1)
- {
- }
-
- public IEnumerable unify(object arg)
- {
- arg = YP.getValue(arg);
- if (arg is Functor1)
- {
- Functor1 argFunctor = (Functor1)arg;
- if (_name.Equals(argFunctor._name))
- {
- foreach (bool l1 in YP.unify(_arg1, argFunctor._arg1))
- yield return false;
- }
- }
- else if (arg is Variable)
- {
- foreach (bool l1 in ((Variable)arg).unify(this))
- yield return false;
- }
- }
-
- public override string ToString()
- {
- return _name + "(" + YP.getValue(_arg1) + ")";
- }
-
- public bool termEqual(object term)
- {
- term = YP.getValue(term);
- if (term is Functor1)
- {
- Functor1 termFunctor = (Functor1)term;
- return _name.Equals(termFunctor._name) && YP.termEqual(_arg1, termFunctor._arg1);
- }
- return false;
- }
-
- public bool lessThan(Functor1 functor)
- {
- // Do the equal check first since it is faster.
- if (!_name.Equals(functor._name))
- return _name.lessThan(functor._name);
-
- return YP.termLessThan(_arg1, functor._arg1);
- }
-
- public bool ground()
- {
- return YP.ground(_arg1);
- }
-
- public void addUniqueVariables(List variableSet)
- {
- YP.addUniqueVariables(_arg1, variableSet);
- }
-
- public object makeCopy(Variable.CopyStore copyStore)
- {
- return new Functor1(_name, YP.makeCopy(_arg1, copyStore));
- }
- }
-}
+/*
+ * Copyright (C) 2007-2008, Jeff Thompson
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the copyright holder nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+using System;
+using System.Collections.Generic;
+
+namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog
+{
+ public class Functor1 : IUnifiable
+ {
+ public readonly Atom _name;
+ public readonly object _arg1;
+
+ public Functor1(Atom name, object arg1)
+ {
+ _name = name;
+ _arg1 = arg1;
+ }
+
+ public Functor1(string name, object arg1)
+ : this(Atom.a(name), arg1)
+ {
+ }
+
+ public IEnumerable unify(object arg)
+ {
+ arg = YP.getValue(arg);
+ if (arg is Functor1)
+ {
+ Functor1 argFunctor = (Functor1)arg;
+ if (_name.Equals(argFunctor._name))
+ {
+ foreach (bool l1 in YP.unify(_arg1, argFunctor._arg1))
+ yield return false;
+ }
+ }
+ else if (arg is Variable)
+ {
+ foreach (bool l1 in ((Variable)arg).unify(this))
+ yield return false;
+ }
+ }
+
+ public override string ToString()
+ {
+ return _name + "(" + YP.getValue(_arg1) + ")";
+ }
+
+ public bool termEqual(object term)
+ {
+ term = YP.getValue(term);
+ if (term is Functor1)
+ {
+ Functor1 termFunctor = (Functor1)term;
+ return _name.Equals(termFunctor._name) && YP.termEqual(_arg1, termFunctor._arg1);
+ }
+ return false;
+ }
+
+ public bool lessThan(Functor1 functor)
+ {
+ // Do the equal check first since it is faster.
+ if (!_name.Equals(functor._name))
+ return _name.lessThan(functor._name);
+
+ return YP.termLessThan(_arg1, functor._arg1);
+ }
+
+ public bool ground()
+ {
+ return YP.ground(_arg1);
+ }
+
+ public void addUniqueVariables(List variableSet)
+ {
+ YP.addUniqueVariables(_arg1, variableSet);
+ }
+
+ public object makeCopy(Variable.CopyStore copyStore)
+ {
+ return new Functor1(_name, YP.makeCopy(_arg1, copyStore));
+ }
+ }
+}
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor2.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor2.cs
index 87c5f1b..138a44c 100644
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor2.cs
+++ b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor2.cs
@@ -1,154 +1,154 @@
-/*
- * Copyright (C) 2007-2008, Jeff Thompson
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of the copyright holder nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-using System;
-using System.Collections.Generic;
-
-namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog
-{
- public class Functor2 : IUnifiable
- {
- public readonly Atom _name;
- public readonly object _arg1;
- public readonly object _arg2;
-
- public Functor2(Atom name, object arg1, object arg2)
- {
- _name = name;
- _arg1 = arg1;
- _arg2 = arg2;
- }
-
- public Functor2(string name, object arg1, object arg2)
- : this(Atom.a(name), arg1, arg2)
- {
- }
-
- public IEnumerable unify(object arg)
- {
- arg = YP.getValue(arg);
- if (arg is Functor2)
- {
- Functor2 argFunctor = (Functor2)arg;
- if (_name.Equals(argFunctor._name))
- {
- foreach (bool l1 in YP.unify(_arg1, argFunctor._arg1))
- {
- foreach (bool l2 in YP.unify(_arg2, argFunctor._arg2))
- yield return false;
- }
- }
- }
- else if (arg is Variable)
- {
- foreach (bool l1 in ((Variable)arg).unify(this))
- yield return false;
- }
- }
-
- public override string ToString()
- {
- if (_name == Atom.DOT)
- return listPairToString(this);
- else
- return _name + "(" + YP.getValue(_arg1) + ", " + YP.getValue(_arg2) + ")";
- }
-
- public bool termEqual(object term)
- {
- term = YP.getValue(term);
- if (term is Functor2)
- {
- Functor2 termFunctor = (Functor2)term;
- return _name.Equals(termFunctor._name) && YP.termEqual(_arg1, termFunctor._arg1)
- && YP.termEqual(_arg2, termFunctor._arg2);
- }
- return false;
- }
-
- public bool lessThan(Functor2 functor)
- {
- // Do the equal check first since it is faster.
- if (!_name.Equals(functor._name))
- return _name.lessThan(functor._name);
-
- if (!YP.termEqual(_arg1, functor._arg1))
- return YP.termLessThan(_arg1, functor._arg1);
-
- return YP.termLessThan(_arg2, functor._arg2);
- }
-
- public bool ground()
- {
- return YP.ground(_arg1) && YP.ground(_arg2);
- }
-
- public void addUniqueVariables(List variableSet)
- {
- YP.addUniqueVariables(_arg1, variableSet);
- YP.addUniqueVariables(_arg2, variableSet);
- }
-
- public object makeCopy(Variable.CopyStore copyStore)
- {
- return new Functor2(_name, YP.makeCopy(_arg1, copyStore),
- YP.makeCopy(_arg2, copyStore));
- }
-
- private static string listPairToString(Functor2 listPair)
- {
- string result = "[";
- while (true)
- {
- object head = YP.getValue(listPair._arg1);
- object tail = YP.getValue(listPair._arg2);
- if (tail == (object)Atom.NIL)
- {
- result += head;
- break;
- }
- else if (tail is Functor2 && ((Functor2)tail)._name == Atom.DOT)
- {
- result += head + ", ";
- listPair = (Functor2)tail;
- // Loop again.
- }
- else
- {
- // The list is not terminated with NIL.
- result += head + "|" + tail;
- break;
- }
- }
- result += "]";
- return result;
- }
- }
-}
+/*
+ * Copyright (C) 2007-2008, Jeff Thompson
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the copyright holder nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+using System;
+using System.Collections.Generic;
+
+namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog
+{
+ public class Functor2 : IUnifiable
+ {
+ public readonly Atom _name;
+ public readonly object _arg1;
+ public readonly object _arg2;
+
+ public Functor2(Atom name, object arg1, object arg2)
+ {
+ _name = name;
+ _arg1 = arg1;
+ _arg2 = arg2;
+ }
+
+ public Functor2(string name, object arg1, object arg2)
+ : this(Atom.a(name), arg1, arg2)
+ {
+ }
+
+ public IEnumerable unify(object arg)
+ {
+ arg = YP.getValue(arg);
+ if (arg is Functor2)
+ {
+ Functor2 argFunctor = (Functor2)arg;
+ if (_name.Equals(argFunctor._name))
+ {
+ foreach (bool l1 in YP.unify(_arg1, argFunctor._arg1))
+ {
+ foreach (bool l2 in YP.unify(_arg2, argFunctor._arg2))
+ yield return false;
+ }
+ }
+ }
+ else if (arg is Variable)
+ {
+ foreach (bool l1 in ((Variable)arg).unify(this))
+ yield return false;
+ }
+ }
+
+ public override string ToString()
+ {
+ if (_name == Atom.DOT)
+ return listPairToString(this);
+ else
+ return _name + "(" + YP.getValue(_arg1) + ", " + YP.getValue(_arg2) + ")";
+ }
+
+ public bool termEqual(object term)
+ {
+ term = YP.getValue(term);
+ if (term is Functor2)
+ {
+ Functor2 termFunctor = (Functor2)term;
+ return _name.Equals(termFunctor._name) && YP.termEqual(_arg1, termFunctor._arg1)
+ && YP.termEqual(_arg2, termFunctor._arg2);
+ }
+ return false;
+ }
+
+ public bool lessThan(Functor2 functor)
+ {
+ // Do the equal check first since it is faster.
+ if (!_name.Equals(functor._name))
+ return _name.lessThan(functor._name);
+
+ if (!YP.termEqual(_arg1, functor._arg1))
+ return YP.termLessThan(_arg1, functor._arg1);
+
+ return YP.termLessThan(_arg2, functor._arg2);
+ }
+
+ public bool ground()
+ {
+ return YP.ground(_arg1) && YP.ground(_arg2);
+ }
+
+ public void addUniqueVariables(List variableSet)
+ {
+ YP.addUniqueVariables(_arg1, variableSet);
+ YP.addUniqueVariables(_arg2, variableSet);
+ }
+
+ public object makeCopy(Variable.CopyStore copyStore)
+ {
+ return new Functor2(_name, YP.makeCopy(_arg1, copyStore),
+ YP.makeCopy(_arg2, copyStore));
+ }
+
+ private static string listPairToString(Functor2 listPair)
+ {
+ string result = "[";
+ while (true)
+ {
+ object head = YP.getValue(listPair._arg1);
+ object tail = YP.getValue(listPair._arg2);
+ if (tail == (object)Atom.NIL)
+ {
+ result += head;
+ break;
+ }
+ else if (tail is Functor2 && ((Functor2)tail)._name == Atom.DOT)
+ {
+ result += head + ", ";
+ listPair = (Functor2)tail;
+ // Loop again.
+ }
+ else
+ {
+ // The list is not terminated with NIL.
+ result += head + "|" + tail;
+ break;
+ }
+ }
+ result += "]";
+ return result;
+ }
+ }
+}
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor3.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor3.cs
index 74418c4..b52fdf3 100644
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor3.cs
+++ b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor3.cs
@@ -1,133 +1,133 @@
-/*
- * Copyright (C) 2007-2008, Jeff Thompson
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of the copyright holder nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-using System;
-using System.Collections.Generic;
-
-namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog
-{
- public class Functor3 : IUnifiable
- {
- public readonly Atom _name;
- public readonly object _arg1;
- public readonly object _arg2;
- public readonly object _arg3;
-
- public Functor3(Atom name, object arg1, object arg2, object arg3)
- {
- _name = name;
- _arg1 = arg1;
- _arg2 = arg2;
- _arg3 = arg3;
- }
-
- public Functor3(string name, object arg1, object arg2, object arg3)
- : this(Atom.a(name), arg1, arg2, arg3)
- {
- }
-
- public IEnumerable unify(object arg)
- {
- arg = YP.getValue(arg);
- if (arg is Functor3)
- {
- Functor3 argFunctor = (Functor3)arg;
- if (_name.Equals(argFunctor._name))
- {
- foreach (bool l1 in YP.unify(_arg1, argFunctor._arg1))
- {
- foreach (bool l2 in YP.unify(_arg2, argFunctor._arg2))
- {
- foreach (bool l3 in YP.unify(_arg3, argFunctor._arg3))
- yield return false;
- }
- }
- }
- }
- else if (arg is Variable)
- {
- foreach (bool l1 in ((Variable)arg).unify(this))
- yield return false;
- }
- }
-
- public override string ToString()
- {
- return _name + "(" + YP.getValue(_arg1) + ", " + YP.getValue(_arg2) + ", " +
- YP.getValue(_arg3) + ")";
- }
-
- public bool termEqual(object term)
- {
- term = YP.getValue(term);
- if (term is Functor3)
- {
- Functor3 termFunctor = (Functor3)term;
- return _name.Equals(termFunctor._name) && YP.termEqual(_arg1, termFunctor._arg1)
- && YP.termEqual(_arg2, termFunctor._arg2)
- && YP.termEqual(_arg3, termFunctor._arg3);
- }
- return false;
- }
-
- public bool lessThan(Functor3 functor)
- {
- // Do the equal check first since it is faster.
- if (!_name.Equals(functor._name))
- return _name.lessThan(functor._name);
-
- if (!YP.termEqual(_arg1, functor._arg1))
- return YP.termLessThan(_arg1, functor._arg1);
-
- if (!YP.termEqual(_arg2, functor._arg2))
- return YP.termLessThan(_arg2, functor._arg2);
-
- return YP.termLessThan(_arg3, functor._arg3);
- }
-
- public bool ground()
- {
- return YP.ground(_arg1) && YP.ground(_arg2) && YP.ground(_arg3);
- }
-
- public void addUniqueVariables(List variableSet)
- {
- YP.addUniqueVariables(_arg1, variableSet);
- YP.addUniqueVariables(_arg2, variableSet);
- YP.addUniqueVariables(_arg3, variableSet);
- }
-
- public object makeCopy(Variable.CopyStore copyStore)
- {
- return new Functor3(_name, YP.makeCopy(_arg1, copyStore),
- YP.makeCopy(_arg2, copyStore), YP.makeCopy(_arg3, copyStore));
- }
- }
-}
+/*
+ * Copyright (C) 2007-2008, Jeff Thompson
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the copyright holder nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+using System;
+using System.Collections.Generic;
+
+namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog
+{
+ public class Functor3 : IUnifiable
+ {
+ public readonly Atom _name;
+ public readonly object _arg1;
+ public readonly object _arg2;
+ public readonly object _arg3;
+
+ public Functor3(Atom name, object arg1, object arg2, object arg3)
+ {
+ _name = name;
+ _arg1 = arg1;
+ _arg2 = arg2;
+ _arg3 = arg3;
+ }
+
+ public Functor3(string name, object arg1, object arg2, object arg3)
+ : this(Atom.a(name), arg1, arg2, arg3)
+ {
+ }
+
+ public IEnumerable unify(object arg)
+ {
+ arg = YP.getValue(arg);
+ if (arg is Functor3)
+ {
+ Functor3 argFunctor = (Functor3)arg;
+ if (_name.Equals(argFunctor._name))
+ {
+ foreach (bool l1 in YP.unify(_arg1, argFunctor._arg1))
+ {
+ foreach (bool l2 in YP.unify(_arg2, argFunctor._arg2))
+ {
+ foreach (bool l3 in YP.unify(_arg3, argFunctor._arg3))
+ yield return false;
+ }
+ }
+ }
+ }
+ else if (arg is Variable)
+ {
+ foreach (bool l1 in ((Variable)arg).unify(this))
+ yield return false;
+ }
+ }
+
+ public override string ToString()
+ {
+ return _name + "(" + YP.getValue(_arg1) + ", " + YP.getValue(_arg2) + ", " +
+ YP.getValue(_arg3) + ")";
+ }
+
+ public bool termEqual(object term)
+ {
+ term = YP.getValue(term);
+ if (term is Functor3)
+ {
+ Functor3 termFunctor = (Functor3)term;
+ return _name.Equals(termFunctor._name) && YP.termEqual(_arg1, termFunctor._arg1)
+ && YP.termEqual(_arg2, termFunctor._arg2)
+ && YP.termEqual(_arg3, termFunctor._arg3);
+ }
+ return false;
+ }
+
+ public bool lessThan(Functor3 functor)
+ {
+ // Do the equal check first since it is faster.
+ if (!_name.Equals(functor._name))
+ return _name.lessThan(functor._name);
+
+ if (!YP.termEqual(_arg1, functor._arg1))
+ return YP.termLessThan(_arg1, functor._arg1);
+
+ if (!YP.termEqual(_arg2, functor._arg2))
+ return YP.termLessThan(_arg2, functor._arg2);
+
+ return YP.termLessThan(_arg3, functor._arg3);
+ }
+
+ public bool ground()
+ {
+ return YP.ground(_arg1) && YP.ground(_arg2) && YP.ground(_arg3);
+ }
+
+ public void addUniqueVariables(List variableSet)
+ {
+ YP.addUniqueVariables(_arg1, variableSet);
+ YP.addUniqueVariables(_arg2, variableSet);
+ YP.addUniqueVariables(_arg3, variableSet);
+ }
+
+ public object makeCopy(Variable.CopyStore copyStore)
+ {
+ return new Functor3(_name, YP.makeCopy(_arg1, copyStore),
+ YP.makeCopy(_arg2, copyStore), YP.makeCopy(_arg3, copyStore));
+ }
+ }
+}
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/IndexedAnswers.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/IndexedAnswers.cs
index 3eac5fa..05b0a01 100644
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/IndexedAnswers.cs
+++ b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/IndexedAnswers.cs
@@ -1,288 +1,288 @@
-/*
- * Copyright (C) 2007-2008, Jeff Thompson
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of the copyright holder nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-using System;
-using System.Collections;
-using System.Collections.Generic;
-
-namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog
-{
- ///
- /// An IndexedAnswers holds answers to a query based on the values of index arguments.
- ///
- public class IndexedAnswers : YP.IClause
- {
- // addAnswer adds the answer here and indexes it later.
- private List _allAnswers = new List();
- // The key has the arity of answers with non-null values for each indexed arg. The value
- // is a list of the matching answers. The signature is implicit in the pattern on non-null index args.
- private Dictionary> _indexedAnswers =
- new Dictionary>();
- // Keeps track of whether we have started adding entries to _indexedAnswers for the signature.
- private Dictionary _gotAnswersForSignature = new Dictionary();
- private const int MAX_INDEX_ARGS = 31;
-
- public IndexedAnswers()
- {
- }
-
- ///
- /// Elements of answer must be ground, since arguments with unbound variables make this
- /// into a dynamic rule which we don't index.
- ///
- ///
- public void addAnswer(object[] answer)
- {
- // Store a copy of the answer array.
- object[] answerCopy = new object[answer.Length];
- Variable.CopyStore copyStore = new Variable.CopyStore();
- for (int i = 0; i < answer.Length; ++i)
- answerCopy[i] = YP.makeCopy(answer[i], copyStore);
- if (copyStore.getNUniqueVariables() > 0)
- throw new InvalidOperationException
- ("Elements of answer must be ground, but found " + copyStore.getNUniqueVariables() +
- " unbound variables");
- _allAnswers.Add(answerCopy);
-
- // If match has already indexed answers for a signature, we need to add
- // this to the existing indexed answers.
- foreach(int signature in _gotAnswersForSignature.Keys)
- indexAnswerForSignature(answerCopy, signature);
- }
-
- private void indexAnswerForSignature(object[] answer, int signature)
- {
- // First find out which of the answer values can be used as an index.
- object[] indexValues = new object[answer.Length];
- for (int i = 0; i < answer.Length; ++i)
- {
- // We limit the number of indexed args in a 32-bit signature.
- if (i >= MAX_INDEX_ARGS)
- indexValues[i] = null;
- else
- indexValues[i] = getIndexValue(YP.getValue(answer[i]));
- }
-
- // We need an entry in indexArgs from indexValues for each 1 bit in signature.
- HashedList indexArgs = new HashedList(indexValues.Length);
- for (int i = 0; i < indexValues.Length; ++i)
- {
- if ((signature & (1 << i)) == 0)
- indexArgs.Add(null);
- else
- {
- if (indexValues[i] == null)
- // The signature wants an index value here, but we don't have one so
- // we can't add it as an answer for this signature.
- return;
- else
- indexArgs.Add(indexValues[i]);
- }
- }
-
- // Add the answer to the answers list for indexArgs, creating the entry if needed.
- List answers;
- if (!_indexedAnswers.TryGetValue(indexArgs, out answers))
- {
- answers = new List();
- _indexedAnswers[indexArgs] = answers;
- }
- answers.Add(answer);
- }
-
- public IEnumerable match(object[] arguments)
- {
- // Set up indexArgs, up to arg position MAX_INDEX_ARGS. The signature has a 1 bit for
- // each non-null index arg.
- HashedList indexArgs = new HashedList(arguments.Length);
- bool gotAllIndexArgs = true;
- int signature = 0;
- for (int i = 0; i < arguments.Length; ++i)
- {
- object indexValue = null;
- if (i < MAX_INDEX_ARGS)
- {
- // We limit the number of args in a 32-bit signature.
- indexValue = getIndexValue(YP.getValue(arguments[i]));
- if (indexValue != null)
- signature += (1 << i);
- }
- if (indexValue == null)
- gotAllIndexArgs = false;
- indexArgs.Add(indexValue);
- }
-
- List answers;
- if (signature == 0)
- // No index args, so we have to match from _allAnswers.
- answers = _allAnswers;
- else
- {
- if (!_gotAnswersForSignature.ContainsKey(signature))
- {
- // We need to create the entry in _indexedAnswers.
- foreach (object[] answer in _allAnswers)
- indexAnswerForSignature(answer, signature);
- // Mark that we did this signature.
- _gotAnswersForSignature[signature] = null;
- }
- if (!_indexedAnswers.TryGetValue(indexArgs, out answers))
- yield break;
- }
-
- if (gotAllIndexArgs)
- {
- // All the arguments were already bound, so we don't need to do bindings.
- yield return false;
- yield break;
- }
-
- // Find matches in answers.
- IEnumerator[] iterators = new IEnumerator[arguments.Length];
- foreach (object[] answer in answers)
- {
- bool gotMatch = true;
- int nIterators = 0;
- // Try to bind all the arguments.
- for (int i = 0; i < arguments.Length; ++i)
- {
- if (indexArgs[i] != null)
- // We already matched this argument by looking up _indexedAnswers.
- continue;
-
- IEnumerator iterator = YP.unify(arguments[i], answer[i]).GetEnumerator();
- iterators[nIterators++] = iterator;
- // MoveNext() is true if YP.unify succeeds.
- if (!iterator.MoveNext())
- {
- gotMatch = false;
- break;
- }
- }
-
- try
- {
- if (gotMatch)
- yield return false;
- }
- finally
- {
- // Manually finalize all the iterators.
- for (int i = 0; i < nIterators; ++i)
- iterators[i].Dispose();
- }
- }
- }
-
- ///
- /// A HashedList extends an ArrayList with methods to get a hash and to check equality
- /// based on the elements of the list.
- ///
- public class HashedList : ArrayList
- {
- private bool _gotHashCode = false;
- private int _hashCode;
-
- public HashedList()
- : base()
- {
- }
-
- public HashedList(int capacity)
- : base(capacity)
- {
- }
-
- public HashedList(ICollection c)
- : base(c)
- {
- }
-
- // Debug: Should override all the other methods that change this.
- public override int Add(object value)
- {
- _gotHashCode = false;
- return base.Add(value);
- }
-
- public override int GetHashCode()
- {
- if (!_gotHashCode)
- {
- int hashCode = 1;
- foreach (object obj in this)
- hashCode = 31 * hashCode + (obj == null ? 0 : obj.GetHashCode());
- _hashCode = hashCode;
- _gotHashCode = true;
- }
- return _hashCode;
- }
-
- public override bool Equals(object obj)
- {
- if (!(obj is ArrayList))
- return false;
-
- ArrayList objList = (ArrayList)obj;
- if (objList.Count != Count)
- return false;
-
- for (int i = 0; i < Count; ++i)
- {
- object value = objList[i];
- if (value == null)
- {
- if (this[i] != null)
- return false;
- }
- else
- {
- if (!value.Equals(this[i]))
- return false;
- }
- }
- return true;
- }
- }
-
- ///
- /// If we keep an index on value, return the value, or null if we don't index it.
- ///
- /// the term to examine. Assume you already called YP.getValue(value)
- ///
- public static object getIndexValue(object value)
- {
- if (value is Atom || value is string || value is Int32 || value is DateTime)
- return value;
- else
- return null;
- }
- }
-}
+/*
+ * Copyright (C) 2007-2008, Jeff Thompson
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the copyright holder nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+
+namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog
+{
+ ///
+ /// An IndexedAnswers holds answers to a query based on the values of index arguments.
+ ///
+ public class IndexedAnswers : YP.IClause
+ {
+ // addAnswer adds the answer here and indexes it later.
+ private List _allAnswers = new List();
+ // The key has the arity of answers with non-null values for each indexed arg. The value
+ // is a list of the matching answers. The signature is implicit in the pattern on non-null index args.
+ private Dictionary> _indexedAnswers =
+ new Dictionary>();
+ // Keeps track of whether we have started adding entries to _indexedAnswers for the signature.
+ private Dictionary _gotAnswersForSignature = new Dictionary();
+ private const int MAX_INDEX_ARGS = 31;
+
+ public IndexedAnswers()
+ {
+ }
+
+ ///
+ /// Elements of answer must be ground, since arguments with unbound variables make this
+ /// into a dynamic rule which we don't index.
+ ///
+ ///
+ public void addAnswer(object[] answer)
+ {
+ // Store a copy of the answer array.
+ object[] answerCopy = new object[answer.Length];
+ Variable.CopyStore copyStore = new Variable.CopyStore();
+ for (int i = 0; i < answer.Length; ++i)
+ answerCopy[i] = YP.makeCopy(answer[i], copyStore);
+ if (copyStore.getNUniqueVariables() > 0)
+ throw new InvalidOperationException
+ ("Elements of answer must be ground, but found " + copyStore.getNUniqueVariables() +
+ " unbound variables");
+ _allAnswers.Add(answerCopy);
+
+ // If match has already indexed answers for a signature, we need to add
+ // this to the existing indexed answers.
+ foreach(int signature in _gotAnswersForSignature.Keys)
+ indexAnswerForSignature(answerCopy, signature);
+ }
+
+ private void indexAnswerForSignature(object[] answer, int signature)
+ {
+ // First find out which of the answer values can be used as an index.
+ object[] indexValues = new object[answer.Length];
+ for (int i = 0; i < answer.Length; ++i)
+ {
+ // We limit the number of indexed args in a 32-bit signature.
+ if (i >= MAX_INDEX_ARGS)
+ indexValues[i] = null;
+ else
+ indexValues[i] = getIndexValue(YP.getValue(answer[i]));
+ }
+
+ // We need an entry in indexArgs from indexValues for each 1 bit in signature.
+ HashedList indexArgs = new HashedList(indexValues.Length);
+ for (int i = 0; i < indexValues.Length; ++i)
+ {
+ if ((signature & (1 << i)) == 0)
+ indexArgs.Add(null);
+ else
+ {
+ if (indexValues[i] == null)
+ // The signature wants an index value here, but we don't have one so
+ // we can't add it as an answer for this signature.
+ return;
+ else
+ indexArgs.Add(indexValues[i]);
+ }
+ }
+
+ // Add the answer to the answers list for indexArgs, creating the entry if needed.
+ List answers;
+ if (!_indexedAnswers.TryGetValue(indexArgs, out answers))
+ {
+ answers = new List();
+ _indexedAnswers[indexArgs] = answers;
+ }
+ answers.Add(answer);
+ }
+
+ public IEnumerable match(object[] arguments)
+ {
+ // Set up indexArgs, up to arg position MAX_INDEX_ARGS. The signature has a 1 bit for
+ // each non-null index arg.
+ HashedList indexArgs = new HashedList(arguments.Length);
+ bool gotAllIndexArgs = true;
+ int signature = 0;
+ for (int i = 0; i < arguments.Length; ++i)
+ {
+ object indexValue = null;
+ if (i < MAX_INDEX_ARGS)
+ {
+ // We limit the number of args in a 32-bit signature.
+ indexValue = getIndexValue(YP.getValue(arguments[i]));
+ if (indexValue != null)
+ signature += (1 << i);
+ }
+ if (indexValue == null)
+ gotAllIndexArgs = false;
+ indexArgs.Add(indexValue);
+ }
+
+ List answers;
+ if (signature == 0)
+ // No index args, so we have to match from _allAnswers.
+ answers = _allAnswers;
+ else
+ {
+ if (!_gotAnswersForSignature.ContainsKey(signature))
+ {
+ // We need to create the entry in _indexedAnswers.
+ foreach (object[] answer in _allAnswers)
+ indexAnswerForSignature(answer, signature);
+ // Mark that we did this signature.
+ _gotAnswersForSignature[signature] = null;
+ }
+ if (!_indexedAnswers.TryGetValue(indexArgs, out answers))
+ yield break;
+ }
+
+ if (gotAllIndexArgs)
+ {
+ // All the arguments were already bound, so we don't need to do bindings.
+ yield return false;
+ yield break;
+ }
+
+ // Find matches in answers.
+ IEnumerator[] iterators = new IEnumerator[arguments.Length];
+ foreach (object[] answer in answers)
+ {
+ bool gotMatch = true;
+ int nIterators = 0;
+ // Try to bind all the arguments.
+ for (int i = 0; i < arguments.Length; ++i)
+ {
+ if (indexArgs[i] != null)
+ // We already matched this argument by looking up _indexedAnswers.
+ continue;
+
+ IEnumerator iterator = YP.unify(arguments[i], answer[i]).GetEnumerator();
+ iterators[nIterators++] = iterator;
+ // MoveNext() is true if YP.unify succeeds.
+ if (!iterator.MoveNext())
+ {
+ gotMatch = false;
+ break;
+ }
+ }
+
+ try
+ {
+ if (gotMatch)
+ yield return false;
+ }
+ finally
+ {
+ // Manually finalize all the iterators.
+ for (int i = 0; i < nIterators; ++i)
+ iterators[i].Dispose();
+ }
+ }
+ }
+
+ ///
+ /// A HashedList extends an ArrayList with methods to get a hash and to check equality
+ /// based on the elements of the list.
+ ///
+ public class HashedList : ArrayList
+ {
+ private bool _gotHashCode = false;
+ private int _hashCode;
+
+ public HashedList()
+ : base()
+ {
+ }
+
+ public HashedList(int capacity)
+ : base(capacity)
+ {
+ }
+
+ public HashedList(ICollection c)
+ : base(c)
+ {
+ }
+
+ // Debug: Should override all the other methods that change this.
+ public override int Add(object value)
+ {
+ _gotHashCode = false;
+ return base.Add(value);
+ }
+
+ public override int GetHashCode()
+ {
+ if (!_gotHashCode)
+ {
+ int hashCode = 1;
+ foreach (object obj in this)
+ hashCode = 31 * hashCode + (obj == null ? 0 : obj.GetHashCode());
+ _hashCode = hashCode;
+ _gotHashCode = true;
+ }
+ return _hashCode;
+ }
+
+ public override bool Equals(object obj)
+ {
+ if (!(obj is ArrayList))
+ return false;
+
+ ArrayList objList = (ArrayList)obj;
+ if (objList.Count != Count)
+ return false;
+
+ for (int i = 0; i < Count; ++i)
+ {
+ object value = objList[i];
+ if (value == null)
+ {
+ if (this[i] != null)
+ return false;
+ }
+ else
+ {
+ if (!value.Equals(this[i]))
+ return false;
+ }
+ }
+ return true;
+ }
+ }
+
+ ///
+ /// If we keep an index on value, return the value, or null if we don't index it.
+ ///
+ /// the term to examine. Assume you already called YP.getValue(value)
+ ///
+ public static object getIndexValue(object value)
+ {
+ if (value is Atom || value is string || value is Int32 || value is DateTime)
+ return value;
+ else
+ return null;
+ }
+ }
+}
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/ListPair.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/ListPair.cs
index b16e8a4..681c445 100644
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/ListPair.cs
+++ b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/ListPair.cs
@@ -1,156 +1,156 @@
-/*
- * Copyright (C) 2007-2008, Jeff Thompson
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of the copyright holder nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-using System;
-using System.Collections.Generic;
-
-namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog
-{
- public class ListPair : Functor2
- {
- public ListPair(object head, object tail) : base(Atom.DOT, head, tail)
- {
- }
-
- public static object make(List list)
- {
- if (list.Count <= 0)
- return Atom.NIL;
-
- object result = Atom.NIL;
- // Start from the end.
- for (int i = list.Count - 1; i >= 0; --i)
- result = new ListPair(list[i], result);
- return result;
- }
-
- public static object make(object[] array)
- {
- if (array.Length <= 0)
- return Atom.NIL;
-
- object result = Atom.NIL;
- // Start from the end.
- for (int i = array.Length - 1; i >= 0; --i)
- result = new ListPair(array[i], result);
- return result;
- }
-
- ///
- /// Return a ListPair version of array, where repeated elements
- /// (according to YP.termEqual) are removed.
- ///
- ///
- ///
- public static object makeWithoutRepeatedTerms(object[] array)
- {
- if (array.Length <= 0)
- return Atom.NIL;
-
- // Start from the end.
- object previousTerm = array[array.Length - 1];
- object result = new ListPair(previousTerm, Atom.NIL);
- for (int i = array.Length - 2; i >= 0; --i)
- {
- object term = array[i];
- if (YP.termEqual(term, previousTerm))
- continue;
- result = new ListPair(term, result);
- previousTerm = term;
- }
- return result;
- }
-
- ///
- /// Return a ListPair version of array, where repeated elements
- /// (according to YP.termEqual) are removed.
- ///
- ///
- ///
- public static object makeWithoutRepeatedTerms(List array)
- {
- if (array.Count <= 0)
- return Atom.NIL;
-
- // Start from the end.
- object previousTerm = array[array.Count - 1];
- object result = new ListPair(previousTerm, Atom.NIL);
- for (int i = array.Count - 2; i >= 0; --i)
- {
- object term = array[i];
- if (YP.termEqual(term, previousTerm))
- continue;
- result = new ListPair(term, result);
- previousTerm = term;
- }
- return result;
- }
-
- public static object make(object element1)
- {
- return new ListPair(element1, Atom.NIL);
- }
-
- public static object make(object element1, object element2)
- {
- return new ListPair(element1, new ListPair(element2, Atom.NIL));
- }
-
- public static object make(object element1, object element2, object element3)
- {
- return new ListPair(element1,
- new ListPair(element2, new ListPair(element3, Atom.NIL)));
- }
-
- ///
- /// Return an array of the elements in list or null if it is not
- /// a proper list. If list is Atom.NIL, return an array of zero elements.
- /// This does not call YP.getValue on each element.
- ///
- ///
- ///
- public static object[] toArray(object list)
- {
- list = YP.getValue(list);
- if (list.Equals(Atom.NIL))
- return new object[0];
-
- List result = new List();
- for (object element = list;
- element is Functor2 && ((Functor2)element)._name == Atom.DOT;
- element = YP.getValue(((Functor2)element)._arg2))
- result.Add(((Functor2)element)._arg1);
-
- if (result.Count <= 0)
- return null;
- return result.ToArray();
- }
- }
-}
+/*
+ * Copyright (C) 2007-2008, Jeff Thompson
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the copyright holder nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+using System;
+using System.Collections.Generic;
+
+namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog
+{
+ public class ListPair : Functor2
+ {
+ public ListPair(object head, object tail) : base(Atom.DOT, head, tail)
+ {
+ }
+
+ public static object make(List list)
+ {
+ if (list.Count <= 0)
+ return Atom.NIL;
+
+ object result = Atom.NIL;
+ // Start from the end.
+ for (int i = list.Count - 1; i >= 0; --i)
+ result = new ListPair(list[i], result);
+ return result;
+ }
+
+ public static object make(object[] array)
+ {
+ if (array.Length <= 0)
+ return Atom.NIL;
+
+ object result = Atom.NIL;
+ // Start from the end.
+ for (int i = array.Length - 1; i >= 0; --i)
+ result = new ListPair(array[i], result);
+ return result;
+ }
+
+ ///
+ /// Return a ListPair version of array, where repeated elements
+ /// (according to YP.termEqual) are removed.
+ ///
+ ///
+ ///
+ public static object makeWithoutRepeatedTerms(object[] array)
+ {
+ if (array.Length <= 0)
+ return Atom.NIL;
+
+ // Start from the end.
+ object previousTerm = array[array.Length - 1];
+ object result = new ListPair(previousTerm, Atom.NIL);
+ for (int i = array.Length - 2; i >= 0; --i)
+ {
+ object term = array[i];
+ if (YP.termEqual(term, previousTerm))
+ continue;
+ result = new ListPair(term, result);
+ previousTerm = term;
+ }
+ return result;
+ }
+
+ ///
+ /// Return a ListPair version of array, where repeated elements
+ /// (according to YP.termEqual) are removed.
+ ///
+ ///
+ ///
+ public static object makeWithoutRepeatedTerms(List array)
+ {
+ if (array.Count <= 0)
+ return Atom.NIL;
+
+ // Start from the end.
+ object previousTerm = array[array.Count - 1];
+ object result = new ListPair(previousTerm, Atom.NIL);
+ for (int i = array.Count - 2; i >= 0; --i)
+ {
+ object term = array[i];
+ if (YP.termEqual(term, previousTerm))
+ continue;
+ result = new ListPair(term, result);
+ previousTerm = term;
+ }
+ return result;
+ }
+
+ public static object make(object element1)
+ {
+ return new ListPair(element1, Atom.NIL);
+ }
+
+ public static object make(object element1, object element2)
+ {
+ return new ListPair(element1, new ListPair(element2, Atom.NIL));
+ }
+
+ public static object make(object element1, object element2, object element3)
+ {
+ return new ListPair(element1,
+ new ListPair(element2, new ListPair(element3, Atom.NIL)));
+ }
+
+ ///
+ /// Return an array of the elements in list or null if it is not
+ /// a proper list. If list is Atom.NIL, return an array of zero elements.
+ /// This does not call YP.getValue on each element.
+ ///
+ ///
+ ///
+ public static object[] toArray(object list)
+ {
+ list = YP.getValue(list);
+ if (list.Equals(Atom.NIL))
+ return new object[0];
+
+ List result = new List();
+ for (object element = list;
+ element is Functor2 && ((Functor2)element)._name == Atom.DOT;
+ element = YP.getValue(((Functor2)element)._arg2))
+ result.Add(((Functor2)element)._arg1);
+
+ if (result.Count <= 0)
+ return null;
+ return result.ToArray();
+ }
+ }
+}
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Parser.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Parser.cs
index 7ef5c51..a21a471 100644
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Parser.cs
+++ b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Parser.cs
@@ -1,4457 +1,4457 @@
-/*
- * Copyright (C) 2007-2008, Jeff Thompson
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of the copyright holder nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-using System;
-using System.Collections.Generic;
-
-namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog
-{
- public class Parser
- {
- public static IEnumerable formatError(object Output, object Format, object Arguments)
- {
- // Debug: Simple implementation for now.
- YP.write(Format);
- YP.write(Arguments);
- YP.nl();
- yield return false;
- }
-
- // Debug: Hand-modify this central predicate to do tail recursion.
- public static IEnumerable read_tokens(object arg1, object arg2, object arg3)
- {
- bool repeat = true;
- while (repeat)
- {
- repeat = false;
- {
- object C1 = arg1;
- object Dict = arg2;
- object Tokens = arg3;
- Variable C2 = new Variable();
- if (YP.lessThanOrEqual(C1, new ListPair(32, Atom.NIL)))
- {
- if (YP.greaterThanOrEqual(C1, 0))
- {
- foreach (bool l4 in YP.get_code(C2))
- {
-#if false
- foreach (bool l5 in read_tokens(C2, Dict, Tokens))
- {
- yield return false;
- }
-#endif
- arg1 = YP.getValue(C2);
- arg2 = YP.getValue(Dict);
- arg3 = YP.getValue(Tokens);
- repeat = true;
- }
- }
- goto cutIf1;
- }
- if (YP.greaterThanOrEqual(C1, new ListPair(97, Atom.NIL)))
- {
- if (YP.lessThanOrEqual(C1, new ListPair(122, Atom.NIL)))
- {
- foreach (bool l4 in read_identifier(C1, Dict, Tokens))
- {
- yield return false;
- }
- goto cutIf2;
- }
- }
- if (YP.greaterThanOrEqual(C1, new ListPair(65, Atom.NIL)))
- {
- if (YP.lessThanOrEqual(C1, new ListPair(90, Atom.NIL)))
- {
- foreach (bool l4 in read_variable(C1, Dict, Tokens))
- {
- yield return false;
- }
- goto cutIf3;
- }
- }
- if (YP.greaterThanOrEqual(C1, new ListPair(48, Atom.NIL)))
- {
- if (YP.lessThanOrEqual(C1, new ListPair(57, Atom.NIL)))
- {
- foreach (bool l4 in read_number(C1, Dict, Tokens))
- {
- yield return false;
- }
- goto cutIf4;
- }
- }
- if (YP.lessThan(C1, 127))
- {
- foreach (bool l3 in read_special(C1, Dict, Tokens))
- {
- yield return false;
- }
- goto cutIf5;
- }
- if (YP.lessThanOrEqual(C1, 160))
- {
- foreach (bool l3 in YP.get_code(C2))
- {
-#if false
- foreach (bool l4 in read_tokens(C2, Dict, Tokens))
- {
- yield return false;
- }
-#endif
- arg1 = YP.getValue(C2);
- arg2 = YP.getValue(Dict);
- arg3 = YP.getValue(Tokens);
- repeat = true;
- }
- goto cutIf6;
- }
- if (YP.greaterThanOrEqual(C1, 223))
- {
- if (YP.notEqual(C1, 247))
- {
- foreach (bool l4 in read_identifier(C1, Dict, Tokens))
- {
- yield return false;
- }
- goto cutIf7;
- }
- }
- if (YP.greaterThanOrEqual(C1, 192))
- {
- if (YP.notEqual(C1, 215))
- {
- foreach (bool l4 in read_variable(C1, Dict, Tokens))
- {
- yield return false;
- }
- goto cutIf8;
- }
- }
- if (YP.notEqual(C1, 170))
- {
- if (YP.notEqual(C1, 186))
- {
- foreach (bool l4 in read_symbol(C1, Dict, Tokens))
- {
- yield return false;
- }
- goto cutIf9;
- }
- }
- foreach (bool l2 in read_identifier(C1, Dict, Tokens))
- {
- yield return false;
- }
- cutIf9:
- cutIf8:
- cutIf7:
- cutIf6:
- cutIf5:
- cutIf4:
- cutIf3:
- cutIf2:
- cutIf1:
- { }
- }
- }
- }
-
- // Compiler output follows.
-
- class YPInnerClass { }
- static Type getDeclaringClass() { return typeof(YPInnerClass).DeclaringType; }
-
- public static IEnumerable parseInput(object TermList)
- {
- {
- Variable TermAndVariables = new Variable();
- FindallAnswers findallAnswers1 = new FindallAnswers(TermAndVariables);
- foreach (bool l2 in parseInputHelper(TermAndVariables))
- {
- findallAnswers1.add();
- }
- foreach (bool l2 in findallAnswers1.result(TermList))
- {
- yield return false;
- }
- }
- }
-
- public static IEnumerable parseInputHelper(object arg1)
- {
- {
- Variable Term = new Variable();
- Variable Variables = new Variable();
- Variable Answer = new Variable();
- Variable x4 = new Variable();
- foreach (bool l2 in YP.unify(arg1, new Functor2(@"f", Term, Variables)))
- {
- foreach (bool l3 in YP.repeat())
- {
- foreach (bool l4 in portable_read3(Answer, Variables, x4))
- {
- foreach (bool l5 in remove_pos(Answer, Term))
- {
- if (YP.termEqual(Term, Atom.a(@"end_of_file")))
- {
- yield break;
- goto cutIf1;
- }
- yield return false;
- cutIf1:
- { }
- }
- }
- }
- }
- }
- }
-
- public static IEnumerable clear_errors()
- {
- {
- yield return false;
- }
- }
-
- public static IEnumerable remove_pos(object arg1, object arg2)
- {
- {
- Variable X = new Variable();
- foreach (bool l2 in YP.unify(arg1, X))
- {
- foreach (bool l3 in YP.unify(arg2, X))
- {
- if (YP.var(X))
- {
- yield return true;
- yield break;
- }
- }
- }
- }
- {
- object X = arg2;
- Variable _Pos = new Variable();
- Variable _Name = new Variable();
- foreach (bool l2 in YP.unify(arg1, new Functor3(@"$VAR", _Pos, _Name, X)))
- {
- if (YP.var(X))
- {
- yield return true;
- yield break;
- }
- }
- }
- {
- foreach (bool l2 in YP.unify(arg1, Atom.NIL))
- {
- foreach (bool l3 in YP.unify(arg2, Atom.NIL))
- {
- yield return true;
- yield break;
- }
- }
- }
- {
- Variable H = new Variable();
- Variable T = new Variable();
- Variable NH = new Variable();
- Variable NT = new Variable();
- foreach (bool l2 in YP.unify(arg1, new ListPair(H, T)))
- {
- foreach (bool l3 in YP.unify(arg2, new ListPair(NH, NT)))
- {
- foreach (bool l4 in remove_pos(H, NH))
- {
- foreach (bool l5 in remove_pos(T, NT))
- {
- yield return false;
- }
- }
- yield break;
- }
- }
- }
- {
- Variable A = new Variable();
- Variable B = new Variable();
- Variable NA = new Variable();
- Variable NB = new Variable();
- foreach (bool l2 in YP.unify(arg1, new Functor2(@",", A, B)))
- {
- foreach (bool l3 in YP.unify(arg2, new Functor2(@",", NA, NB)))
- {
- foreach (bool l4 in remove_pos(A, NA))
- {
- foreach (bool l5 in remove_pos(B, NB))
- {
- yield return false;
- }
- }
- yield break;
- }
- }
- }
- {
- Variable Atom_1 = new Variable();
- Variable _F = new Variable();
- foreach (bool l2 in YP.unify(arg1, Atom_1))
- {
- foreach (bool l3 in YP.unify(arg2, Atom_1))
- {
- foreach (bool l4 in YP.functor(Atom_1, _F, 0))
- {
- yield return false;
- }
- }
- }
- }
- {
- object Term = arg1;
- object NewTerm = arg2;
- Variable Func = new Variable();
- Variable _Pos = new Variable();
- Variable Args = new Variable();
- Variable NArgs = new Variable();
- if (YP.nonvar(Term))
- {
- foreach (bool l3 in YP.univ(Term, new ListPair(Func, new ListPair(_Pos, Args))))
- {
- foreach (bool l4 in remove_pos(Args, NArgs))
- {
- foreach (bool l5 in YP.univ(NewTerm, new ListPair(Func, NArgs)))
- {
- yield return false;
- }
- }
- }
- }
- }
- }
-
- public static IEnumerable portable_read_position(object Term, object PosTerm, object Syntax)
- {
- {
- foreach (bool l2 in portable_read(PosTerm, Syntax))
- {
- foreach (bool l3 in remove_pos(PosTerm, Term))
- {
- yield return false;
- }
- }
- }
- }
-
- public static IEnumerable portable_read(object Answer, object Syntax)
- {
- {
- Variable Tokens = new Variable();
- Variable ParseTokens = new Variable();
- foreach (bool l2 in read_tokens1(Tokens))
- {
- foreach (bool l3 in remove_comments(Tokens, ParseTokens, Syntax))
- {
- foreach (bool l4 in parse2(ParseTokens, Answer))
- {
- yield return false;
- }
- }
- }
- }
- }
-
- public static IEnumerable portable_read3(object Answer, object Variables, object Syntax)
- {
- {
- Variable Tokens = new Variable();
- Variable ParseTokens = new Variable();
- foreach (bool l2 in read_tokens2(Tokens, Variables))
- {
- foreach (bool l3 in remove_comments(Tokens, ParseTokens, Syntax))
- {
- foreach (bool l4 in parse2(ParseTokens, Answer))
- {
- yield return false;
- }
- }
- }
- }
- }
-
- public static IEnumerable remove_comments(object arg1, object arg2, object arg3)
- {
- {
- foreach (bool l2 in YP.unify(arg1, Atom.NIL))
- {
- foreach (bool l3 in YP.unify(arg2, Atom.NIL))
- {
- foreach (bool l4 in YP.unify(arg3, Atom.NIL))
- {
- yield return false;
- }
- }
- }
- }
- {
- object Ys = arg2;
- Variable S = new Variable();
- Variable E = new Variable();
- Variable Xs = new Variable();
- Variable Zs = new Variable();
- foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"comment", S, E), Xs)))
- {
- foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2(@"comment", S, E), Zs)))
- {
- foreach (bool l4 in remove_comments(Xs, Ys, Zs))
- {
- yield return false;
- }
- yield break;
- }
- }
- }
- {
- Variable Pos = new Variable();
- Variable Xs = new Variable();
- Variable Ys = new Variable();
- Variable Pos2 = new Variable();
- Variable Zs = new Variable();
- foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"/", Atom.a(@"["), Pos), Xs)))
- {
- foreach (bool l3 in YP.unify(arg2, new ListPair(Atom.a(@"["), Ys)))
- {
- foreach (bool l4 in YP.unify(arg3, new ListPair(new Functor2(@"list", Pos, Pos2), Zs)))
- {
- foreach (bool l5 in YP.unify(Pos2, YP.add(Pos, 1)))
- {
- foreach (bool l6 in remove_comments(Xs, Ys, Zs))
- {
- yield return false;
- }
- }
- yield break;
- }
- }
- }
- }
- {
- Variable Pos = new Variable();
- Variable Xs = new Variable();
- Variable Ys = new Variable();
- Variable Pos2 = new Variable();
- Variable Zs = new Variable();
- foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"/", Atom.a(@"]"), Pos), Xs)))
- {
- foreach (bool l3 in YP.unify(arg2, new ListPair(Atom.a(@"]"), Ys)))
- {
- foreach (bool l4 in YP.unify(arg3, new ListPair(new Functor2(@"list", Pos, Pos2), Zs)))
- {
- foreach (bool l5 in YP.unify(Pos2, YP.add(Pos, 1)))
- {
- foreach (bool l6 in remove_comments(Xs, Ys, Zs))
- {
- yield return false;
- }
- }
- yield break;
- }
- }
- }
- }
- {
- object Zs = arg3;
- Variable Token = new Variable();
- Variable Xs = new Variable();
- Variable Ys = new Variable();
- foreach (bool l2 in YP.unify(arg1, new ListPair(Token, Xs)))
- {
- foreach (bool l3 in YP.unify(arg2, new ListPair(Token, Ys)))
- {
- foreach (bool l4 in remove_comments(Xs, Ys, Zs))
- {
- yield return false;
- }
- }
- }
- }
- }
-
- public static IEnumerable expect(object Token, object arg2, object arg3)
- {
- {
- object Rest = arg3;
- foreach (bool l2 in YP.unify(arg2, new ListPair(Token, Rest)))
- {
- yield return true;
- yield break;
- }
- }
- {
- object S0 = arg2;
- object x3 = arg3;
- foreach (bool l2 in syntax_error(new ListPair(Token, new ListPair(Atom.a(@"or"), new ListPair(Atom.a(@"operator"), new ListPair(Atom.a(@"expected"), Atom.NIL)))), S0))
- {
- yield return false;
- }
- }
- }
-
- public static IEnumerable parse2(object Tokens, object Answer)
- {
- {
- Variable Term = new Variable();
- Variable LeftOver = new Variable();
- foreach (bool l2 in clear_errors())
- {
- foreach (bool l3 in parse(Tokens, 1200, Term, LeftOver))
- {
- foreach (bool l4 in all_read(LeftOver))
- {
- foreach (bool l5 in YP.unify(Answer, Term))
- {
- yield return false;
- }
- yield break;
- }
- }
- foreach (bool l3 in syntax_error(Tokens))
- {
- yield return false;
- }
- }
- }
- }
-
- public static IEnumerable all_read(object arg1)
- {
- {
- foreach (bool l2 in YP.unify(arg1, Atom.NIL))
- {
- yield return false;
- }
- }
- {
- Variable Token = new Variable();
- Variable S = new Variable();
- foreach (bool l2 in YP.unify(arg1, new ListPair(Token, S)))
- {
- foreach (bool l3 in syntax_error(new ListPair(Atom.a(@"operator"), new ListPair(Atom.a(@"expected"), new ListPair(Atom.a(@"after"), new ListPair(Atom.a(@"expression"), Atom.NIL)))), new ListPair(Token, S)))
- {
- yield return false;
- }
- }
- }
- }
-
- public static IEnumerable parse(object arg1, object arg2, object arg3, object arg4)
- {
- {
- object x1 = arg2;
- object x2 = arg3;
- object x3 = arg4;
- foreach (bool l2 in YP.unify(arg1, Atom.NIL))
- {
- foreach (bool l3 in syntax_error(new ListPair(Atom.a(@"expression"), new ListPair(Atom.a(@"expected"), Atom.NIL)), Atom.NIL))
- {
- yield return false;
- }
- }
- }
- {
- object Precedence = arg2;
- object Term = arg3;
- object LeftOver = arg4;
- Variable Token = new Variable();
- Variable RestTokens = new Variable();
- foreach (bool l2 in YP.unify(arg1, new ListPair(Token, RestTokens)))
- {
- foreach (bool l3 in parse5(Token, RestTokens, Precedence, Term, LeftOver))
- {
- yield return false;
- }
- }
- }
- }
-
- public static IEnumerable parse5(object arg1, object arg2, object arg3, object arg4, object arg5)
- {
- {
- object S0 = arg2;
- object x2 = arg3;
- object x3 = arg4;
- object x4 = arg5;
- foreach (bool l2 in YP.unify(arg1, Atom.a(@"}")))
- {
- foreach (bool l3 in cannot_start(Atom.a(@"}"), S0))
- {
- yield return false;
- }
- }
- }
- {
- object S0 = arg2;
- object x2 = arg3;
- object x3 = arg4;
- object x4 = arg5;
- foreach (bool l2 in YP.unify(arg1, Atom.a(@"]")))
- {
- foreach (bool l3 in cannot_start(Atom.a(@"]"), S0))
- {
- yield return false;
- }
- }
- }
- {
- object S0 = arg2;
- object x2 = arg3;
- object x3 = arg4;
- object x4 = arg5;
- foreach (bool l2 in YP.unify(arg1, Atom.a(@")")))
- {
- foreach (bool l3 in cannot_start(Atom.a(@")"), S0))
- {
- yield return false;
- }
- }
- }
- {
- object S0 = arg2;
- object x2 = arg3;
- object x3 = arg4;
- object x4 = arg5;
- foreach (bool l2 in YP.unify(arg1, Atom.a(@",")))
- {
- foreach (bool l3 in cannot_start(Atom.a(@","), S0))
- {
- yield return false;
- }
- }
- }
- {
- object S0 = arg2;
- object x2 = arg3;
- object x3 = arg4;
- object x4 = arg5;
- foreach (bool l2 in YP.unify(arg1, Atom.a(@"|")))
- {
- foreach (bool l3 in cannot_start(Atom.a(@"|"), S0))
- {
- yield return false;
- }
- }
- }
- {
- object S0 = arg2;
- object Precedence = arg3;
- object Answer = arg4;
- object S = arg5;
- Variable Chars = new Variable();
- foreach (bool l2 in YP.unify(arg1, new Functor1(@"string", Chars)))
- {
- foreach (bool l3 in exprtl0(S0, Chars, Precedence, Answer, S))
- {
- yield return false;
- }
- }
- }
- {
- object S0 = arg2;
- object Precedence = arg3;
- object Answer = arg4;
- object S = arg5;
- Variable Number = new Variable();
- foreach (bool l2 in YP.unify(arg1, new Functor1(@"number", Number)))
- {
- foreach (bool l3 in exprtl0(S0, Number, Precedence, Answer, S))
- {
- yield return false;
- }
- }
- }
- {
- object Precedence = arg3;
- object Answer = arg4;
- object S = arg5;
- Variable S1 = new Variable();
- foreach (bool l2 in YP.unify(arg1, Atom.a(@"[")))
- {
- foreach (bool l3 in YP.unify(arg2, new ListPair(Atom.a(@"]"), S1)))
- {
- foreach (bool l4 in read_atom(new Functor2(@"/", Atom.NIL, 0), S1, Precedence, Answer, S))
- {
- yield return false;
- }
- yield break;
- }
- }
- }
- {
- object S1 = arg2;
- object Precedence = arg3;
- object Answer = arg4;
- object S = arg5;
- Variable Arg1 = new Variable();
- Variable S2 = new Variable();
- Variable RestArgs = new Variable();
- Variable S3 = new Variable();
- foreach (bool l2 in YP.unify(arg1, Atom.a(@"[")))
- {
- foreach (bool l3 in parse(S1, 999, Arg1, S2))
- {
- foreach (bool l4 in read_list(S2, RestArgs, S3))
- {
- foreach (bool l5 in exprtl0(S3, new ListPair(Arg1, RestArgs), Precedence, Answer, S))
- {
- yield return false;
- }
- yield break;
- }
- }
- }
- }
- {
- object S1 = arg2;
- object Precedence = arg3;
- object Answer = arg4;
- object S = arg5;
- Variable Term = new Variable();
- Variable S2 = new Variable();
- Variable S3 = new Variable();
- foreach (bool l2 in YP.unify(arg1, Atom.a(@"(")))
- {
- foreach (bool l3 in parse(S1, 1200, Term, S2))
- {
- foreach (bool l4 in expect(Atom.a(@")"), S2, S3))
- {
- foreach (bool l5 in exprtl0(S3, Term, Precedence, Answer, S))
- {
- yield return false;
- }
- yield break;
- }
- }
- }
- }
- {
- object S1 = arg2;
- object Precedence = arg3;
- object Answer = arg4;
- object S = arg5;
- Variable Term = new Variable();
- Variable S2 = new Variable();
- Variable S3 = new Variable();
- foreach (bool l2 in YP.unify(arg1, Atom.a(@" (")))
- {
- foreach (bool l3 in parse(S1, 1200, Term, S2))
- {
- foreach (bool l4 in expect(Atom.a(@")"), S2, S3))
- {
- foreach (bool l5 in exprtl0(S3, Term, Precedence, Answer, S))
- {
- yield return false;
- }
- yield break;
- }
- }
- }
- }
- {
- object Precedence = arg3;
- object Answer = arg4;
- object S = arg5;
- Variable _Pos = new Variable();
- Variable S1 = new Variable();
- foreach (bool l2 in YP.unify(arg1, new Functor2(@"/", Atom.a(@"{"), _Pos)))
- {
- foreach (bool l3 in YP.unify(arg2, new ListPair(Atom.a(@"}"), S1)))
- {
- foreach (bool l4 in read_atom(Atom.a(@"{}"), S1, Precedence, Answer, S))
- {
- yield return false;
- }
- yield break;
- }
- }
- }
- {
- object S1 = arg2;
- object Precedence = arg3;
- object Answer = arg4;
- object S = arg5;
- Variable Pos = new Variable();
- Variable Term = new Variable();
- Variable S2 = new Variable();
- Variable S3 = new Variable();
- foreach (bool l2 in YP.unify(arg1, new Functor2(@"/", Atom.a(@"{"), Pos)))
- {
- foreach (bool l3 in parse(S1, 1200, Term, S2))
- {
- foreach (bool l4 in expect(Atom.a(@"}"), S2, S3))
- {
- foreach (bool l5 in exprtl0(S3, new Functor2(@"{}", Pos, Term), Precedence, Answer, S))
- {
- yield return false;
- }
- yield break;
- }
- }
- }
- }
- {
- object Precedence = arg3;
- object Answer = arg4;
- object S = arg5;
- Variable Variable_1 = new Variable();
- Variable Name = new Variable();
- Variable Pos = new Variable();
- Variable S1 = new Variable();
- Variable Arg1 = new Variable();
- Variable S2 = new Variable();
- Variable RestArgs = new Variable();
- Variable S3 = new Variable();
- Variable Term = new Variable();
- foreach (bool l2 in YP.unify(arg1, new Functor3(@"var", Variable_1, Name, Pos)))
- {
- foreach (bool l3 in YP.unify(arg2, new ListPair(Atom.a(@"("), S1)))
- {
- foreach (bool l4 in parse(S1, 999, Arg1, S2))
- {
- foreach (bool l5 in read_args(S2, RestArgs, S3))
- {
- foreach (bool l6 in YP.univ(Term, new ListPair(Atom.a(@"call"), new ListPair(new Functor3(@"$VAR", Pos, Name, Variable_1), new ListPair(Arg1, RestArgs)))))
- {
- foreach (bool l7 in exprtl0(S3, Term, Precedence, Answer, S))
- {
- yield return false;
- }
- }
- yield break;
- }
- }
- yield break;
- }
- }
- }
- {
- object S0 = arg2;
- object Precedence = arg3;
- object Answer = arg4;
- object S = arg5;
- Variable Variable_1 = new Variable();
- Variable Name = new Variable();
- Variable Pos = new Variable();
- foreach (bool l2 in YP.unify(arg1, new Functor3(@"var", Variable_1, Name, Pos)))
- {
- foreach (bool l3 in exprtl0(S0, new Functor3(@"$VAR", Pos, Name, Variable_1), Precedence, Answer, S))
- {
- yield return false;
- }
- }
- }
- {
- object S0 = arg2;
- object Precedence = arg3;
- object Answer = arg4;
- object S = arg5;
- Variable Atom_1 = new Variable();
- Variable P = new Variable();
- foreach (bool l2 in YP.unify(arg1, new Functor2(@"atom", Atom_1, P)))
- {
- foreach (bool l3 in read_atom(new Functor2(@"/", Atom_1, P), S0, Precedence, Answer, S))
- {
- yield return false;
- }
- }
- }
- }
-
- public static IEnumerable read_atom(object arg1, object arg2, object Precedence, object Answer, object S)
- {
- {
- Variable _Pos = new Variable();
- Variable Number = new Variable();
- Variable S1 = new Variable();
- Variable Negative = new Variable();
- foreach (bool l2 in YP.unify(arg1, new Functor2(@"/", Atom.a(@"-"), _Pos)))
- {
- foreach (bool l3 in YP.unify(arg2, new ListPair(new Functor1(@"number", Number), S1)))
- {
- foreach (bool l4 in YP.unify(Negative, YP.negate(Number)))
- {
- foreach (bool l5 in exprtl0(S1, Negative, Precedence, Answer, S))
- {
- yield return false;
- }
- }
- yield break;
- }
- }
- }
- {
- Variable Functor_1 = new Variable();
- Variable Pos = new Variable();
- Variable S1 = new Variable();
- Variable Arg1 = new Variable();
- Variable S2 = new Variable();
- Variable RestArgs = new Variable();
- Variable S3 = new Variable();
- Variable Term = new Variable();
- foreach (bool l2 in YP.unify(arg1, new Functor2(@"/", Functor_1, Pos)))
- {
- foreach (bool l3 in YP.unify(arg2, new ListPair(Atom.a(@"("), S1)))
- {
- foreach (bool l4 in parse(S1, 999, Arg1, S2))
- {
- foreach (bool l5 in read_args(S2, RestArgs, S3))
- {
- foreach (bool l6 in YP.univ(Term, new ListPair(Functor_1, new ListPair(Pos, new ListPair(Arg1, RestArgs)))))
- {
- foreach (bool l7 in exprtl0(S3, Term, Precedence, Answer, S))
- {
- yield return false;
- }
- }
- yield break;
- }
- }
- yield break;
- }
- }
- }
- {
- object S0 = arg2;
- Variable Op = new Variable();
- Variable Pos = new Variable();
- Variable Oprec = new Variable();
- Variable Aprec = new Variable();
- Variable Flag = new Variable();
- Variable Term = new Variable();
- Variable Arg = new Variable();
- Variable S1 = new Variable();
- foreach (bool l2 in YP.unify(arg1, new Functor2(@"/", Op, Pos)))
- {
- foreach (bool l3 in prefixop(Op, Oprec, Aprec))
- {
- foreach (bool l4 in possible_right_operand(S0, Flag))
- {
- if (YP.lessThan(Flag, 0))
- {
- foreach (bool l6 in YP.univ(Term, new ListPair(Op, new ListPair(Pos, Atom.NIL))))
- {
- foreach (bool l7 in exprtl0(S0, Term, Precedence, Answer, S))
- {
- yield return false;
- }
- }
- goto cutIf1;
- }
- if (YP.greaterThan(Oprec, Precedence))
- {
- foreach (bool l6 in syntax_error(new ListPair(Atom.a(@"prefix"), new ListPair(Atom.a(@"operator"), new ListPair(Op, new ListPair(Atom.a(@"in"), new ListPair(Atom.a(@"context"), new ListPair(Atom.a(@"with"), new ListPair(Atom.a(@"precedence"), new ListPair(Precedence, Atom.NIL)))))))), S0))
- {
- yield return false;
- }
- goto cutIf2;
- }
- if (YP.greaterThan(Flag, 0))
- {
- foreach (bool l6 in parse(S0, Aprec, Arg, S1))
- {
- foreach (bool l7 in YP.univ(Term, new ListPair(Op, new ListPair(Pos, new ListPair(Arg, Atom.NIL)))))
- {
- foreach (bool l8 in exprtl(S1, Oprec, Term, Precedence, Answer, S))
- {
- yield return false;
- }
- }
- yield break;
- }
- goto cutIf3;
- }
- foreach (bool l5 in peepop(S0, S1))
- {
- foreach (bool l6 in prefix_is_atom(S1, Oprec))
- {
- foreach (bool l7 in exprtl(S1, Oprec, new Functor2(@"/", Op, Pos), Precedence, Answer, S))
- {
- yield return false;
- }
- }
- }
- foreach (bool l5 in parse(S0, Aprec, Arg, S1))
- {
- foreach (bool l6 in YP.univ(Term, new ListPair(Op, new ListPair(Pos, new ListPair(Arg, Atom.NIL)))))
- {
- foreach (bool l7 in exprtl(S1, Oprec, Term, Precedence, Answer, S))
- {
- yield return false;
- }
- }
- yield break;
- }
- cutIf3:
- cutIf2:
- cutIf1:
- { }
- }
- yield break;
- }
- }
- }
- {
- object S0 = arg2;
- Variable Atom_1 = new Variable();
- Variable Pos = new Variable();
- Variable Term = new Variable();
- foreach (bool l2 in YP.unify(arg1, new Functor2(@"/", Atom_1, Pos)))
- {
- foreach (bool l3 in YP.univ(Term, new ListPair(Atom_1, new ListPair(Pos, Atom.NIL))))
- {
- foreach (bool l4 in exprtl0(S0, Term, Precedence, Answer, S))
- {
- yield return false;
- }
- }
- }
- }
- }
-
- public static IEnumerable cannot_start(object Token, object S0)
- {
- {
- foreach (bool l2 in syntax_error(new ListPair(Token, new ListPair(Atom.a(@"cannot"), new ListPair(Atom.a(@"start"), new ListPair(Atom.a(@"an"), new ListPair(Atom.a(@"expression"), Atom.NIL))))), S0))
- {
- yield return false;
- }
- }
- }
-
- public static IEnumerable read_args(object arg1, object arg2, object arg3)
- {
- {
- object S = arg3;
- Variable S1 = new Variable();
- Variable Term = new Variable();
- Variable Rest = new Variable();
- Variable S2 = new Variable();
- foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a(@","), S1)))
- {
- foreach (bool l3 in YP.unify(arg2, new ListPair(Term, Rest)))
- {
- foreach (bool l4 in parse(S1, 999, Term, S2))
- {
- foreach (bool l5 in read_args(S2, Rest, S))
- {
- yield return false;
- }
- yield break;
- }
- yield break;
- }
- }
- }
- {
- object S = arg3;
- foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a(@")"), S)))
- {
- foreach (bool l3 in YP.unify(arg2, Atom.NIL))
- {
- yield return true;
- yield break;
- }
- }
- }
- {
- object S = arg1;
- object x2 = arg2;
- object x3 = arg3;
- foreach (bool l2 in syntax_error(new ListPair(Atom.a(@", or )"), new ListPair(Atom.a(@"expected"), new ListPair(Atom.a(@"in"), new ListPair(Atom.a(@"arguments"), Atom.NIL)))), S))
- {
- yield return false;
- }
- }
- }
-
- public static IEnumerable read_list(object arg1, object arg2, object arg3)
- {
- {
- object x1 = arg2;
- object x2 = arg3;
- foreach (bool l2 in YP.unify(arg1, Atom.NIL))
- {
- foreach (bool l3 in syntax_error(new ListPair(Atom.a(@", | or ]"), new ListPair(Atom.a(@"expected"), new ListPair(Atom.a(@"in"), new ListPair(Atom.a(@"list"), Atom.NIL)))), Atom.NIL))
- {
- yield return false;
- }
- }
- }
- {
- object Rest = arg2;
- object S = arg3;
- Variable Token = new Variable();
- Variable S1 = new Variable();
- foreach (bool l2 in YP.unify(arg1, new ListPair(Token, S1)))
- {
- foreach (bool l3 in read_list4(Token, S1, Rest, S))
- {
- yield return false;
- }
- }
- }
- }
-
- public static IEnumerable read_list4(object arg1, object arg2, object arg3, object arg4)
- {
- {
- object S1 = arg2;
- object S = arg4;
- Variable Term = new Variable();
- Variable Rest = new Variable();
- Variable S2 = new Variable();
- foreach (bool l2 in YP.unify(arg1, Atom.a(@",")))
- {
- foreach (bool l3 in YP.unify(arg3, new ListPair(Term, Rest)))
- {
- foreach (bool l4 in parse(S1, 999, Term, S2))
- {
- foreach (bool l5 in read_list(S2, Rest, S))
- {
- yield return false;
- }
- yield break;
- }
- yield break;
- }
- }
- }
- {
- object S1 = arg2;
- object Rest = arg3;
- object S = arg4;
- Variable S2 = new Variable();
- foreach (bool l2 in YP.unify(arg1, Atom.a(@"|")))
- {
- foreach (bool l3 in parse(S1, 999, Rest, S2))
- {
- foreach (bool l4 in expect(Atom.a(@"]"), S2, S))
- {
- yield return false;
- }
- yield break;
- }
- yield break;
- }
- }
- {
- Variable S1 = new Variable();
- foreach (bool l2 in YP.unify(arg1, Atom.a(@"]")))
- {
- foreach (bool l3 in YP.unify(arg2, S1))
- {
- foreach (bool l4 in YP.unify(arg3, Atom.NIL))
- {
- foreach (bool l5 in YP.unify(arg4, S1))
- {
- yield return true;
- yield break;
- }
- }
- }
- }
- }
- {
- object Token = arg1;
- object S1 = arg2;
- object x3 = arg3;
- object x4 = arg4;
- foreach (bool l2 in syntax_error(new ListPair(Atom.a(@", | or ]"), new ListPair(Atom.a(@"expected"), new ListPair(Atom.a(@"in"), new ListPair(Atom.a(@"list"), Atom.NIL)))), new ListPair(Token, S1)))
- {
- yield return false;
- }
- }
- }
-
- public static IEnumerable possible_right_operand(object arg1, object arg2)
- {
- {
- foreach (bool l2 in YP.unify(arg1, Atom.NIL))
- {
- foreach (bool l3 in YP.unify(arg2, -1))
- {
- yield return false;
- }
- }
- }
- {
- object Flag = arg2;
- Variable H = new Variable();
- Variable T = new Variable();
- foreach (bool l2 in YP.unify(arg1, new ListPair(H, T)))
- {
- foreach (bool l3 in possible_right_operand3(H, Flag, T))
- {
- yield return false;
- }
- }
- }
- }
-
- public static IEnumerable possible_right_operand3(object arg1, object arg2, object arg3)
- {
- {
- object x4 = arg3;
- Variable x1 = new Variable();
- Variable x2 = new Variable();
- Variable x3 = new Variable();
- foreach (bool l2 in YP.unify(arg1, new Functor3(@"var", x1, x2, x3)))
- {
- foreach (bool l3 in YP.unify(arg2, 1))
- {
- yield return false;
- }
- }
- }
- {
- object x2 = arg3;
- Variable x1 = new Variable();
- foreach (bool l2 in YP.unify(arg1, new Functor1(@"number", x1)))
- {
- foreach (bool l3 in YP.unify(arg2, 1))
- {
- yield return false;
- }
- }
- }
- {
- object x2 = arg3;
- Variable x1 = new Variable();
- foreach (bool l2 in YP.unify(arg1, new Functor1(@"string", x1)))
- {
- foreach (bool l3 in YP.unify(arg2, 1))
- {
- yield return false;
- }
- }
- }
- {
- object x1 = arg3;
- foreach (bool l2 in YP.unify(arg1, Atom.a(@" (")))
- {
- foreach (bool l3 in YP.unify(arg2, 1))
- {
- yield return false;
- }
- }
- }
- {
- object x1 = arg3;
- foreach (bool l2 in YP.unify(arg1, Atom.a(@"(")))
- {
- foreach (bool l3 in YP.unify(arg2, 0))
- {
- yield return false;
- }
- }
- }
- {
- object x1 = arg3;
- foreach (bool l2 in YP.unify(arg1, Atom.a(@")")))
- {
- foreach (bool l3 in YP.unify(arg2, -1))
- {
- yield return false;
- }
- }
- }
- {
- Variable x1 = new Variable();
- foreach (bool l2 in YP.unify(arg1, Atom.a(@"[")))
- {
- foreach (bool l3 in YP.unify(arg2, 0))
- {
- foreach (bool l4 in YP.unify(arg3, new ListPair(Atom.a(@"]"), x1)))
- {
- yield return true;
- yield break;
- }
- }
- }
- }
- {
- object x1 = arg3;
- foreach (bool l2 in YP.unify(arg1, Atom.a(@"[")))
- {
- foreach (bool l3 in YP.unify(arg2, 1))
- {
- yield return false;
- }
- }
- }
- {
- object x1 = arg3;
- foreach (bool l2 in YP.unify(arg1, Atom.a(@"]")))
- {
- foreach (bool l3 in YP.unify(arg2, -1))
- {
- yield return false;
- }
- }
- }
- {
- Variable x1 = new Variable();
- foreach (bool l2 in YP.unify(arg1, Atom.a(@"{")))
- {
- foreach (bool l3 in YP.unify(arg2, 0))
- {
- foreach (bool l4 in YP.unify(arg3, new ListPair(Atom.a(@"}"), x1)))
- {
- yield return true;
- yield break;
- }
- }
- }
- }
- {
- object x1 = arg3;
- foreach (bool l2 in YP.unify(arg1, Atom.a(@"{")))
- {
- foreach (bool l3 in YP.unify(arg2, 1))
- {
- yield return false;
- }
- }
- }
- {
- object x1 = arg3;
- foreach (bool l2 in YP.unify(arg1, Atom.a(@"}")))
- {
- foreach (bool l3 in YP.unify(arg2, -1))
- {
- yield return false;
- }
- }
- }
- {
- object x1 = arg3;
- foreach (bool l2 in YP.unify(arg1, Atom.a(@",")))
- {
- foreach (bool l3 in YP.unify(arg2, -1))
- {
- yield return false;
- }
- }
- }
- {
- object x1 = arg3;
- foreach (bool l2 in YP.unify(arg1, Atom.a(@"|")))
- {
- foreach (bool l3 in YP.unify(arg2, -1))
- {
- yield return false;
- }
- }
- }
- {
- object x3 = arg3;
- Variable x1 = new Variable();
- Variable x2 = new Variable();
- foreach (bool l2 in YP.unify(arg1, new Functor2(@"atom", x1, x2)))
- {
- foreach (bool l3 in YP.unify(arg2, 0))
- {
- yield return false;
- }
- }
- }
- }
-
- public static IEnumerable peepop(object arg1, object arg2)
- {
- {
- Variable F = new Variable();
- Variable Pos = new Variable();
- Variable S1 = new Variable();
- foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"atom", F, Pos), new ListPair(Atom.a(@"("), S1))))
- {
- foreach (bool l3 in YP.unify(arg2, new ListPair(new Functor2(@"atom", F, Pos), new ListPair(Atom.a(@"("), S1))))
- {
- yield return true;
- yield break;
- }
- }
- }
- {
- Variable F = new Variable();
- Variable Pos = new Variable();
- Variable S1 = new Variable();
- Variable L = new Variable();
- Variable P = new Variable();
- Variable R = new Variable();
- foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"atom", F, Pos), S1)))
- {
- foreach (bool l3 in YP.unify(arg2, new ListPair(new Functor(Atom.a(@"infixop", Atom.a(@"")), new object[] { new Functor2(@"/", F, Pos), L, P, R }), S1)))
- {
- foreach (bool l4 in infixop(F, L, P, R))
- {
- yield return false;
- }
- }
- }
- }
- {
- Variable F = new Variable();
- Variable Pos = new Variable();
- Variable S1 = new Variable();
- Variable L = new Variable();
- Variable P = new Variable();
- foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"atom", F, Pos), S1)))
- {
- foreach (bool l3 in YP.unify(arg2, new ListPair(new Functor3(Atom.a(@"postfixop", Atom.a(@"")), new Functor2(@"/", F, Pos), L, P), S1)))
- {
- foreach (bool l4 in postfixop(F, L, P))
- {
- yield return false;
- }
- }
- }
- }
- {
- Variable S0 = new Variable();
- foreach (bool l2 in YP.unify(arg1, S0))
- {
- foreach (bool l3 in YP.unify(arg2, S0))
- {
- yield return false;
- }
- }
- }
- }
-
- public static IEnumerable prefix_is_atom(object arg1, object arg2)
- {
- {
- object Precedence = arg2;
- Variable Token = new Variable();
- Variable x2 = new Variable();
- foreach (bool l2 in YP.unify(arg1, new ListPair(Token, x2)))
- {
- foreach (bool l3 in prefix_is_atom(Token, Precedence))
- {
- yield return false;
- }
- }
- }
- {
- object P = arg2;
- Variable x1 = new Variable();
- Variable L = new Variable();
- Variable x3 = new Variable();
- Variable x4 = new Variable();
- foreach (bool l2 in YP.unify(arg1, new Functor(Atom.a(@"infixop", Atom.a(@"")), new object[] { x1, L, x3, x4 })))
- {
- if (YP.greaterThanOrEqual(L, P))
- {
- yield return false;
- }
- }
- }
- {
- object P = arg2;
- Variable x1 = new Variable();
- Variable L = new Variable();
- Variable x3 = new Variable();
- foreach (bool l2 in YP.unify(arg1, new Functor3(Atom.a(@"postfixop", Atom.a(@"")), x1, L, x3)))
- {
- if (YP.greaterThanOrEqual(L, P))
- {
- yield return false;
- }
- }
- }
- {
- object x1 = arg2;
- foreach (bool l2 in YP.unify(arg1, Atom.a(@")")))
- {
- yield return false;
- }
- }
- {
- object x1 = arg2;
- foreach (bool l2 in YP.unify(arg1, Atom.a(@"]")))
- {
- yield return false;
- }
- }
- {
- object x1 = arg2;
- foreach (bool l2 in YP.unify(arg1, Atom.a(@"}")))
- {
- yield return false;
- }
- }
- {
- object P = arg2;
- foreach (bool l2 in YP.unify(arg1, Atom.a(@"|")))
- {
- if (YP.greaterThanOrEqual(1100, P))
- {
- yield return false;
- }
- }
- }
- {
- object P = arg2;
- foreach (bool l2 in YP.unify(arg1, Atom.a(@",")))
- {
- if (YP.greaterThanOrEqual(1000, P))
- {
- yield return false;
- }
- }
- }
- {
- object x1 = arg2;
- foreach (bool l2 in YP.unify(arg1, Atom.NIL))
- {
- yield return false;
- }
- }
- }
-
- public static IEnumerable exprtl0(object arg1, object arg2, object arg3, object arg4, object arg5)
- {
- {
- object x2 = arg3;
- Variable Term = new Variable();
- foreach (bool l2 in YP.unify(arg1, Atom.NIL))
- {
- foreach (bool l3 in YP.unify(arg2, Term))
- {
- foreach (bool l4 in YP.unify(arg4, Term))
- {
- foreach (bool l5 in YP.unify(arg5, Atom.NIL))
- {
- yield return false;
- }
- }
- }
- }
- }
- {
- object Term = arg2;
- object Precedence = arg3;
- object Answer = arg4;
- object S = arg5;
- Variable Token = new Variable();
- Variable S1 = new Variable();
- foreach (bool l2 in YP.unify(arg1, new ListPair(Token, S1)))
- {
- foreach (bool l3 in exprtl0_6(Token, Term, Precedence, Answer, S, S1))
- {
- yield return false;
- }
- }
- }
- }
-
- public static IEnumerable exprtl0_6(object arg1, object arg2, object arg3, object arg4, object arg5, object arg6)
- {
- {
- object x2 = arg3;
- object S1 = arg6;
- Variable Term = new Variable();
- foreach (bool l2 in YP.unify(arg1, Atom.a(@"}")))
- {
- foreach (bool l3 in YP.unify(arg2, Term))
- {
- foreach (bool l4 in YP.unify(arg4, Term))
- {
- foreach (bool l5 in YP.unify(arg5, new ListPair(Atom.a(@"}"), S1)))
- {
- yield return false;
- }
- }
- }
- }
- }
- {
- object x2 = arg3;
- object S1 = arg6;
- Variable Term = new Variable();
- foreach (bool l2 in YP.unify(arg1, Atom.a(@"]")))
- {
- foreach (bool l3 in YP.unify(arg2, Term))
- {
- foreach (bool l4 in YP.unify(arg4, Term))
- {
- foreach (bool l5 in YP.unify(arg5, new ListPair(Atom.a(@"]"), S1)))
- {
- yield return false;
- }
- }
- }
- }
- }
- {
- object x2 = arg3;
- object S1 = arg6;
- Variable Term = new Variable();
- foreach (bool l2 in YP.unify(arg1, Atom.a(@")")))
- {
- foreach (bool l3 in YP.unify(arg2, Term))
- {
- foreach (bool l4 in YP.unify(arg4, Term))
- {
- foreach (bool l5 in YP.unify(arg5, new ListPair(Atom.a(@")"), S1)))
- {
- yield return false;
- }
- }
- }
- }
- }
- {
- object Term = arg2;
- object Precedence = arg3;
- object Answer = arg4;
- object S = arg5;
- object S1 = arg6;
- Variable Next = new Variable();
- Variable S2 = new Variable();
- foreach (bool l2 in YP.unify(arg1, Atom.a(@",")))
- {
- if (YP.greaterThanOrEqual(Precedence, 1000))
- {
- foreach (bool l4 in parse(S1, 1000, Next, S2))
- {
- foreach (bool l5 in exprtl(S2, 1000, new Functor2(@",", Term, Next), Precedence, Answer, S))
- {
- yield return false;
- }
- yield break;
- }
- goto cutIf1;
- }
- foreach (bool l3 in YP.unify(Answer, Term))
- {
- foreach (bool l4 in YP.unify(S, new ListPair(Atom.a(@","), S1)))
- {
- yield return false;
- }
- }
- cutIf1:
- { }
- }
- }
- {
- object Term = arg2;
- object Precedence = arg3;
- object Answer = arg4;
- object S = arg5;
- object S1 = arg6;
- Variable Next = new Variable();
- Variable S2 = new Variable();
- foreach (bool l2 in YP.unify(arg1, Atom.a(@"|")))
- {
- if (YP.greaterThanOrEqual(Precedence, 1100))
- {
- foreach (bool l4 in parse(S1, 1100, Next, S2))
- {
- foreach (bool l5 in exprtl(S2, 1100, new Functor2(@";", Term, Next), Precedence, Answer, S))
- {
- yield return false;
- }
- yield break;
- }
- goto cutIf2;
- }
- foreach (bool l3 in YP.unify(Answer, Term))
- {
- foreach (bool l4 in YP.unify(S, new ListPair(Atom.a(@"|"), S1)))
- {
- yield return false;
- }
- }
- cutIf2:
- { }
- }
- }
- {
- object x2 = arg2;
- object x3 = arg3;
- object x4 = arg4;
- object x5 = arg5;
- object S1 = arg6;
- Variable S = new Variable();
- foreach (bool l2 in YP.unify(arg1, new Functor1(@"string", S)))
- {
- foreach (bool l3 in cannot_follow(Atom.a(@"chars"), new Functor1(@"string", S), S1))
- {
- yield return false;
- }
- }
- }
- {
- object x2 = arg2;
- object x3 = arg3;
- object x4 = arg4;
- object x5 = arg5;
- object S1 = arg6;
- Variable N = new Variable();
- foreach (bool l2 in YP.unify(arg1, new Functor1(@"number", N)))
- {
- foreach (bool l3 in cannot_follow(Atom.a(@"number"), new Functor1(@"number", N), S1))
- {
- yield return false;
- }
- }
- }
- {
- object Term = arg2;
- object Precedence = arg3;
- object Answer = arg4;
- object S = arg5;
- Variable S1 = new Variable();
- foreach (bool l2 in YP.unify(arg1, Atom.a(@"{")))
- {
- foreach (bool l3 in YP.unify(arg6, new ListPair(Atom.a(@"}"), S1)))
- {
- foreach (bool l4 in exprtl0_atom(Atom.a(@"{}"), Term, Precedence, Answer, S, S1))
- {
- yield return false;
- }
- yield break;
- }
- }
- }
- {
- object x1 = arg2;
- object x2 = arg3;
- object x3 = arg4;
- object x4 = arg5;
- object S1 = arg6;
- foreach (bool l2 in YP.unify(arg1, Atom.a(@"{")))
- {
- foreach (bool l3 in cannot_follow(Atom.a(@"brace"), Atom.a(@"{"), S1))
- {
- yield return false;
- }
- }
- }
- {
- object Term = arg2;
- object Precedence = arg3;
- object Answer = arg4;
- object S = arg5;
- Variable S1 = new Variable();
- foreach (bool l2 in YP.unify(arg1, Atom.a(@"[")))
- {
- foreach (bool l3 in YP.unify(arg6, new ListPair(Atom.a(@"]"), S1)))
- {
- foreach (bool l4 in exprtl0_atom(Atom.NIL, Term, Precedence, Answer, S, S1))
- {
- yield return false;
- }
- yield break;
- }
- }
- }
- {
- object x1 = arg2;
- object x2 = arg3;
- object x3 = arg4;
- object x4 = arg5;
- object S1 = arg6;
- foreach (bool l2 in YP.unify(arg1, Atom.a(@"[")))
- {
- foreach (bool l3 in cannot_follow(Atom.a(@"bracket"), Atom.a(@"["), S1))
- {
- yield return false;
- }
- }
- }
- {
- object x1 = arg2;
- object x2 = arg3;
- object x3 = arg4;
- object x4 = arg5;
- object S1 = arg6;
- foreach (bool l2 in YP.unify(arg1, Atom.a(@"(")))
- {
- foreach (bool l3 in cannot_follow(Atom.a(@"parenthesis"), Atom.a(@"("), S1))
- {
- yield return false;
- }
- }
- }
- {
- object x1 = arg2;
- object x2 = arg3;
- object x3 = arg4;
- object x4 = arg5;
- object S1 = arg6;
- foreach (bool l2 in YP.unify(arg1, Atom.a(@" (")))
- {
- foreach (bool l3 in cannot_follow(Atom.a(@"parenthesis"), Atom.a(@"("), S1))
- {
- yield return false;
- }
- }
- }
- {
- object x4 = arg2;
- object x5 = arg3;
- object x6 = arg4;
- object x7 = arg5;
- object S1 = arg6;
- Variable A = new Variable();
- Variable B = new Variable();
- Variable P = new Variable();
- foreach (bool l2 in YP.unify(arg1, new Functor3(@"var", A, B, P)))
- {
- foreach (bool l3 in cannot_follow(Atom.a(@"variable"), new Functor3(@"var", A, B, P), S1))
- {
- yield return false;
- }
- }
- }
- {
- object Term = arg2;
- object Precedence = arg3;
- object Answer = arg4;
- object S = arg5;
- object S1 = arg6;
- Variable F = new Variable();
- Variable P = new Variable();
- foreach (bool l2 in YP.unify(arg1, new Functor2(@"atom", F, P)))
- {
- foreach (bool l3 in exprtl0_atom(new Functor2(@"/", F, P), Term, Precedence, Answer, S, S1))
- {
- yield return false;
- }
- }
- }
- }
-
- public static IEnumerable exprtl0_atom(object arg1, object arg2, object arg3, object arg4, object arg5, object S1)
- {
- {
- object Term = arg2;
- object Precedence = arg3;
- object Answer = arg4;
- object S = arg5;
- Variable F = new Variable();
- Variable Pos = new Variable();
- Variable L1 = new Variable();
- Variable O1 = new Variable();
- Variable R1 = new Variable();
- Variable L2 = new Variable();
- Variable O2 = new Variable();
- foreach (bool l2 in YP.unify(arg1, new Functor2(@"/", F, Pos)))
- {
- foreach (bool l3 in ambigop(F, Precedence, L1, O1, R1, L2, O2))
- {
- foreach (bool l4 in prefix_is_atom(S1, Precedence))
- {
- foreach (bool l5 in exprtl(new ListPair(new Functor3(Atom.a(@"postfixop", Atom.a(@"")), new Functor2(@"/", F, Pos), L2, O2), S1), 0, Term, Precedence, Answer, S))
- {
- yield return false;
- }
- yield break;
- }
- foreach (bool l4 in exprtl(new ListPair(new Functor(Atom.a(@"infixop", Atom.a(@"")), new object[] { new Functor2(@"/", F, Pos), L1, O1, R1 }), S1), 0, Term, Precedence, Answer, S))
- {
- yield return false;
- }
- foreach (bool l4 in exprtl(new ListPair(new Functor3(Atom.a(@"postfixop", Atom.a(@"")), new Functor2(@"/", F, Pos), L2, O2), S1), 0, Term, Precedence, Answer, S))
- {
- yield return false;
- }
- yield break;
- }
- }
- }
- {
- object Term = arg2;
- object Precedence = arg3;
- object Answer = arg4;
- object S = arg5;
- Variable F = new Variable();
- Variable Pos = new Variable();
- Variable L1 = new Variable();
- Variable O1 = new Variable();
- Variable R1 = new Variable();
- foreach (bool l2 in YP.unify(arg1, new Functor2(@"/", F, Pos)))
- {
- foreach (bool l3 in infixop(F, L1, O1, R1))
- {
- foreach (bool l4 in exprtl(new ListPair(new Functor(Atom.a(@"infixop", Atom.a(@"")), new object[] { new Functor2(@"/", F, Pos), L1, O1, R1 }), S1), 0, Term, Precedence, Answer, S))
- {
- yield return false;
- }
- yield break;
- }
- }
- }
- {
- object Term = arg2;
- object Precedence = arg3;
- object Answer = arg4;
- object S = arg5;
- Variable F = new Variable();
- Variable Pos = new Variable();
- Variable L2 = new Variable();
- Variable O2 = new Variable();
- foreach (bool l2 in YP.unify(arg1, new Functor2(@"/", F, Pos)))
- {
- foreach (bool l3 in postfixop(F, L2, O2))
- {
- foreach (bool l4 in exprtl(new ListPair(new Functor3(Atom.a(@"postfixop", Atom.a(@"")), new Functor2(@"/", F, Pos), L2, O2), S1), 0, Term, Precedence, Answer, S))
- {
- yield return false;
- }
- yield break;
- }
- }
- }
- {
- object X = arg1;
- object x2 = arg2;
- object x3 = arg3;
- object x4 = arg4;
- object x5 = arg5;
- Variable x7 = new Variable();
- foreach (bool l2 in syntax_error(new ListPair(new Functor2(@"-", Atom.a(@"non"), Atom.a(@"operator")), new ListPair(X, new ListPair(Atom.a(@"follows"), new ListPair(Atom.a(@"expression"), Atom.NIL)))), new ListPair(new Functor2(@"atom", X, x7), S1)))
- {
- yield return false;
- }
- yield break;
- }
- }
-
- public static IEnumerable cannot_follow(object Type, object Token, object Tokens)
- {
- {
- foreach (bool l2 in syntax_error(new ListPair(Type, new ListPair(Atom.a(@"follows"), new ListPair(Atom.a(@"expression"), Atom.NIL))), new ListPair(Token, Tokens)))
- {
- yield return false;
- }
- }
- }
-
- public static IEnumerable exprtl(object arg1, object arg2, object arg3, object arg4, object arg5, object arg6)
- {
- {
- object x1 = arg2;
- object x3 = arg4;
- Variable Term = new Variable();
- foreach (bool l2 in YP.unify(arg1, Atom.NIL))
- {
- foreach (bool l3 in YP.unify(arg3, Term))
- {
- foreach (bool l4 in YP.unify(arg5, Term))
- {
- foreach (bool l5 in YP.unify(arg6, Atom.NIL))
- {
- yield return false;
- }
- }
- }
- }
- }
- {
- object C = arg2;
- object Term = arg3;
- object Precedence = arg4;
- object Answer = arg5;
- object S = arg6;
- Variable Token = new Variable();
- Variable Tokens = new Variable();
- foreach (bool l2 in YP.unify(arg1, new ListPair(Token, Tokens)))
- {
- foreach (bool l3 in exprtl_7(Token, C, Term, Precedence, Answer, S, Tokens))
- {
- yield return false;
- }
- }
- }
- }
-
- public static IEnumerable exprtl_7(object arg1, object arg2, object arg3, object arg4, object arg5, object arg6, object arg7)
- {
- {
- object C = arg2;
- object Term = arg3;
- object Precedence = arg4;
- object Answer = arg5;
- object S = arg6;
- object S1 = arg7;
- Variable F = new Variable();
- Variable Pos = new Variable();
- Variable L = new Variable();
- Variable O = new Variable();
- Variable R = new Variable();
- Variable Other = new Variable();
- Variable S2 = new Variable();
- Variable Expr = new Variable();
- foreach (bool l2 in YP.unify(arg1, new Functor(Atom.a(@"infixop", Atom.a(@"")), new object[] { new Functor2(@"/", F, Pos), L, O, R })))
- {
- if (YP.greaterThanOrEqual(Precedence, O))
- {
- if (YP.lessThanOrEqual(C, L))
- {
- foreach (bool l5 in parse(S1, R, Other, S2))
- {
- foreach (bool l6 in YP.univ(Expr, new ListPair(F, new ListPair(Pos, new ListPair(Term, new ListPair(Other, Atom.NIL))))))
- {
- foreach (bool l7 in exprtl(S2, O, Expr, Precedence, Answer, S))
- {
- yield return false;
- }
- }
- }
- yield break;
- }
- }
- }
- }
- {
- object C = arg2;
- object Term = arg3;
- object Precedence = arg4;
- object Answer = arg5;
- object S = arg6;
- object S1 = arg7;
- Variable F = new Variable();
- Variable Pos = new Variable();
- Variable L = new Variable();
- Variable O = new Variable();
- Variable Expr = new Variable();
- Variable S2 = new Variable();
- foreach (bool l2 in YP.unify(arg1, new Functor3(Atom.a(@"postfixop", Atom.a(@"")), new Functor2(@"/", F, Pos), L, O)))
- {
- if (YP.greaterThanOrEqual(Precedence, O))
- {
- if (YP.lessThanOrEqual(C, L))
- {
- foreach (bool l5 in YP.univ(Expr, new ListPair(F, new ListPair(Pos, new ListPair(Term, Atom.NIL)))))
- {
- foreach (bool l6 in peepop(S1, S2))
- {
- foreach (bool l7 in exprtl(S2, O, Expr, Precedence, Answer, S))
- {
- yield return false;
- }
- }
- }
- yield break;
- }
- }
- }
- }
- {
- object C = arg2;
- object Term = arg3;
- object Precedence = arg4;
- object Answer = arg5;
- object S = arg6;
- object S1 = arg7;
- Variable Next = new Variable();
- Variable S2 = new Variable();
- foreach (bool l2 in YP.unify(arg1, Atom.a(@",")))
- {
- if (YP.greaterThanOrEqual(Precedence, 1000))
- {
- if (YP.lessThan(C, 1000))
- {
- foreach (bool l5 in parse(S1, 1000, Next, S2))
- {
- foreach (bool l6 in exprtl(S2, 1000, new Functor2(@",", Term, Next), Precedence, Answer, S))
- {
- yield return false;
- }
- }
- yield break;
- }
- }
- }
- }
- {
- object C = arg2;
- object Term = arg3;
- object Precedence = arg4;
- object Answer = arg5;
- object S = arg6;
- object S1 = arg7;
- Variable Next = new Variable();
- Variable S2 = new Variable();
- foreach (bool l2 in YP.unify(arg1, Atom.a(@"|")))
- {
- if (YP.greaterThanOrEqual(Precedence, 1100))
- {
- if (YP.lessThan(C, 1100))
- {
- foreach (bool l5 in parse(S1, 1100, Next, S2))
- {
- foreach (bool l6 in exprtl(S2, 1100, new Functor2(@";", Term, Next), Precedence, Answer, S))
- {
- yield return false;
- }
- }
- yield break;
- }
- }
- }
- }
- {
- object Token = arg1;
- object x2 = arg2;
- object x4 = arg4;
- object Tokens = arg7;
- Variable Term = new Variable();
- foreach (bool l2 in YP.unify(arg3, Term))
- {
- foreach (bool l3 in YP.unify(arg5, Term))
- {
- foreach (bool l4 in YP.unify(arg6, new ListPair(Token, Tokens)))
- {
- yield return false;
- }
- }
- }
- }
- }
-
- public static IEnumerable syntax_error(object _Message, object _List)
- {
- {
- yield break;
- }
- }
-
- public static IEnumerable syntax_error(object _List)
- {
- {
- yield break;
- }
- }
-
- public static IEnumerable prefixop(object F, object O, object Q)
- {
- {
- foreach (bool l2 in YP.current_op(O, Atom.a(@"fx"), F))
- {
- foreach (bool l3 in YP.unify(Q, YP.subtract(O, 1)))
- {
- yield return false;
- }
- goto cutIf1;
- }
- foreach (bool l2 in YP.current_op(O, Atom.a(@"fy"), F))
- {
- foreach (bool l3 in YP.unify(Q, O))
- {
- yield return false;
- }
- goto cutIf2;
- }
- cutIf2:
- cutIf1:
- { }
- }
- }
-
- public static IEnumerable postfixop(object F, object P, object O)
- {
- {
- foreach (bool l2 in YP.current_op(O, Atom.a(@"xf"), F))
- {
- foreach (bool l3 in YP.unify(P, YP.subtract(O, 1)))
- {
- yield return false;
- }
- goto cutIf1;
- }
- foreach (bool l2 in YP.current_op(O, Atom.a(@"yf"), F))
- {
- foreach (bool l3 in YP.unify(P, O))
- {
- yield return false;
- }
- goto cutIf2;
- }
- cutIf2:
- cutIf1:
- { }
- }
- }
-
- public static IEnumerable infixop(object F, object P, object O, object Q)
- {
- {
- foreach (bool l2 in YP.current_op(O, Atom.a(@"xfy"), F))
- {
- foreach (bool l3 in YP.unify(P, YP.subtract(O, 1)))
- {
- foreach (bool l4 in YP.unify(Q, O))
- {
- yield return false;
- }
- }
- goto cutIf1;
- }
- foreach (bool l2 in YP.current_op(O, Atom.a(@"xfx"), F))
- {
- foreach (bool l3 in YP.unify(P, YP.subtract(O, 1)))
- {
- foreach (bool l4 in YP.unify(Q, P))
- {
- yield return false;
- }
- }
- goto cutIf2;
- }
- foreach (bool l2 in YP.current_op(O, Atom.a(@"yfx"), F))
- {
- foreach (bool l3 in YP.unify(Q, YP.subtract(O, 1)))
- {
- foreach (bool l4 in YP.unify(P, O))
- {
- yield return false;
- }
- }
- goto cutIf3;
- }
- cutIf3:
- cutIf2:
- cutIf1:
- { }
- }
- }
-
- public static IEnumerable ambigop(object F, object Precedence, object L1, object O1, object R1, object L2, object O2)
- {
- {
- foreach (bool l2 in postfixop(F, L2, O2))
- {
- if (YP.lessThanOrEqual(O2, Precedence))
- {
- foreach (bool l4 in infixop(F, L1, O1, R1))
- {
- if (YP.lessThanOrEqual(O1, Precedence))
- {
- yield return false;
- }
- }
- }
- }
- }
- }
-
- public static IEnumerable read_tokens1(object arg1)
- {
- {
- object TokenList = arg1;
- Variable C1 = new Variable();
- Variable _X = new Variable();
- Variable ListOfTokens = new Variable();
- foreach (bool l2 in YP.get_code(C1))
- {
- foreach (bool l3 in read_tokens(C1, _X, ListOfTokens))
- {
- foreach (bool l4 in YP.unify(TokenList, ListOfTokens))
- {
- yield return false;
- }
- yield break;
- }
- }
- }
- {
- foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"atom", Atom.a(@"end_of_file"), 0), Atom.NIL)))
- {
- yield return false;
- }
- }
- }
-
- public static IEnumerable read_tokens2(object arg1, object arg2)
- {
- {
- object TokenList = arg1;
- object Dictionary = arg2;
- Variable C1 = new Variable();
- Variable Dict = new Variable();
- Variable ListOfTokens = new Variable();
- foreach (bool l2 in YP.get_code(C1))
- {
- foreach (bool l3 in read_tokens(C1, Dict, ListOfTokens))
- {
- foreach (bool l4 in terminate_list(Dict))
- {
- foreach (bool l5 in YP.unify(Dictionary, Dict))
- {
- foreach (bool l6 in YP.unify(TokenList, ListOfTokens))
- {
- yield return false;
- }
- }
- yield break;
- }
- }
- }
- }
- {
- foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"atom", Atom.a(@"end_of_file"), 0), Atom.NIL)))
- {
- foreach (bool l3 in YP.unify(arg2, Atom.NIL))
- {
- yield return false;
- }
- }
- }
- }
-
- public static IEnumerable terminate_list(object arg1)
- {
- {
- foreach (bool l2 in YP.unify(arg1, Atom.NIL))
- {
- yield return false;
- }
- }
- {
- Variable x1 = new Variable();
- Variable Tail = new Variable();
- foreach (bool l2 in YP.unify(arg1, new ListPair(x1, Tail)))
- {
- foreach (bool l3 in terminate_list(Tail))
- {
- yield return false;
- }
- }
- }
- }
-
- public static IEnumerable read_special(object arg1, object Dict, object arg3)
- {
- {
- object Tokens = arg3;
- foreach (bool l2 in YP.unify(arg1, 95))
- {
- foreach (bool l3 in read_variable(95, Dict, Tokens))
- {
- yield return false;
- }
- }
- }
- {
- object Tokens = arg3;
- foreach (bool l2 in YP.unify(arg1, 247))
- {
- foreach (bool l3 in read_symbol(247, Dict, Tokens))
- {
- yield return false;
- }
- }
- }
- {
- object Tokens = arg3;
- foreach (bool l2 in YP.unify(arg1, 215))
- {
- foreach (bool l3 in read_symbol(215, Dict, Tokens))
- {
- yield return false;
- }
- }
- }
- {
- Variable StartPos = new Variable();
- Variable EndPos = new Variable();
- Variable Tokens = new Variable();
- Variable Ch = new Variable();
- Variable NextCh = new Variable();
- foreach (bool l2 in YP.unify(arg1, 37))
- {
- foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2(@"comment", StartPos, EndPos), Tokens)))
- {
- foreach (bool l4 in get_current_position(StartPos))
- {
- foreach (bool l5 in YP.repeat())
- {
- foreach (bool l6 in YP.get_code(Ch))
- {
- if (YP.lessThan(Ch, new ListPair(32, Atom.NIL)))
- {
- if (YP.notEqual(Ch, 9))
- {
- if (YP.termNotEqual(Ch, -1))
- {
- foreach (bool l10 in get_current_position(EndPos))
- {
- foreach (bool l11 in YP.get_code(NextCh))
- {
- foreach (bool l12 in read_tokens(NextCh, Dict, Tokens))
- {
- yield return false;
- }
- }
- }
- }
- yield break;
- }
- }
- }
- }
- }
- }
- }
- }
- {
- object T = arg3;
- Variable C2 = new Variable();
- Variable StartPos = new Variable();
- Variable EndPos = new Variable();
- Variable Tokens = new Variable();
- Variable StartPos1 = new Variable();
- Variable NextCh = new Variable();
- Variable Chars = new Variable();
- foreach (bool l2 in YP.unify(arg1, 47))
- {
- foreach (bool l3 in YP.get_code(C2))
- {
- if (YP.equal(C2, new ListPair(42, Atom.NIL)))
- {
- foreach (bool l5 in YP.unify(T, new ListPair(new Functor2(@"comment", StartPos, EndPos), Tokens)))
- {
- foreach (bool l6 in get_current_position(StartPos1))
- {
- foreach (bool l7 in YP.unify(StartPos, YP.subtract(StartPos1, 1)))
- {
- foreach (bool l8 in read_solidus(32, NextCh))
- {
- foreach (bool l9 in get_current_position(EndPos))
- {
- foreach (bool l10 in read_tokens(NextCh, Dict, Tokens))
- {
- yield return false;
- }
- }
- }
- }
- }
- }
- goto cutIf1;
- }
- foreach (bool l4 in YP.unify(T, Tokens))
- {
- foreach (bool l5 in rest_symbol(C2, Chars, NextCh))
- {
- foreach (bool l6 in read_after_atom4(NextCh, Dict, Tokens, new ListPair(47, Chars)))
- {
- yield return false;
- }
- }
- }
- cutIf1:
- { }
- }
- }
- }
- {
- Variable Pos = new Variable();
- Variable Tokens = new Variable();
- Variable NextCh = new Variable();
- foreach (bool l2 in YP.unify(arg1, 33))
- {
- foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2(@"atom", Atom.a(@"!"), Pos), Tokens)))
- {
- foreach (bool l4 in get_current_position(Pos))
- {
- foreach (bool l5 in YP.get_code(NextCh))
- {
- foreach (bool l6 in read_after_atom(NextCh, Dict, Tokens))
- {
- yield return false;
- }
- }
- }
- }
- }
- }
- {
- Variable Tokens = new Variable();
- Variable NextCh = new Variable();
- foreach (bool l2 in YP.unify(arg1, 40))
- {
- foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a(@" ("), Tokens)))
- {
- foreach (bool l4 in YP.get_code(NextCh))
- {
- foreach (bool l5 in read_tokens(NextCh, Dict, Tokens))
- {
- yield return false;
- }
- }
- }
- }
- }
- {
- Variable Tokens = new Variable();
- Variable NextCh = new Variable();
- foreach (bool l2 in YP.unify(arg1, 41))
- {
- foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a(@")"), Tokens)))
- {
- foreach (bool l4 in YP.get_code(NextCh))
- {
- foreach (bool l5 in read_tokens(NextCh, Dict, Tokens))
- {
- yield return false;
- }
- }
- }
- }
- }
- {
- Variable Tokens = new Variable();
- Variable NextCh = new Variable();
- foreach (bool l2 in YP.unify(arg1, 44))
- {
- foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a(@","), Tokens)))
- {
- foreach (bool l4 in YP.get_code(NextCh))
- {
- foreach (bool l5 in read_tokens(NextCh, Dict, Tokens))
- {
- yield return false;
- }
- }
- }
- }
- }
- {
- Variable Pos = new Variable();
- Variable Tokens = new Variable();
- Variable NextCh = new Variable();
- foreach (bool l2 in YP.unify(arg1, 59))
- {
- foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2(@"atom", Atom.a(@";"), Pos), Tokens)))
- {
- foreach (bool l4 in get_current_position(Pos))
- {
- foreach (bool l5 in YP.get_code(NextCh))
- {
- foreach (bool l6 in read_after_atom(NextCh, Dict, Tokens))
- {
- yield return false;
- }
- }
- }
- }
- }
- }
- {
- Variable Pos = new Variable();
- Variable Tokens = new Variable();
- Variable NextCh = new Variable();
- foreach (bool l2 in YP.unify(arg1, 91))
- {
- foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2(@"/", Atom.a(@"["), Pos), Tokens)))
- {
- foreach (bool l4 in get_current_position(Pos))
- {
- foreach (bool l5 in YP.get_code(NextCh))
- {
- foreach (bool l6 in read_tokens(NextCh, Dict, Tokens))
- {
- yield return false;
- }
- }
- }
- }
- }
- }
- {
- Variable Pos = new Variable();
- Variable Tokens = new Variable();
- Variable NextCh = new Variable();
- foreach (bool l2 in YP.unify(arg1, 93))
- {
- foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2(@"/", Atom.a(@"]"), Pos), Tokens)))
- {
- foreach (bool l4 in get_current_position(Pos))
- {
- foreach (bool l5 in YP.get_code(NextCh))
- {
- foreach (bool l6 in read_after_atom(NextCh, Dict, Tokens))
- {
- yield return false;
- }
- }
- }
- }
- }
- }
- {
- Variable Pos = new Variable();
- Variable Tokens = new Variable();
- Variable NextCh = new Variable();
- foreach (bool l2 in YP.unify(arg1, 123))
- {
- foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2(@"/", Atom.a(@"{"), Pos), Tokens)))
- {
- foreach (bool l4 in get_current_position(Pos))
- {
- foreach (bool l5 in YP.get_code(NextCh))
- {
- foreach (bool l6 in read_tokens(NextCh, Dict, Tokens))
- {
- yield return false;
- }
- }
- }
- }
- }
- }
- {
- Variable Tokens = new Variable();
- Variable NextCh = new Variable();
- foreach (bool l2 in YP.unify(arg1, 124))
- {
- foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a(@"|"), Tokens)))
- {
- foreach (bool l4 in YP.get_code(NextCh))
- {
- foreach (bool l5 in read_tokens(NextCh, Dict, Tokens))
- {
- yield return false;
- }
- }
- }
- }
- }
- {
- Variable Tokens = new Variable();
- Variable NextCh = new Variable();
- foreach (bool l2 in YP.unify(arg1, 125))
- {
- foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a(@"}"), Tokens)))
- {
- foreach (bool l4 in YP.get_code(NextCh))
- {
- foreach (bool l5 in read_after_atom(NextCh, Dict, Tokens))
- {
- yield return false;
- }
- }
- }
- }
- }
- {
- object Tokens = arg3;
- Variable NextCh = new Variable();
- foreach (bool l2 in YP.unify(arg1, 46))
- {
- foreach (bool l3 in YP.get_code(NextCh))
- {
- foreach (bool l4 in read_fullstop(NextCh, Dict, Tokens))
- {
- yield return false;
- }
- }
- }
- }
- {
- Variable Chars = new Variable();
- Variable Tokens = new Variable();
- Variable NextCh = new Variable();
- foreach (bool l2 in YP.unify(arg1, 34))
- {
- foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor1(@"string", Chars), Tokens)))
- {
- foreach (bool l4 in read_string(Chars, 34, NextCh))
- {
- foreach (bool l5 in read_tokens(NextCh, Dict, Tokens))
- {
- yield return false;
- }
- }
- }
- }
- }
- {
- object Tokens = arg3;
- Variable Chars = new Variable();
- Variable NextCh = new Variable();
- foreach (bool l2 in YP.unify(arg1, 39))
- {
- foreach (bool l3 in read_string(Chars, 39, NextCh))
- {
- foreach (bool l4 in read_after_atom4(NextCh, Dict, Tokens, Chars))
- {
- yield return false;
- }
- }
- }
- }
- {
- object Tokens = arg3;
- foreach (bool l2 in YP.unify(arg1, 35))
- {
- foreach (bool l3 in read_symbol(35, Dict, Tokens))
- {
- yield return false;
- }
- }
- }
- {
- object Tokens = arg3;
- foreach (bool l2 in YP.unify(arg1, 36))
- {
- foreach (bool l3 in read_symbol(36, Dict, Tokens))
- {
- yield return false;
- }
- }
- }
- {
- object Tokens = arg3;
- foreach (bool l2 in YP.unify(arg1, 38))
- {
- foreach (bool l3 in read_symbol(38, Dict, Tokens))
- {
- yield return false;
- }
- }
- }
- {
- object Tokens = arg3;
- foreach (bool l2 in YP.unify(arg1, 42))
- {
- foreach (bool l3 in read_symbol(42, Dict, Tokens))
- {
- yield return false;
- }
- }
- }
- {
- object Tokens = arg3;
- foreach (bool l2 in YP.unify(arg1, 43))
- {
- foreach (bool l3 in read_symbol(43, Dict, Tokens))
- {
- yield return false;
- }
- }
- }
- {
- object Tokens = arg3;
- foreach (bool l2 in YP.unify(arg1, 45))
- {
- foreach (bool l3 in read_symbol(45, Dict, Tokens))
- {
- yield return false;
- }
- }
- }
- {
- object Tokens = arg3;
- foreach (bool l2 in YP.unify(arg1, 58))
- {
- foreach (bool l3 in read_symbol(58, Dict, Tokens))
- {
- yield return false;
- }
- }
- }
- {
- object Tokens = arg3;
- foreach (bool l2 in YP.unify(arg1, 60))
- {
- foreach (bool l3 in read_symbol(60, Dict, Tokens))
- {
- yield return false;
- }
- }
- }
- {
- object Tokens = arg3;
- foreach (bool l2 in YP.unify(arg1, 61))
- {
- foreach (bool l3 in read_symbol(61, Dict, Tokens))
- {
- yield return false;
- }
- }
- }
- {
- object Tokens = arg3;
- foreach (bool l2 in YP.unify(arg1, 62))
- {
- foreach (bool l3 in read_symbol(62, Dict, Tokens))
- {
- yield return false;
- }
- }
- }
- {
- object Tokens = arg3;
- foreach (bool l2 in YP.unify(arg1, 63))
- {
- foreach (bool l3 in read_symbol(63, Dict, Tokens))
- {
- yield return false;
- }
- }
- }
- {
- object Tokens = arg3;
- foreach (bool l2 in YP.unify(arg1, 64))
- {
- foreach (bool l3 in read_symbol(64, Dict, Tokens))
- {
- yield return false;
- }
- }
- }
- {
- object Tokens = arg3;
- foreach (bool l2 in YP.unify(arg1, 92))
- {
- foreach (bool l3 in read_symbol(92, Dict, Tokens))
- {
- yield return false;
- }
- }
- }
- {
- object Tokens = arg3;
- foreach (bool l2 in YP.unify(arg1, 94))
- {
- foreach (bool l3 in read_symbol(94, Dict, Tokens))
- {
- yield return false;
- }
- }
- }
- {
- object Tokens = arg3;
- foreach (bool l2 in YP.unify(arg1, 96))
- {
- foreach (bool l3 in read_symbol(96, Dict, Tokens))
- {
- yield return false;
- }
- }
- }
- {
- object Tokens = arg3;
- foreach (bool l2 in YP.unify(arg1, 126))
- {
- foreach (bool l3 in read_symbol(126, Dict, Tokens))
- {
- yield return false;
- }
- }
- }
- }
-
- public static IEnumerable read_symbol(object C1, object Dict, object Tokens)
- {
- {
- Variable C2 = new Variable();
- Variable Chars = new Variable();
- Variable NextCh = new Variable();
- foreach (bool l2 in YP.get_code(C2))
- {
- foreach (bool l3 in rest_symbol(C2, Chars, NextCh))
- {
- foreach (bool l4 in read_after_atom4(NextCh, Dict, Tokens, new ListPair(C1, Chars)))
- {
- yield return false;
- }
- }
- }
- }
- }
-
- public static IEnumerable rest_symbol(object arg1, object arg2, object arg3)
- {
- {
- object C2 = arg1;
- object LastCh = arg3;
- Variable Chars = new Variable();
- Variable NextCh = new Variable();
- foreach (bool l2 in YP.unify(arg2, new ListPair(C2, Chars)))
- {
- if (YP.greaterThan(C2, 160))
- {
- if (YP.lessThan(C2, 192))
- {
- if (YP.notEqual(C2, 186))
- {
- if (YP.notEqual(C2, 170))
- {
- foreach (bool l7 in YP.get_code(NextCh))
- {
- foreach (bool l8 in rest_symbol(NextCh, Chars, LastCh))
- {
- yield return false;
- }
- }
- yield break;
- }
- }
- }
- goto cutIf1;
- }
- foreach (bool l3 in symbol_char(C2))
- {
- foreach (bool l4 in YP.get_code(NextCh))
- {
- foreach (bool l5 in rest_symbol(NextCh, Chars, LastCh))
- {
- yield return false;
- }
- }
- yield break;
- }
- cutIf1:
- { }
- }
- }
- {
- Variable C2 = new Variable();
- foreach (bool l2 in YP.unify(arg1, C2))
- {
- foreach (bool l3 in YP.unify(arg2, Atom.NIL))
- {
- foreach (bool l4 in YP.unify(arg3, C2))
- {
- yield return false;
- }
- }
- }
- }
- }
-
- public static IEnumerable symbol_char(object arg1)
- {
- {
- foreach (bool l2 in YP.unify(arg1, 35))
- {
- yield return false;
- }
- }
- {
- foreach (bool l2 in YP.unify(arg1, 36))
- {
- yield return false;
- }
- }
- {
- foreach (bool l2 in YP.unify(arg1, 38))
- {
- yield return false;
- }
- }
- {
- foreach (bool l2 in YP.unify(arg1, 42))
- {
- yield return false;
- }
- }
- {
- foreach (bool l2 in YP.unify(arg1, 43))
- {
- yield return false;
- }
- }
- {
- foreach (bool l2 in YP.unify(arg1, 45))
- {
- yield return false;
- }
- }
- {
- foreach (bool l2 in YP.unify(arg1, 46))
- {
- yield return false;
- }
- }
- {
- foreach (bool l2 in YP.unify(arg1, 47))
- {
- yield return false;
- }
- }
- {
- foreach (bool l2 in YP.unify(arg1, 58))
- {
- yield return false;
- }
- }
- {
- foreach (bool l2 in YP.unify(arg1, 60))
- {
- yield return false;
- }
- }
- {
- foreach (bool l2 in YP.unify(arg1, 61))
- {
- yield return false;
- }
- }
- {
- foreach (bool l2 in YP.unify(arg1, 62))
- {
- yield return false;
- }
- }
- {
- foreach (bool l2 in YP.unify(arg1, 63))
- {
- yield return false;
- }
- }
- {
- foreach (bool l2 in YP.unify(arg1, 64))
- {
- yield return false;
- }
- }
- {
- foreach (bool l2 in YP.unify(arg1, 92))
- {
- yield return false;
- }
- }
- {
- foreach (bool l2 in YP.unify(arg1, 94))
- {
- yield return false;
- }
- }
- {
- foreach (bool l2 in YP.unify(arg1, 96))
- {
- yield return false;
- }
- }
- {
- foreach (bool l2 in YP.unify(arg1, 126))
- {
- yield return false;
- }
- }
- }
-
- public static IEnumerable get_current_position(object Pos)
- {
- {
- foreach (bool l2 in YP.unify(Pos, 0))
- {
- yield return false;
- }
- }
- }
-
- public static IEnumerable read_after_atom4(object Ch, object Dict, object arg3, object Chars)
- {
- {
- Variable Atom_1 = new Variable();
- Variable Pos = new Variable();
- Variable Tokens = new Variable();
- foreach (bool l2 in YP.unify(arg3, new ListPair(new Functor2(@"atom", Atom_1, Pos), Tokens)))
- {
- foreach (bool l3 in YP.unify(Pos, 0))
- {
- foreach (bool l4 in YP.atom_codes(Atom_1, Chars))
- {
- foreach (bool l5 in read_after_atom(Ch, Dict, Tokens))
- {
- yield return false;
- }
- }
- }
- }
- }
- }
-
- public static IEnumerable read_after_atom(object arg1, object Dict, object arg3)
- {
- {
- Variable Tokens = new Variable();
- Variable NextCh = new Variable();
- foreach (bool l2 in YP.unify(arg1, 40))
- {
- foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a(@"("), Tokens)))
- {
- foreach (bool l4 in YP.get_code(NextCh))
- {
- foreach (bool l5 in read_tokens(NextCh, Dict, Tokens))
- {
- yield return false;
- }
- }
- yield break;
- }
- }
- }
- {
- object Ch = arg1;
- object Tokens = arg3;
- foreach (bool l2 in read_tokens(Ch, Dict, Tokens))
- {
- yield return false;
- }
- }
- }
-
- public static IEnumerable read_string(object Chars, object Quote, object NextCh)
- {
- {
- Variable Ch = new Variable();
- Variable Char = new Variable();
- Variable Next = new Variable();
- foreach (bool l2 in YP.get_code(Ch))
- {
- foreach (bool l3 in read_char(Ch, Quote, Char, Next))
- {
- foreach (bool l4 in rest_string5(Char, Next, Chars, Quote, NextCh))
- {
- yield return false;
- }
- }
- }
- }
- }
-
- public static IEnumerable rest_string5(object arg1, object arg2, object arg3, object arg4, object arg5)
- {
- {
- object _X = arg4;
- Variable NextCh = new Variable();
- foreach (bool l2 in YP.unify(arg1, -1))
- {
- foreach (bool l3 in YP.unify(arg2, NextCh))
- {
- foreach (bool l4 in YP.unify(arg3, Atom.NIL))
- {
- foreach (bool l5 in YP.unify(arg5, NextCh))
- {
- yield return true;
- yield break;
- }
- }
- }
- }
- }
- {
- object Char = arg1;
- object Next = arg2;
- object Quote = arg4;
- object NextCh = arg5;
- Variable Chars = new Variable();
- Variable Char2 = new Variable();
- Variable Next2 = new Variable();
- foreach (bool l2 in YP.unify(arg3, new ListPair(Char, Chars)))
- {
- foreach (bool l3 in read_char(Next, Quote, Char2, Next2))
- {
- foreach (bool l4 in rest_string5(Char2, Next2, Chars, Quote, NextCh))
- {
- yield return false;
- }
- }
- }
- }
- }
-
- public static IEnumerable escape_char(object arg1, object arg2)
- {
- {
- foreach (bool l2 in YP.unify(arg1, 110))
- {
- foreach (bool l3 in YP.unify(arg2, 10))
- {
- yield return false;
- }
- }
- }
- {
- foreach (bool l2 in YP.unify(arg1, 78))
- {
- foreach (bool l3 in YP.unify(arg2, 10))
- {
- yield return false;
- }
- }
- }
- {
- foreach (bool l2 in YP.unify(arg1, 116))
- {
- foreach (bool l3 in YP.unify(arg2, 9))
- {
- yield return false;
- }
- }
- }
- {
- foreach (bool l2 in YP.unify(arg1, 84))
- {
- foreach (bool l3 in YP.unify(arg2, 9))
- {
- yield return false;
- }
- }
- }
- {
- foreach (bool l2 in YP.unify(arg1, 114))
- {
- foreach (bool l3 in YP.unify(arg2, 13))
- {
- yield return false;
- }
- }
- }
- {
- foreach (bool l2 in YP.unify(arg1, 82))
- {
- foreach (bool l3 in YP.unify(arg2, 13))
- {
- yield return false;
- }
- }
- }
- {
- foreach (bool l2 in YP.unify(arg1, 118))
- {
- foreach (bool l3 in YP.unify(arg2, 11))
- {
- yield return false;
- }
- }
- }
- {
- foreach (bool l2 in YP.unify(arg1, 86))
- {
- foreach (bool l3 in YP.unify(arg2, 11))
- {
- yield return false;
- }
- }
- }
- {
- foreach (bool l2 in YP.unify(arg1, 98))
- {
- foreach (bool l3 in YP.unify(arg2, 8))
- {
- yield return false;
- }
- }
- }
- {
- foreach (bool l2 in YP.unify(arg1, 66))
- {
- foreach (bool l3 in YP.unify(arg2, 8))
- {
- yield return false;
- }
- }
- }
- {
- foreach (bool l2 in YP.unify(arg1, 102))
- {
- foreach (bool l3 in YP.unify(arg2, 12))
- {
- yield return false;
- }
- }
- }
- {
- foreach (bool l2 in YP.unify(arg1, 70))
- {
- foreach (bool l3 in YP.unify(arg2, 12))
- {
- yield return false;
- }
- }
- }
- {
- foreach (bool l2 in YP.unify(arg1, 101))
- {
- foreach (bool l3 in YP.unify(arg2, 27))
- {
- yield return false;
- }
- }
- }
- {
- foreach (bool l2 in YP.unify(arg1, 69))
- {
- foreach (bool l3 in YP.unify(arg2, 27))
- {
- yield return false;
- }
- }
- }
- {
- foreach (bool l2 in YP.unify(arg1, 100))
- {
- foreach (bool l3 in YP.unify(arg2, 127))
- {
- yield return false;
- }
- }
- }
- {
- foreach (bool l2 in YP.unify(arg1, 68))
- {
- foreach (bool l3 in YP.unify(arg2, 127))
- {
- yield return false;
- }
- }
- }
- {
- foreach (bool l2 in YP.unify(arg1, 115))
- {
- foreach (bool l3 in YP.unify(arg2, 32))
- {
- yield return false;
- }
- }
- }
- {
- foreach (bool l2 in YP.unify(arg1, 83))
- {
- foreach (bool l3 in YP.unify(arg2, 32))
- {
- yield return false;
- }
- }
- }
- {
- foreach (bool l2 in YP.unify(arg1, 122))
- {
- foreach (bool l3 in YP.unify(arg2, -1))
- {
- yield return false;
- }
- }
- }
- {
- foreach (bool l2 in YP.unify(arg1, 90))
- {
- foreach (bool l3 in YP.unify(arg2, -1))
- {
- yield return false;
- }
- }
- }
- }
-
- public static IEnumerable read_variable(object C1, object Dict, object arg3)
- {
- {
- Variable Var = new Variable();
- Variable Name = new Variable();
- Variable StartPos = new Variable();
- Variable Tokens = new Variable();
- Variable Chars = new Variable();
- Variable NextCh = new Variable();
- foreach (bool l2 in YP.unify(arg3, new ListPair(new Functor3(@"var", Var, Name, StartPos), Tokens)))
- {
- foreach (bool l3 in get_current_position(StartPos))
- {
- foreach (bool l4 in read_name(C1, Chars, NextCh))
- {
- foreach (bool l5 in YP.atom_codes(Name, Chars))
- {
- if (YP.termEqual(Name, Atom.a(@"_")))
- {
- foreach (bool l7 in read_after_atom(NextCh, Dict, Tokens))
- {
- yield return false;
- }
- goto cutIf1;
- }
- foreach (bool l6 in read_lookup(Dict, Name, Var))
- {
- foreach (bool l7 in read_after_atom(NextCh, Dict, Tokens))
- {
- yield return false;
- }
- }
- cutIf1:
- { }
- }
- }
- }
- }
- }
- }
-
- public static IEnumerable read_lookup(object arg1, object Name, object Var)
- {
- {
- Variable N = new Variable();
- Variable V = new Variable();
- Variable L = new Variable();
- foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"=", N, V), L)))
- {
- foreach (bool l3 in YP.unify(N, Name))
- {
- foreach (bool l4 in YP.unify(V, Var))
- {
- yield return false;
- }
- goto cutIf1;
- }
- foreach (bool l3 in read_lookup(L, Name, Var))
- {
- yield return false;
- }
- cutIf1:
- { }
- }
- }
- }
-
- public static IEnumerable read_solidus(object Ch, object LastCh)
- {
- {
- Variable NextCh = new Variable();
- if (YP.equal(Ch, 42))
- {
- foreach (bool l3 in YP.get_code(NextCh))
- {
- if (YP.equal(NextCh, 47))
- {
- foreach (bool l5 in YP.get_code(LastCh))
- {
- yield return false;
- }
- goto cutIf2;
- }
- foreach (bool l4 in read_solidus(NextCh, LastCh))
- {
- yield return false;
- }
- cutIf2:
- { }
- }
- goto cutIf1;
- }
- if (YP.notEqual(Ch, -1))
- {
- foreach (bool l3 in YP.get_code(NextCh))
- {
- foreach (bool l4 in read_solidus(NextCh, LastCh))
- {
- yield return false;
- }
- }
- goto cutIf3;
- }
- foreach (bool l2 in YP.unify(LastCh, Ch))
- {
- foreach (bool l3 in formatError(Atom.a(@"user_error"), Atom.a(@"~N** end of file in /*comment~n"), Atom.NIL))
- {
- yield return false;
- }
- }
- cutIf3:
- cutIf1:
- { }
- }
- }
-
- public static IEnumerable read_identifier(object C1, object Dict, object Tokens)
- {
- {
- Variable Chars = new Variable();
- Variable NextCh = new Variable();
- foreach (bool l2 in read_name(C1, Chars, NextCh))
- {
- foreach (bool l3 in read_after_atom4(NextCh, Dict, Tokens, Chars))
- {
- yield return false;
- }
- }
- }
- }
-
- public static IEnumerable read_name(object C1, object arg2, object LastCh)
- {
- {
- Variable Chars = new Variable();
- Variable C2 = new Variable();
- foreach (bool l2 in YP.unify(arg2, new ListPair(C1, Chars)))
- {
- foreach (bool l3 in YP.get_code(C2))
- {
- if (YP.greaterThanOrEqual(C2, new ListPair(97, Atom.NIL)))
- {
- if (YP.lessThanOrEqual(C2, new ListPair(122, Atom.NIL)))
- {
- foreach (bool l6 in read_name(C2, Chars, LastCh))
- {
- yield return false;
- }
- goto cutIf2;
- }
- if (YP.lessThan(C2, 192))
- {
- if (YP.notEqual(YP.bitwiseOr(C2, 16), 186))
- {
- foreach (bool l7 in YP.unify(Chars, Atom.NIL))
- {
- foreach (bool l8 in YP.unify(LastCh, C2))
- {
- yield return false;
- }
- }
- goto cutIf3;
- }
- }
- if (YP.equal(YP.bitwiseOr(C2, 32), 247))
- {
- foreach (bool l6 in YP.unify(Chars, Atom.NIL))
- {
- foreach (bool l7 in YP.unify(LastCh, C2))
- {
- yield return false;
- }
- }
- goto cutIf4;
- }
- foreach (bool l5 in read_name(C2, Chars, LastCh))
- {
- yield return false;
- }
- cutIf4:
- cutIf3:
- cutIf2:
- goto cutIf1;
- }
- if (YP.greaterThanOrEqual(C2, new ListPair(65, Atom.NIL)))
- {
- if (YP.greaterThan(C2, new ListPair(90, Atom.NIL)))
- {
- if (YP.notEqual(C2, new ListPair(95, Atom.NIL)))
- {
- foreach (bool l7 in YP.unify(Chars, Atom.NIL))
- {
- foreach (bool l8 in YP.unify(LastCh, C2))
- {
- yield return false;
- }
- }
- goto cutIf6;
- }
- }
- foreach (bool l5 in read_name(C2, Chars, LastCh))
- {
- yield return false;
- }
- cutIf6:
- goto cutIf5;
- }
- if (YP.greaterThanOrEqual(C2, new ListPair(48, Atom.NIL)))
- {
- if (YP.lessThanOrEqual(C2, new ListPair(57, Atom.NIL)))
- {
- foreach (bool l6 in read_name(C2, Chars, LastCh))
- {
- yield return false;
- }
- goto cutIf7;
- }
- }
- foreach (bool l4 in YP.unify(Chars, Atom.NIL))
- {
- foreach (bool l5 in YP.unify(LastCh, C2))
- {
- yield return false;
- }
- }
- cutIf7:
- cutIf5:
- cutIf1:
- { }
- }
- }
- }
- }
-
- public static IEnumerable read_fullstop(object Ch, object Dict, object Tokens)
- {
- {
- Variable Number = new Variable();
- Variable Tokens1 = new Variable();
- Variable Chars = new Variable();
- Variable NextCh = new Variable();
- if (YP.lessThanOrEqual(Ch, new ListPair(57, Atom.NIL)))
- {
- if (YP.greaterThanOrEqual(Ch, new ListPair(48, Atom.NIL)))
- {
- foreach (bool l4 in YP.unify(Tokens, new ListPair(new Functor1(@"number", Number), Tokens1)))
- {
- foreach (bool l5 in read_float(Number, Dict, Tokens1, new ListPair(48, Atom.NIL), Ch))
- {
- yield return false;
- }
- }
- goto cutIf1;
- }
- }
- if (YP.greaterThan(Ch, new ListPair(32, Atom.NIL)))
- {
- foreach (bool l3 in rest_symbol(Ch, Chars, NextCh))
- {
- foreach (bool l4 in read_after_atom4(NextCh, Dict, Tokens, new ListPair(46, Chars)))
- {
- yield return false;
- }
- }
- goto cutIf2;
- }
- if (YP.greaterThanOrEqual(Ch, 0))
- {
- foreach (bool l3 in YP.unify(Tokens, Atom.NIL))
- {
- yield return false;
- }
- goto cutIf3;
- }
- foreach (bool l2 in formatError(Atom.a(@"user_error"), Atom.a(@"~N** end of file just after full stop~n"), Atom.NIL))
- {
- }
- cutIf3:
- cutIf2:
- cutIf1:
- { }
- }
- }
-
- public static IEnumerable read_float(object Number, object Dict, object Tokens, object Digits, object Digit)
- {
- {
- Variable Chars = new Variable();
- Variable Rest = new Variable();
- Variable NextCh = new Variable();
- foreach (bool l2 in prepend(Digits, Chars, Rest))
- {
- foreach (bool l3 in read_float(Digit, Rest, NextCh, Chars))
- {
- foreach (bool l4 in YP.number_codes(Number, Chars))
- {
- foreach (bool l5 in read_tokens(NextCh, Dict, Tokens))
- {
- yield return false;
- }
- }
- }
- }
- }
- }
-
- public static IEnumerable prepend(object arg1, object arg2, object arg3)
- {
- {
- object X = arg3;
- foreach (bool l2 in YP.unify(arg1, Atom.NIL))
- {
- foreach (bool l3 in YP.unify(arg2, new ListPair(46, X)))
- {
- yield return false;
- }
- }
- }
- {
- object Y = arg3;
- Variable C = new Variable();
- Variable Cs = new Variable();
- Variable X = new Variable();
- foreach (bool l2 in YP.unify(arg1, new ListPair(C, Cs)))
- {
- foreach (bool l3 in YP.unify(arg2, new ListPair(C, X)))
- {
- foreach (bool l4 in prepend(Cs, X, Y))
- {
- yield return false;
- }
- }
- }
- }
- }
-
- public static IEnumerable read_float(object C1, object arg2, object NextCh, object Total)
- {
- {
- Variable Chars = new Variable();
- Variable C2 = new Variable();
- Variable C3 = new Variable();
- Variable C4 = new Variable();
- Variable More = new Variable();
- foreach (bool l2 in YP.unify(arg2, new ListPair(C1, Chars)))
- {
- foreach (bool l3 in YP.get_code(C2))
- {
- if (YP.greaterThanOrEqual(C2, new ListPair(48, Atom.NIL)))
- {
- if (YP.lessThanOrEqual(C2, new ListPair(57, Atom.NIL)))
- {
- foreach (bool l6 in read_float(C2, Chars, NextCh, Total))
- {
- yield return false;
- }
- goto cutIf1;
- }
- }
- if (YP.equal(YP.bitwiseOr(C2, 32), new ListPair(101, Atom.NIL)))
- {
- foreach (bool l5 in YP.get_code(C3))
- {
- if (YP.equal(C3, new ListPair(45, Atom.NIL)))
- {
- foreach (bool l7 in YP.get_code(C4))
- {
- foreach (bool l8 in YP.unify(Chars, new ListPair(C2, new ListPair(45, More))))
- {
- if (YP.greaterThanOrEqual(C4, new ListPair(48, Atom.NIL)))
- {
- if (YP.lessThanOrEqual(C4, new ListPair(57, Atom.NIL)))
- {
- foreach (bool l11 in read_exponent(C4, More, NextCh))
- {
- yield return false;
- }
- goto cutIf4;
- }
- }
- foreach (bool l9 in YP.unify(More, Atom.NIL))
- {
- foreach (bool l10 in formatError(Atom.a(@"user_error"), Atom.a(@"~N** Missing exponent in ~s~n"), new ListPair(Total, Atom.NIL)))
- {
- }
- }
- foreach (bool l9 in YP.unify(More, new ListPair(48, Atom.NIL)))
- {
- foreach (bool l10 in YP.unify(NextCh, C4))
- {
- yield return false;
- }
- }
- cutIf4:
- { }
- }
- }
- goto cutIf3;
- }
- if (YP.equal(C3, new ListPair(43, Atom.NIL)))
- {
- foreach (bool l7 in YP.get_code(C4))
- {
- foreach (bool l8 in YP.unify(Chars, new ListPair(C2, More)))
- {
- if (YP.greaterThanOrEqual(C4, new ListPair(48, Atom.NIL)))
- {
- if (YP.lessThanOrEqual(C4, new ListPair(57, Atom.NIL)))
- {
- foreach (bool l11 in read_exponent(C4, More, NextCh))
- {
- yield return false;
- }
- goto cutIf6;
- }
- }
- foreach (bool l9 in YP.unify(More, Atom.NIL))
- {
- foreach (bool l10 in formatError(Atom.a(@"user_error"), Atom.a(@"~N** Missing exponent in ~s~n"), new ListPair(Total, Atom.NIL)))
- {
- }
- }
- foreach (bool l9 in YP.unify(More, new ListPair(48, Atom.NIL)))
- {
- foreach (bool l10 in YP.unify(NextCh, C4))
- {
- yield return false;
- }
- }
- cutIf6:
- { }
- }
- }
- goto cutIf5;
- }
- foreach (bool l6 in YP.unify(C4, C3))
- {
- foreach (bool l7 in YP.unify(Chars, new ListPair(C2, More)))
- {
- if (YP.greaterThanOrEqual(C4, new ListPair(48, Atom.NIL)))
- {
- if (YP.lessThanOrEqual(C4, new ListPair(57, Atom.NIL)))
- {
- foreach (bool l10 in read_exponent(C4, More, NextCh))
- {
- yield return false;
- }
- goto cutIf7;
- }
- }
- foreach (bool l8 in YP.unify(More, Atom.NIL))
- {
- foreach (bool l9 in formatError(Atom.a(@"user_error"), Atom.a(@"~N** Missing exponent in ~s~n"), new ListPair(Total, Atom.NIL)))
- {
- }
- }
- foreach (bool l8 in YP.unify(More, new ListPair(48, Atom.NIL)))
- {
- foreach (bool l9 in YP.unify(NextCh, C4))
- {
- yield return false;
- }
- }
- cutIf7:
- { }
- }
- }
- cutIf5:
- cutIf3:
- { }
- }
- goto cutIf2;
- }
- foreach (bool l4 in YP.unify(Chars, Atom.NIL))
- {
- foreach (bool l5 in YP.unify(NextCh, C2))
- {
- yield return false;
- }
- }
- cutIf2:
- cutIf1:
- { }
- }
- }
- }
- }
-
- public static IEnumerable read_exponent(object C1, object arg2, object NextCh)
- {
- {
- Variable Chars = new Variable();
- Variable C2 = new Variable();
- foreach (bool l2 in YP.unify(arg2, new ListPair(C1, Chars)))
- {
- foreach (bool l3 in YP.get_code(C2))
- {
- if (YP.greaterThanOrEqual(C2, new ListPair(48, Atom.NIL)))
- {
- if (YP.lessThanOrEqual(C2, new ListPair(57, Atom.NIL)))
- {
- foreach (bool l6 in read_exponent(C2, Chars, NextCh))
- {
- yield return false;
- }
- goto cutIf1;
- }
- }
- foreach (bool l4 in YP.unify(Chars, Atom.NIL))
- {
- foreach (bool l5 in YP.unify(NextCh, C2))
- {
- yield return false;
- }
- }
- cutIf1:
- { }
- }
- }
- }
- }
-
- public static IEnumerable read_number(object C1, object Dict, object arg3)
- {
- {
- Variable Number = new Variable();
- Variable Tokens = new Variable();
- Variable C2 = new Variable();
- Variable N = new Variable();
- Variable C = new Variable();
- Variable C3 = new Variable();
- Variable Digits = new Variable();
- foreach (bool l2 in YP.unify(arg3, new ListPair(new Functor1(@"number", Number), Tokens)))
- {
- foreach (bool l3 in read_number4(C1, C2, 0, N))
- {
- if (YP.equal(C2, 39))
- {
- if (YP.greaterThanOrEqual(N, 2))
- {
- if (YP.lessThanOrEqual(N, 36))
- {
- foreach (bool l7 in read_based(N, 0, Number, C))
- {
- foreach (bool l8 in read_tokens(C, Dict, Tokens))
- {
- yield return false;
- }
- }
- goto cutIf2;
- }
- }
- if (YP.equal(N, 0))
- {
- foreach (bool l6 in YP.get_code(C3))
- {
- foreach (bool l7 in read_char(C3, -1, Number, C))
- {
- foreach (bool l8 in read_tokens(C, Dict, Tokens))
- {
- yield return false;
- }
- }
- }
- goto cutIf3;
- }
- foreach (bool l5 in formatError(Atom.a(@"user_error"), Atom.a(@"~N** ~d' read as ~d '~n"), new ListPair(N, new ListPair(N, Atom.NIL))))
- {
- foreach (bool l6 in YP.unify(Number, N))
- {
- foreach (bool l7 in YP.unify(C, C2))
- {
- foreach (bool l8 in read_tokens(C, Dict, Tokens))
- {
- yield return false;
- }
- }
- }
- }
- cutIf3:
- cutIf2:
- goto cutIf1;
- }
- if (YP.equal(C2, 46))
- {
- foreach (bool l5 in YP.get_code(C3))
- {
- if (YP.greaterThanOrEqual(C3, new ListPair(48, Atom.NIL)))
- {
- if (YP.lessThanOrEqual(C3, new ListPair(57, Atom.NIL)))
- {
- foreach (bool l8 in YP.number_codes(N, Digits))
- {
- foreach (bool l9 in read_float(Number, Dict, Tokens, Digits, C3))
- {
- yield return false;
- }
- }
- goto cutIf5;
- }
- }
- foreach (bool l6 in YP.unify(Number, N))
- {
- foreach (bool l7 in read_fullstop(C3, Dict, Tokens))
- {
- yield return false;
- }
- }
- cutIf5:
- { }
- }
- goto cutIf4;
- }
- foreach (bool l4 in YP.unify(Number, N))
- {
- foreach (bool l5 in read_tokens(C2, Dict, Tokens))
- {
- yield return false;
- }
- }
- cutIf4:
- cutIf1:
- { }
- }
- }
- }
- }
-
- public static IEnumerable read_number4(object C0, object C, object N0, object N)
- {
- {
- Variable N1 = new Variable();
- Variable C1 = new Variable();
- if (YP.greaterThanOrEqual(C0, new ListPair(48, Atom.NIL)))
- {
- if (YP.lessThanOrEqual(C0, new ListPair(57, Atom.NIL)))
- {
- foreach (bool l4 in YP.unify(N1, YP.add(YP.subtract(YP.multiply(N0, 10), new ListPair(48, Atom.NIL)), C0)))
- {
- foreach (bool l5 in YP.get_code(C1))
- {
- foreach (bool l6 in read_number4(C1, C, N1, N))
- {
- yield return false;
- }
- }
- }
- goto cutIf1;
- }
- }
- if (YP.equal(C0, 95))
- {
- foreach (bool l3 in YP.get_code(C1))
- {
- foreach (bool l4 in read_number4(C1, C, N0, N))
- {
- yield return false;
- }
- }
- goto cutIf2;
- }
- foreach (bool l2 in YP.unify(C, C0))
- {
- foreach (bool l3 in YP.unify(N, N0))
- {
- yield return false;
- }
- }
- cutIf2:
- cutIf1:
- { }
- }
- }
-
- public static IEnumerable read_based(object Base, object N0, object N, object C)
- {
- {
- Variable C1 = new Variable();
- Variable Digit = new Variable();
- Variable N1 = new Variable();
- foreach (bool l2 in YP.get_code(C1))
- {
- if (YP.greaterThanOrEqual(C1, new ListPair(48, Atom.NIL)))
- {
- if (YP.lessThanOrEqual(C1, new ListPair(57, Atom.NIL)))
- {
- foreach (bool l5 in YP.unify(Digit, YP.subtract(C1, new ListPair(48, Atom.NIL))))
- {
- if (YP.lessThan(Digit, Base))
- {
- foreach (bool l7 in YP.unify(N1, YP.add(YP.multiply(N0, Base), Digit)))
- {
- foreach (bool l8 in read_based(Base, N1, N, C))
- {
- yield return false;
- }
- }
- goto cutIf2;
- }
- if (YP.equal(C1, new ListPair(95, Atom.NIL)))
- {
- foreach (bool l7 in read_based(Base, N0, N, C))
- {
- yield return false;
- }
- goto cutIf3;
- }
- foreach (bool l6 in YP.unify(N, N0))
- {
- foreach (bool l7 in YP.unify(C, C1))
- {
- yield return false;
- }
- }
- cutIf3:
- cutIf2:
- { }
- }
- goto cutIf1;
- }
- }
- if (YP.greaterThanOrEqual(C1, new ListPair(65, Atom.NIL)))
- {
- if (YP.lessThanOrEqual(C1, new ListPair(90, Atom.NIL)))
- {
- foreach (bool l5 in YP.unify(Digit, YP.subtract(C1, YP.subtract(new ListPair(65, Atom.NIL), 10))))
- {
- if (YP.lessThan(Digit, Base))
- {
- foreach (bool l7 in YP.unify(N1, YP.add(YP.multiply(N0, Base), Digit)))
- {
- foreach (bool l8 in read_based(Base, N1, N, C))
- {
- yield return false;
- }
- }
- goto cutIf5;
- }
- if (YP.equal(C1, new ListPair(95, Atom.NIL)))
- {
- foreach (bool l7 in read_based(Base, N0, N, C))
- {
- yield return false;
- }
- goto cutIf6;
- }
- foreach (bool l6 in YP.unify(N, N0))
- {
- foreach (bool l7 in YP.unify(C, C1))
- {
- yield return false;
- }
- }
- cutIf6:
- cutIf5:
- { }
- }
- goto cutIf4;
- }
- }
- if (YP.greaterThanOrEqual(C1, new ListPair(97, Atom.NIL)))
- {
- if (YP.lessThanOrEqual(C1, new ListPair(122, Atom.NIL)))
- {
- foreach (bool l5 in YP.unify(Digit, YP.subtract(C1, YP.subtract(new ListPair(97, Atom.NIL), 10))))
- {
- if (YP.lessThan(Digit, Base))
- {
- foreach (bool l7 in YP.unify(N1, YP.add(YP.multiply(N0, Base), Digit)))
- {
- foreach (bool l8 in read_based(Base, N1, N, C))
- {
- yield return false;
- }
- }
- goto cutIf8;
- }
- if (YP.equal(C1, new ListPair(95, Atom.NIL)))
- {
- foreach (bool l7 in read_based(Base, N0, N, C))
- {
- yield return false;
- }
- goto cutIf9;
- }
- foreach (bool l6 in YP.unify(N, N0))
- {
- foreach (bool l7 in YP.unify(C, C1))
- {
- yield return false;
- }
- }
- cutIf9:
- cutIf8:
- { }
- }
- goto cutIf7;
- }
- }
- foreach (bool l3 in YP.unify(Digit, 99))
- {
- if (YP.lessThan(Digit, Base))
- {
- foreach (bool l5 in YP.unify(N1, YP.add(YP.multiply(N0, Base), Digit)))
- {
- foreach (bool l6 in read_based(Base, N1, N, C))
- {
- yield return false;
- }
- }
- goto cutIf10;
- }
- if (YP.equal(C1, new ListPair(95, Atom.NIL)))
- {
- foreach (bool l5 in read_based(Base, N0, N, C))
- {
- yield return false;
- }
- goto cutIf11;
- }
- foreach (bool l4 in YP.unify(N, N0))
- {
- foreach (bool l5 in YP.unify(C, C1))
- {
- yield return false;
- }
- }
- cutIf11:
- cutIf10:
- { }
- }
- cutIf7:
- cutIf4:
- cutIf1:
- { }
- }
- }
- }
-
- public static IEnumerable read_char(object Char, object Quote, object Result, object Next)
- {
- {
- Variable C1 = new Variable();
- Variable C2 = new Variable();
- Variable C3 = new Variable();
- Variable Ch = new Variable();
- if (YP.equal(Char, 92))
- {
- foreach (bool l3 in YP.get_code(C1))
- {
- if (YP.lessThan(C1, 0))
- {
- foreach (bool l5 in formatError(Atom.a(@"user_error"), Atom.a(@"~N** end of file in ~cquoted~c~n"), new ListPair(Quote, new ListPair(Quote, Atom.NIL))))
- {
- foreach (bool l6 in YP.unify(Result, -1))
- {
- foreach (bool l7 in YP.unify(Next, C1))
- {
- yield return false;
- }
- }
- }
- goto cutIf2;
- }
- if (YP.lessThanOrEqual(C1, new ListPair(32, Atom.NIL)))
- {
- foreach (bool l5 in YP.get_code(C2))
- {
- foreach (bool l6 in read_char(C2, Quote, Result, Next))
- {
- yield return false;
- }
- }
- goto cutIf3;
- }
- if (YP.equal(YP.bitwiseOr(C1, 32), new ListPair(99, Atom.NIL)))
- {
- foreach (bool l5 in YP.get_code(C2))
- {
- foreach (bool l6 in read_char(C2, Quote, Result, Next))
- {
- yield return false;
- }
- }
- goto cutIf4;
- }
- if (YP.lessThanOrEqual(C1, new ListPair(55, Atom.NIL)))
- {
- if (YP.greaterThanOrEqual(C1, new ListPair(48, Atom.NIL)))
- {
- foreach (bool l6 in YP.get_code(C2))
- {
- if (YP.lessThanOrEqual(C2, new ListPair(55, Atom.NIL)))
- {
- if (YP.greaterThanOrEqual(C2, new ListPair(48, Atom.NIL)))
- {
- foreach (bool l9 in YP.get_code(C3))
- {
- if (YP.lessThanOrEqual(C3, new ListPair(55, Atom.NIL)))
- {
- if (YP.greaterThanOrEqual(C3, new ListPair(48, Atom.NIL)))
- {
- foreach (bool l12 in YP.get_code(Next))
- {
- foreach (bool l13 in YP.unify(Result, YP.subtract(YP.add(YP.multiply(YP.add(YP.multiply(C1, 8), C2), 8), C3), YP.multiply(73, new ListPair(48, Atom.NIL)))))
- {
- yield return false;
- }
- }
- goto cutIf7;
- }
- }
- foreach (bool l10 in YP.unify(Next, C3))
- {
- foreach (bool l11 in YP.unify(Result, YP.subtract(YP.add(YP.multiply(C1, 8), C2), YP.multiply(9, new ListPair(48, Atom.NIL)))))
- {
- yield return false;
- }
- }
- cutIf7:
- { }
- }
- goto cutIf6;
- }
- }
- foreach (bool l7 in YP.unify(Next, C2))
- {
- foreach (bool l8 in YP.unify(Result, YP.subtract(C1, new ListPair(48, Atom.NIL))))
- {
- yield return false;
- }
- }
- cutIf6:
- { }
- }
- goto cutIf5;
- }
- }
- if (YP.equal(C1, new ListPair(94, Atom.NIL)))
- {
- foreach (bool l5 in YP.get_code(C2))
- {
- if (YP.lessThan(C2, 0))
- {
- foreach (bool l7 in formatError(Atom.a(@"user_error"), Atom.a(@"~N** end of file in ~c..~c^..~c~n"), new ListPair(Quote, new ListPair(92, new ListPair(Quote, Atom.NIL)))))
- {
- foreach (bool l8 in YP.unify(Result, -1))
- {
- foreach (bool l9 in YP.unify(Next, C2))
- {
- yield return false;
- }
- }
- }
- goto cutIf9;
- }
- if (YP.equal(C2, new ListPair(63, Atom.NIL)))
- {
- foreach (bool l7 in YP.unify(Result, 127))
- {
- foreach (bool l8 in YP.get_code(Next))
- {
- yield return false;
- }
- }
- goto cutIf10;
- }
- foreach (bool l6 in YP.unify(Result, YP.bitwiseAnd(C2, 31)))
- {
- foreach (bool l7 in YP.get_code(Next))
- {
- yield return false;
- }
- }
- cutIf10:
- cutIf9:
- { }
- }
- goto cutIf8;
- }
- foreach (bool l4 in escape_char(C1, Result))
- {
- foreach (bool l5 in YP.get_code(Next))
- {
- yield return false;
- }
- goto cutIf11;
- }
- foreach (bool l4 in YP.unify(Result, C1))
- {
- foreach (bool l5 in YP.get_code(Next))
- {
- yield return false;
- }
- }
- cutIf11:
- cutIf8:
- cutIf5:
- cutIf4:
- cutIf3:
- cutIf2:
- { }
- }
- goto cutIf1;
- }
- if (YP.equal(Char, Quote))
- {
- foreach (bool l3 in YP.get_code(Ch))
- {
- if (YP.equal(Ch, Quote))
- {
- foreach (bool l5 in YP.unify(Result, Quote))
- {
- foreach (bool l6 in YP.get_code(Next))
- {
- yield return false;
- }
- }
- goto cutIf13;
- }
- foreach (bool l4 in YP.unify(Result, -1))
- {
- foreach (bool l5 in YP.unify(Next, Ch))
- {
- yield return false;
- }
- }
- cutIf13:
- { }
- }
- goto cutIf12;
- }
- if (YP.lessThan(Char, new ListPair(32, Atom.NIL)))
- {
- if (YP.notEqual(Char, 9))
- {
- if (YP.notEqual(Char, 10))
- {
- if (YP.notEqual(Char, 13))
- {
- foreach (bool l6 in YP.unify(Result, -1))
- {
- foreach (bool l7 in YP.unify(Next, Char))
- {
- foreach (bool l8 in formatError(Atom.a(@"user_error"), Atom.a(@"~N** Strange character ~d ends ~ctoken~c~n"), new ListPair(Char, new ListPair(Quote, new ListPair(Quote, Atom.NIL)))))
- {
- yield return false;
- }
- }
- }
- goto cutIf14;
- }
- }
- }
- }
- foreach (bool l2 in YP.unify(Result, Char))
- {
- foreach (bool l3 in YP.get_code(Next))
- {
- yield return false;
- }
- }
- cutIf14:
- cutIf12:
- cutIf1:
- { }
- }
- }
-
- }
-}
+/*
+ * Copyright (C) 2007-2008, Jeff Thompson
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the copyright holder nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+using System;
+using System.Collections.Generic;
+
+namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog
+{
+ public class Parser
+ {
+ public static IEnumerable formatError(object Output, object Format, object Arguments)
+ {
+ // Debug: Simple implementation for now.
+ YP.write(Format);
+ YP.write(Arguments);
+ YP.nl();
+ yield return false;
+ }
+
+ // Debug: Hand-modify this central predicate to do tail recursion.
+ public static IEnumerable read_tokens(object arg1, object arg2, object arg3)
+ {
+ bool repeat = true;
+ while (repeat)
+ {
+ repeat = false;
+ {
+ object C1 = arg1;
+ object Dict = arg2;
+ object Tokens = arg3;
+ Variable C2 = new Variable();
+ if (YP.lessThanOrEqual(C1, new ListPair(32, Atom.NIL)))
+ {
+ if (YP.greaterThanOrEqual(C1, 0))
+ {
+ foreach (bool l4 in YP.get_code(C2))
+ {
+#if false
+ foreach (bool l5 in read_tokens(C2, Dict, Tokens))
+ {
+ yield return false;
+ }
+#endif
+ arg1 = YP.getValue(C2);
+ arg2 = YP.getValue(Dict);
+ arg3 = YP.getValue(Tokens);
+ repeat = true;
+ }
+ }
+ goto cutIf1;
+ }
+ if (YP.greaterThanOrEqual(C1, new ListPair(97, Atom.NIL)))
+ {
+ if (YP.lessThanOrEqual(C1, new ListPair(122, Atom.NIL)))
+ {
+ foreach (bool l4 in read_identifier(C1, Dict, Tokens))
+ {
+ yield return false;
+ }
+ goto cutIf2;
+ }
+ }
+ if (YP.greaterThanOrEqual(C1, new ListPair(65, Atom.NIL)))
+ {
+ if (YP.lessThanOrEqual(C1, new ListPair(90, Atom.NIL)))
+ {
+ foreach (bool l4 in read_variable(C1, Dict, Tokens))
+ {
+ yield return false;
+ }
+ goto cutIf3;
+ }
+ }
+ if (YP.greaterThanOrEqual(C1, new ListPair(48, Atom.NIL)))
+ {
+ if (YP.lessThanOrEqual(C1, new ListPair(57, Atom.NIL)))
+ {
+ foreach (bool l4 in read_number(C1, Dict, Tokens))
+ {
+ yield return false;
+ }
+ goto cutIf4;
+ }
+ }
+ if (YP.lessThan(C1, 127))
+ {
+ foreach (bool l3 in read_special(C1, Dict, Tokens))
+ {
+ yield return false;
+ }
+ goto cutIf5;
+ }
+ if (YP.lessThanOrEqual(C1, 160))
+ {
+ foreach (bool l3 in YP.get_code(C2))
+ {
+#if false
+ foreach (bool l4 in read_tokens(C2, Dict, Tokens))
+ {
+ yield return false;
+ }
+#endif
+ arg1 = YP.getValue(C2);
+ arg2 = YP.getValue(Dict);
+ arg3 = YP.getValue(Tokens);
+ repeat = true;
+ }
+ goto cutIf6;
+ }
+ if (YP.greaterThanOrEqual(C1, 223))
+ {
+ if (YP.notEqual(C1, 247))
+ {
+ foreach (bool l4 in read_identifier(C1, Dict, Tokens))
+ {
+ yield return false;
+ }
+ goto cutIf7;
+ }
+ }
+ if (YP.greaterThanOrEqual(C1, 192))
+ {
+ if (YP.notEqual(C1, 215))
+ {
+ foreach (bool l4 in read_variable(C1, Dict, Tokens))
+ {
+ yield return false;
+ }
+ goto cutIf8;
+ }
+ }
+ if (YP.notEqual(C1, 170))
+ {
+ if (YP.notEqual(C1, 186))
+ {
+ foreach (bool l4 in read_symbol(C1, Dict, Tokens))
+ {
+ yield return false;
+ }
+ goto cutIf9;
+ }
+ }
+ foreach (bool l2 in read_identifier(C1, Dict, Tokens))
+ {
+ yield return false;
+ }
+ cutIf9:
+ cutIf8:
+ cutIf7:
+ cutIf6:
+ cutIf5:
+ cutIf4:
+ cutIf3:
+ cutIf2:
+ cutIf1:
+ { }
+ }
+ }
+ }
+
+ // Compiler output follows.
+
+ class YPInnerClass { }
+ static Type getDeclaringClass() { return typeof(YPInnerClass).DeclaringType; }
+
+ public static IEnumerable parseInput(object TermList)
+ {
+ {
+ Variable TermAndVariables = new Variable();
+ FindallAnswers findallAnswers1 = new FindallAnswers(TermAndVariables);
+ foreach (bool l2 in parseInputHelper(TermAndVariables))
+ {
+ findallAnswers1.add();
+ }
+ foreach (bool l2 in findallAnswers1.result(TermList))
+ {
+ yield return false;
+ }
+ }
+ }
+
+ public static IEnumerable parseInputHelper(object arg1)
+ {
+ {
+ Variable Term = new Variable();
+ Variable Variables = new Variable();
+ Variable Answer = new Variable();
+ Variable x4 = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new Functor2(@"f", Term, Variables)))
+ {
+ foreach (bool l3 in YP.repeat())
+ {
+ foreach (bool l4 in portable_read3(Answer, Variables, x4))
+ {
+ foreach (bool l5 in remove_pos(Answer, Term))
+ {
+ if (YP.termEqual(Term, Atom.a(@"end_of_file")))
+ {
+ yield break;
+ goto cutIf1;
+ }
+ yield return false;
+ cutIf1:
+ { }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ public static IEnumerable clear_errors()
+ {
+ {
+ yield return false;
+ }
+ }
+
+ public static IEnumerable remove_pos(object arg1, object arg2)
+ {
+ {
+ Variable X = new Variable();
+ foreach (bool l2 in YP.unify(arg1, X))
+ {
+ foreach (bool l3 in YP.unify(arg2, X))
+ {
+ if (YP.var(X))
+ {
+ yield return true;
+ yield break;
+ }
+ }
+ }
+ }
+ {
+ object X = arg2;
+ Variable _Pos = new Variable();
+ Variable _Name = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new Functor3(@"$VAR", _Pos, _Name, X)))
+ {
+ if (YP.var(X))
+ {
+ yield return true;
+ yield break;
+ }
+ }
+ }
+ {
+ foreach (bool l2 in YP.unify(arg1, Atom.NIL))
+ {
+ foreach (bool l3 in YP.unify(arg2, Atom.NIL))
+ {
+ yield return true;
+ yield break;
+ }
+ }
+ }
+ {
+ Variable H = new Variable();
+ Variable T = new Variable();
+ Variable NH = new Variable();
+ Variable NT = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new ListPair(H, T)))
+ {
+ foreach (bool l3 in YP.unify(arg2, new ListPair(NH, NT)))
+ {
+ foreach (bool l4 in remove_pos(H, NH))
+ {
+ foreach (bool l5 in remove_pos(T, NT))
+ {
+ yield return false;
+ }
+ }
+ yield break;
+ }
+ }
+ }
+ {
+ Variable A = new Variable();
+ Variable B = new Variable();
+ Variable NA = new Variable();
+ Variable NB = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new Functor2(@",", A, B)))
+ {
+ foreach (bool l3 in YP.unify(arg2, new Functor2(@",", NA, NB)))
+ {
+ foreach (bool l4 in remove_pos(A, NA))
+ {
+ foreach (bool l5 in remove_pos(B, NB))
+ {
+ yield return false;
+ }
+ }
+ yield break;
+ }
+ }
+ }
+ {
+ Variable Atom_1 = new Variable();
+ Variable _F = new Variable();
+ foreach (bool l2 in YP.unify(arg1, Atom_1))
+ {
+ foreach (bool l3 in YP.unify(arg2, Atom_1))
+ {
+ foreach (bool l4 in YP.functor(Atom_1, _F, 0))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+ {
+ object Term = arg1;
+ object NewTerm = arg2;
+ Variable Func = new Variable();
+ Variable _Pos = new Variable();
+ Variable Args = new Variable();
+ Variable NArgs = new Variable();
+ if (YP.nonvar(Term))
+ {
+ foreach (bool l3 in YP.univ(Term, new ListPair(Func, new ListPair(_Pos, Args))))
+ {
+ foreach (bool l4 in remove_pos(Args, NArgs))
+ {
+ foreach (bool l5 in YP.univ(NewTerm, new ListPair(Func, NArgs)))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ public static IEnumerable portable_read_position(object Term, object PosTerm, object Syntax)
+ {
+ {
+ foreach (bool l2 in portable_read(PosTerm, Syntax))
+ {
+ foreach (bool l3 in remove_pos(PosTerm, Term))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+
+ public static IEnumerable portable_read(object Answer, object Syntax)
+ {
+ {
+ Variable Tokens = new Variable();
+ Variable ParseTokens = new Variable();
+ foreach (bool l2 in read_tokens1(Tokens))
+ {
+ foreach (bool l3 in remove_comments(Tokens, ParseTokens, Syntax))
+ {
+ foreach (bool l4 in parse2(ParseTokens, Answer))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+ }
+
+ public static IEnumerable portable_read3(object Answer, object Variables, object Syntax)
+ {
+ {
+ Variable Tokens = new Variable();
+ Variable ParseTokens = new Variable();
+ foreach (bool l2 in read_tokens2(Tokens, Variables))
+ {
+ foreach (bool l3 in remove_comments(Tokens, ParseTokens, Syntax))
+ {
+ foreach (bool l4 in parse2(ParseTokens, Answer))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+ }
+
+ public static IEnumerable remove_comments(object arg1, object arg2, object arg3)
+ {
+ {
+ foreach (bool l2 in YP.unify(arg1, Atom.NIL))
+ {
+ foreach (bool l3 in YP.unify(arg2, Atom.NIL))
+ {
+ foreach (bool l4 in YP.unify(arg3, Atom.NIL))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+ {
+ object Ys = arg2;
+ Variable S = new Variable();
+ Variable E = new Variable();
+ Variable Xs = new Variable();
+ Variable Zs = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"comment", S, E), Xs)))
+ {
+ foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2(@"comment", S, E), Zs)))
+ {
+ foreach (bool l4 in remove_comments(Xs, Ys, Zs))
+ {
+ yield return false;
+ }
+ yield break;
+ }
+ }
+ }
+ {
+ Variable Pos = new Variable();
+ Variable Xs = new Variable();
+ Variable Ys = new Variable();
+ Variable Pos2 = new Variable();
+ Variable Zs = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"/", Atom.a(@"["), Pos), Xs)))
+ {
+ foreach (bool l3 in YP.unify(arg2, new ListPair(Atom.a(@"["), Ys)))
+ {
+ foreach (bool l4 in YP.unify(arg3, new ListPair(new Functor2(@"list", Pos, Pos2), Zs)))
+ {
+ foreach (bool l5 in YP.unify(Pos2, YP.add(Pos, 1)))
+ {
+ foreach (bool l6 in remove_comments(Xs, Ys, Zs))
+ {
+ yield return false;
+ }
+ }
+ yield break;
+ }
+ }
+ }
+ }
+ {
+ Variable Pos = new Variable();
+ Variable Xs = new Variable();
+ Variable Ys = new Variable();
+ Variable Pos2 = new Variable();
+ Variable Zs = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"/", Atom.a(@"]"), Pos), Xs)))
+ {
+ foreach (bool l3 in YP.unify(arg2, new ListPair(Atom.a(@"]"), Ys)))
+ {
+ foreach (bool l4 in YP.unify(arg3, new ListPair(new Functor2(@"list", Pos, Pos2), Zs)))
+ {
+ foreach (bool l5 in YP.unify(Pos2, YP.add(Pos, 1)))
+ {
+ foreach (bool l6 in remove_comments(Xs, Ys, Zs))
+ {
+ yield return false;
+ }
+ }
+ yield break;
+ }
+ }
+ }
+ }
+ {
+ object Zs = arg3;
+ Variable Token = new Variable();
+ Variable Xs = new Variable();
+ Variable Ys = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new ListPair(Token, Xs)))
+ {
+ foreach (bool l3 in YP.unify(arg2, new ListPair(Token, Ys)))
+ {
+ foreach (bool l4 in remove_comments(Xs, Ys, Zs))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+ }
+
+ public static IEnumerable expect(object Token, object arg2, object arg3)
+ {
+ {
+ object Rest = arg3;
+ foreach (bool l2 in YP.unify(arg2, new ListPair(Token, Rest)))
+ {
+ yield return true;
+ yield break;
+ }
+ }
+ {
+ object S0 = arg2;
+ object x3 = arg3;
+ foreach (bool l2 in syntax_error(new ListPair(Token, new ListPair(Atom.a(@"or"), new ListPair(Atom.a(@"operator"), new ListPair(Atom.a(@"expected"), Atom.NIL)))), S0))
+ {
+ yield return false;
+ }
+ }
+ }
+
+ public static IEnumerable parse2(object Tokens, object Answer)
+ {
+ {
+ Variable Term = new Variable();
+ Variable LeftOver = new Variable();
+ foreach (bool l2 in clear_errors())
+ {
+ foreach (bool l3 in parse(Tokens, 1200, Term, LeftOver))
+ {
+ foreach (bool l4 in all_read(LeftOver))
+ {
+ foreach (bool l5 in YP.unify(Answer, Term))
+ {
+ yield return false;
+ }
+ yield break;
+ }
+ }
+ foreach (bool l3 in syntax_error(Tokens))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+
+ public static IEnumerable all_read(object arg1)
+ {
+ {
+ foreach (bool l2 in YP.unify(arg1, Atom.NIL))
+ {
+ yield return false;
+ }
+ }
+ {
+ Variable Token = new Variable();
+ Variable S = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new ListPair(Token, S)))
+ {
+ foreach (bool l3 in syntax_error(new ListPair(Atom.a(@"operator"), new ListPair(Atom.a(@"expected"), new ListPair(Atom.a(@"after"), new ListPair(Atom.a(@"expression"), Atom.NIL)))), new ListPair(Token, S)))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+
+ public static IEnumerable parse(object arg1, object arg2, object arg3, object arg4)
+ {
+ {
+ object x1 = arg2;
+ object x2 = arg3;
+ object x3 = arg4;
+ foreach (bool l2 in YP.unify(arg1, Atom.NIL))
+ {
+ foreach (bool l3 in syntax_error(new ListPair(Atom.a(@"expression"), new ListPair(Atom.a(@"expected"), Atom.NIL)), Atom.NIL))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object Precedence = arg2;
+ object Term = arg3;
+ object LeftOver = arg4;
+ Variable Token = new Variable();
+ Variable RestTokens = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new ListPair(Token, RestTokens)))
+ {
+ foreach (bool l3 in parse5(Token, RestTokens, Precedence, Term, LeftOver))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+
+ public static IEnumerable parse5(object arg1, object arg2, object arg3, object arg4, object arg5)
+ {
+ {
+ object S0 = arg2;
+ object x2 = arg3;
+ object x3 = arg4;
+ object x4 = arg5;
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@"}")))
+ {
+ foreach (bool l3 in cannot_start(Atom.a(@"}"), S0))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object S0 = arg2;
+ object x2 = arg3;
+ object x3 = arg4;
+ object x4 = arg5;
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@"]")))
+ {
+ foreach (bool l3 in cannot_start(Atom.a(@"]"), S0))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object S0 = arg2;
+ object x2 = arg3;
+ object x3 = arg4;
+ object x4 = arg5;
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@")")))
+ {
+ foreach (bool l3 in cannot_start(Atom.a(@")"), S0))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object S0 = arg2;
+ object x2 = arg3;
+ object x3 = arg4;
+ object x4 = arg5;
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@",")))
+ {
+ foreach (bool l3 in cannot_start(Atom.a(@","), S0))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object S0 = arg2;
+ object x2 = arg3;
+ object x3 = arg4;
+ object x4 = arg5;
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@"|")))
+ {
+ foreach (bool l3 in cannot_start(Atom.a(@"|"), S0))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object S0 = arg2;
+ object Precedence = arg3;
+ object Answer = arg4;
+ object S = arg5;
+ Variable Chars = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new Functor1(@"string", Chars)))
+ {
+ foreach (bool l3 in exprtl0(S0, Chars, Precedence, Answer, S))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object S0 = arg2;
+ object Precedence = arg3;
+ object Answer = arg4;
+ object S = arg5;
+ Variable Number = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new Functor1(@"number", Number)))
+ {
+ foreach (bool l3 in exprtl0(S0, Number, Precedence, Answer, S))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object Precedence = arg3;
+ object Answer = arg4;
+ object S = arg5;
+ Variable S1 = new Variable();
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@"[")))
+ {
+ foreach (bool l3 in YP.unify(arg2, new ListPair(Atom.a(@"]"), S1)))
+ {
+ foreach (bool l4 in read_atom(new Functor2(@"/", Atom.NIL, 0), S1, Precedence, Answer, S))
+ {
+ yield return false;
+ }
+ yield break;
+ }
+ }
+ }
+ {
+ object S1 = arg2;
+ object Precedence = arg3;
+ object Answer = arg4;
+ object S = arg5;
+ Variable Arg1 = new Variable();
+ Variable S2 = new Variable();
+ Variable RestArgs = new Variable();
+ Variable S3 = new Variable();
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@"[")))
+ {
+ foreach (bool l3 in parse(S1, 999, Arg1, S2))
+ {
+ foreach (bool l4 in read_list(S2, RestArgs, S3))
+ {
+ foreach (bool l5 in exprtl0(S3, new ListPair(Arg1, RestArgs), Precedence, Answer, S))
+ {
+ yield return false;
+ }
+ yield break;
+ }
+ }
+ }
+ }
+ {
+ object S1 = arg2;
+ object Precedence = arg3;
+ object Answer = arg4;
+ object S = arg5;
+ Variable Term = new Variable();
+ Variable S2 = new Variable();
+ Variable S3 = new Variable();
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@"(")))
+ {
+ foreach (bool l3 in parse(S1, 1200, Term, S2))
+ {
+ foreach (bool l4 in expect(Atom.a(@")"), S2, S3))
+ {
+ foreach (bool l5 in exprtl0(S3, Term, Precedence, Answer, S))
+ {
+ yield return false;
+ }
+ yield break;
+ }
+ }
+ }
+ }
+ {
+ object S1 = arg2;
+ object Precedence = arg3;
+ object Answer = arg4;
+ object S = arg5;
+ Variable Term = new Variable();
+ Variable S2 = new Variable();
+ Variable S3 = new Variable();
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@" (")))
+ {
+ foreach (bool l3 in parse(S1, 1200, Term, S2))
+ {
+ foreach (bool l4 in expect(Atom.a(@")"), S2, S3))
+ {
+ foreach (bool l5 in exprtl0(S3, Term, Precedence, Answer, S))
+ {
+ yield return false;
+ }
+ yield break;
+ }
+ }
+ }
+ }
+ {
+ object Precedence = arg3;
+ object Answer = arg4;
+ object S = arg5;
+ Variable _Pos = new Variable();
+ Variable S1 = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new Functor2(@"/", Atom.a(@"{"), _Pos)))
+ {
+ foreach (bool l3 in YP.unify(arg2, new ListPair(Atom.a(@"}"), S1)))
+ {
+ foreach (bool l4 in read_atom(Atom.a(@"{}"), S1, Precedence, Answer, S))
+ {
+ yield return false;
+ }
+ yield break;
+ }
+ }
+ }
+ {
+ object S1 = arg2;
+ object Precedence = arg3;
+ object Answer = arg4;
+ object S = arg5;
+ Variable Pos = new Variable();
+ Variable Term = new Variable();
+ Variable S2 = new Variable();
+ Variable S3 = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new Functor2(@"/", Atom.a(@"{"), Pos)))
+ {
+ foreach (bool l3 in parse(S1, 1200, Term, S2))
+ {
+ foreach (bool l4 in expect(Atom.a(@"}"), S2, S3))
+ {
+ foreach (bool l5 in exprtl0(S3, new Functor2(@"{}", Pos, Term), Precedence, Answer, S))
+ {
+ yield return false;
+ }
+ yield break;
+ }
+ }
+ }
+ }
+ {
+ object Precedence = arg3;
+ object Answer = arg4;
+ object S = arg5;
+ Variable Variable_1 = new Variable();
+ Variable Name = new Variable();
+ Variable Pos = new Variable();
+ Variable S1 = new Variable();
+ Variable Arg1 = new Variable();
+ Variable S2 = new Variable();
+ Variable RestArgs = new Variable();
+ Variable S3 = new Variable();
+ Variable Term = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new Functor3(@"var", Variable_1, Name, Pos)))
+ {
+ foreach (bool l3 in YP.unify(arg2, new ListPair(Atom.a(@"("), S1)))
+ {
+ foreach (bool l4 in parse(S1, 999, Arg1, S2))
+ {
+ foreach (bool l5 in read_args(S2, RestArgs, S3))
+ {
+ foreach (bool l6 in YP.univ(Term, new ListPair(Atom.a(@"call"), new ListPair(new Functor3(@"$VAR", Pos, Name, Variable_1), new ListPair(Arg1, RestArgs)))))
+ {
+ foreach (bool l7 in exprtl0(S3, Term, Precedence, Answer, S))
+ {
+ yield return false;
+ }
+ }
+ yield break;
+ }
+ }
+ yield break;
+ }
+ }
+ }
+ {
+ object S0 = arg2;
+ object Precedence = arg3;
+ object Answer = arg4;
+ object S = arg5;
+ Variable Variable_1 = new Variable();
+ Variable Name = new Variable();
+ Variable Pos = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new Functor3(@"var", Variable_1, Name, Pos)))
+ {
+ foreach (bool l3 in exprtl0(S0, new Functor3(@"$VAR", Pos, Name, Variable_1), Precedence, Answer, S))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object S0 = arg2;
+ object Precedence = arg3;
+ object Answer = arg4;
+ object S = arg5;
+ Variable Atom_1 = new Variable();
+ Variable P = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new Functor2(@"atom", Atom_1, P)))
+ {
+ foreach (bool l3 in read_atom(new Functor2(@"/", Atom_1, P), S0, Precedence, Answer, S))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+
+ public static IEnumerable read_atom(object arg1, object arg2, object Precedence, object Answer, object S)
+ {
+ {
+ Variable _Pos = new Variable();
+ Variable Number = new Variable();
+ Variable S1 = new Variable();
+ Variable Negative = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new Functor2(@"/", Atom.a(@"-"), _Pos)))
+ {
+ foreach (bool l3 in YP.unify(arg2, new ListPair(new Functor1(@"number", Number), S1)))
+ {
+ foreach (bool l4 in YP.unify(Negative, YP.negate(Number)))
+ {
+ foreach (bool l5 in exprtl0(S1, Negative, Precedence, Answer, S))
+ {
+ yield return false;
+ }
+ }
+ yield break;
+ }
+ }
+ }
+ {
+ Variable Functor_1 = new Variable();
+ Variable Pos = new Variable();
+ Variable S1 = new Variable();
+ Variable Arg1 = new Variable();
+ Variable S2 = new Variable();
+ Variable RestArgs = new Variable();
+ Variable S3 = new Variable();
+ Variable Term = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new Functor2(@"/", Functor_1, Pos)))
+ {
+ foreach (bool l3 in YP.unify(arg2, new ListPair(Atom.a(@"("), S1)))
+ {
+ foreach (bool l4 in parse(S1, 999, Arg1, S2))
+ {
+ foreach (bool l5 in read_args(S2, RestArgs, S3))
+ {
+ foreach (bool l6 in YP.univ(Term, new ListPair(Functor_1, new ListPair(Pos, new ListPair(Arg1, RestArgs)))))
+ {
+ foreach (bool l7 in exprtl0(S3, Term, Precedence, Answer, S))
+ {
+ yield return false;
+ }
+ }
+ yield break;
+ }
+ }
+ yield break;
+ }
+ }
+ }
+ {
+ object S0 = arg2;
+ Variable Op = new Variable();
+ Variable Pos = new Variable();
+ Variable Oprec = new Variable();
+ Variable Aprec = new Variable();
+ Variable Flag = new Variable();
+ Variable Term = new Variable();
+ Variable Arg = new Variable();
+ Variable S1 = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new Functor2(@"/", Op, Pos)))
+ {
+ foreach (bool l3 in prefixop(Op, Oprec, Aprec))
+ {
+ foreach (bool l4 in possible_right_operand(S0, Flag))
+ {
+ if (YP.lessThan(Flag, 0))
+ {
+ foreach (bool l6 in YP.univ(Term, new ListPair(Op, new ListPair(Pos, Atom.NIL))))
+ {
+ foreach (bool l7 in exprtl0(S0, Term, Precedence, Answer, S))
+ {
+ yield return false;
+ }
+ }
+ goto cutIf1;
+ }
+ if (YP.greaterThan(Oprec, Precedence))
+ {
+ foreach (bool l6 in syntax_error(new ListPair(Atom.a(@"prefix"), new ListPair(Atom.a(@"operator"), new ListPair(Op, new ListPair(Atom.a(@"in"), new ListPair(Atom.a(@"context"), new ListPair(Atom.a(@"with"), new ListPair(Atom.a(@"precedence"), new ListPair(Precedence, Atom.NIL)))))))), S0))
+ {
+ yield return false;
+ }
+ goto cutIf2;
+ }
+ if (YP.greaterThan(Flag, 0))
+ {
+ foreach (bool l6 in parse(S0, Aprec, Arg, S1))
+ {
+ foreach (bool l7 in YP.univ(Term, new ListPair(Op, new ListPair(Pos, new ListPair(Arg, Atom.NIL)))))
+ {
+ foreach (bool l8 in exprtl(S1, Oprec, Term, Precedence, Answer, S))
+ {
+ yield return false;
+ }
+ }
+ yield break;
+ }
+ goto cutIf3;
+ }
+ foreach (bool l5 in peepop(S0, S1))
+ {
+ foreach (bool l6 in prefix_is_atom(S1, Oprec))
+ {
+ foreach (bool l7 in exprtl(S1, Oprec, new Functor2(@"/", Op, Pos), Precedence, Answer, S))
+ {
+ yield return false;
+ }
+ }
+ }
+ foreach (bool l5 in parse(S0, Aprec, Arg, S1))
+ {
+ foreach (bool l6 in YP.univ(Term, new ListPair(Op, new ListPair(Pos, new ListPair(Arg, Atom.NIL)))))
+ {
+ foreach (bool l7 in exprtl(S1, Oprec, Term, Precedence, Answer, S))
+ {
+ yield return false;
+ }
+ }
+ yield break;
+ }
+ cutIf3:
+ cutIf2:
+ cutIf1:
+ { }
+ }
+ yield break;
+ }
+ }
+ }
+ {
+ object S0 = arg2;
+ Variable Atom_1 = new Variable();
+ Variable Pos = new Variable();
+ Variable Term = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new Functor2(@"/", Atom_1, Pos)))
+ {
+ foreach (bool l3 in YP.univ(Term, new ListPair(Atom_1, new ListPair(Pos, Atom.NIL))))
+ {
+ foreach (bool l4 in exprtl0(S0, Term, Precedence, Answer, S))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+ }
+
+ public static IEnumerable cannot_start(object Token, object S0)
+ {
+ {
+ foreach (bool l2 in syntax_error(new ListPair(Token, new ListPair(Atom.a(@"cannot"), new ListPair(Atom.a(@"start"), new ListPair(Atom.a(@"an"), new ListPair(Atom.a(@"expression"), Atom.NIL))))), S0))
+ {
+ yield return false;
+ }
+ }
+ }
+
+ public static IEnumerable read_args(object arg1, object arg2, object arg3)
+ {
+ {
+ object S = arg3;
+ Variable S1 = new Variable();
+ Variable Term = new Variable();
+ Variable Rest = new Variable();
+ Variable S2 = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a(@","), S1)))
+ {
+ foreach (bool l3 in YP.unify(arg2, new ListPair(Term, Rest)))
+ {
+ foreach (bool l4 in parse(S1, 999, Term, S2))
+ {
+ foreach (bool l5 in read_args(S2, Rest, S))
+ {
+ yield return false;
+ }
+ yield break;
+ }
+ yield break;
+ }
+ }
+ }
+ {
+ object S = arg3;
+ foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a(@")"), S)))
+ {
+ foreach (bool l3 in YP.unify(arg2, Atom.NIL))
+ {
+ yield return true;
+ yield break;
+ }
+ }
+ }
+ {
+ object S = arg1;
+ object x2 = arg2;
+ object x3 = arg3;
+ foreach (bool l2 in syntax_error(new ListPair(Atom.a(@", or )"), new ListPair(Atom.a(@"expected"), new ListPair(Atom.a(@"in"), new ListPair(Atom.a(@"arguments"), Atom.NIL)))), S))
+ {
+ yield return false;
+ }
+ }
+ }
+
+ public static IEnumerable read_list(object arg1, object arg2, object arg3)
+ {
+ {
+ object x1 = arg2;
+ object x2 = arg3;
+ foreach (bool l2 in YP.unify(arg1, Atom.NIL))
+ {
+ foreach (bool l3 in syntax_error(new ListPair(Atom.a(@", | or ]"), new ListPair(Atom.a(@"expected"), new ListPair(Atom.a(@"in"), new ListPair(Atom.a(@"list"), Atom.NIL)))), Atom.NIL))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object Rest = arg2;
+ object S = arg3;
+ Variable Token = new Variable();
+ Variable S1 = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new ListPair(Token, S1)))
+ {
+ foreach (bool l3 in read_list4(Token, S1, Rest, S))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+
+ public static IEnumerable read_list4(object arg1, object arg2, object arg3, object arg4)
+ {
+ {
+ object S1 = arg2;
+ object S = arg4;
+ Variable Term = new Variable();
+ Variable Rest = new Variable();
+ Variable S2 = new Variable();
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@",")))
+ {
+ foreach (bool l3 in YP.unify(arg3, new ListPair(Term, Rest)))
+ {
+ foreach (bool l4 in parse(S1, 999, Term, S2))
+ {
+ foreach (bool l5 in read_list(S2, Rest, S))
+ {
+ yield return false;
+ }
+ yield break;
+ }
+ yield break;
+ }
+ }
+ }
+ {
+ object S1 = arg2;
+ object Rest = arg3;
+ object S = arg4;
+ Variable S2 = new Variable();
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@"|")))
+ {
+ foreach (bool l3 in parse(S1, 999, Rest, S2))
+ {
+ foreach (bool l4 in expect(Atom.a(@"]"), S2, S))
+ {
+ yield return false;
+ }
+ yield break;
+ }
+ yield break;
+ }
+ }
+ {
+ Variable S1 = new Variable();
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@"]")))
+ {
+ foreach (bool l3 in YP.unify(arg2, S1))
+ {
+ foreach (bool l4 in YP.unify(arg3, Atom.NIL))
+ {
+ foreach (bool l5 in YP.unify(arg4, S1))
+ {
+ yield return true;
+ yield break;
+ }
+ }
+ }
+ }
+ }
+ {
+ object Token = arg1;
+ object S1 = arg2;
+ object x3 = arg3;
+ object x4 = arg4;
+ foreach (bool l2 in syntax_error(new ListPair(Atom.a(@", | or ]"), new ListPair(Atom.a(@"expected"), new ListPair(Atom.a(@"in"), new ListPair(Atom.a(@"list"), Atom.NIL)))), new ListPair(Token, S1)))
+ {
+ yield return false;
+ }
+ }
+ }
+
+ public static IEnumerable possible_right_operand(object arg1, object arg2)
+ {
+ {
+ foreach (bool l2 in YP.unify(arg1, Atom.NIL))
+ {
+ foreach (bool l3 in YP.unify(arg2, -1))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object Flag = arg2;
+ Variable H = new Variable();
+ Variable T = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new ListPair(H, T)))
+ {
+ foreach (bool l3 in possible_right_operand3(H, Flag, T))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+
+ public static IEnumerable possible_right_operand3(object arg1, object arg2, object arg3)
+ {
+ {
+ object x4 = arg3;
+ Variable x1 = new Variable();
+ Variable x2 = new Variable();
+ Variable x3 = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new Functor3(@"var", x1, x2, x3)))
+ {
+ foreach (bool l3 in YP.unify(arg2, 1))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object x2 = arg3;
+ Variable x1 = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new Functor1(@"number", x1)))
+ {
+ foreach (bool l3 in YP.unify(arg2, 1))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object x2 = arg3;
+ Variable x1 = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new Functor1(@"string", x1)))
+ {
+ foreach (bool l3 in YP.unify(arg2, 1))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object x1 = arg3;
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@" (")))
+ {
+ foreach (bool l3 in YP.unify(arg2, 1))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object x1 = arg3;
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@"(")))
+ {
+ foreach (bool l3 in YP.unify(arg2, 0))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object x1 = arg3;
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@")")))
+ {
+ foreach (bool l3 in YP.unify(arg2, -1))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ Variable x1 = new Variable();
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@"[")))
+ {
+ foreach (bool l3 in YP.unify(arg2, 0))
+ {
+ foreach (bool l4 in YP.unify(arg3, new ListPair(Atom.a(@"]"), x1)))
+ {
+ yield return true;
+ yield break;
+ }
+ }
+ }
+ }
+ {
+ object x1 = arg3;
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@"[")))
+ {
+ foreach (bool l3 in YP.unify(arg2, 1))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object x1 = arg3;
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@"]")))
+ {
+ foreach (bool l3 in YP.unify(arg2, -1))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ Variable x1 = new Variable();
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@"{")))
+ {
+ foreach (bool l3 in YP.unify(arg2, 0))
+ {
+ foreach (bool l4 in YP.unify(arg3, new ListPair(Atom.a(@"}"), x1)))
+ {
+ yield return true;
+ yield break;
+ }
+ }
+ }
+ }
+ {
+ object x1 = arg3;
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@"{")))
+ {
+ foreach (bool l3 in YP.unify(arg2, 1))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object x1 = arg3;
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@"}")))
+ {
+ foreach (bool l3 in YP.unify(arg2, -1))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object x1 = arg3;
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@",")))
+ {
+ foreach (bool l3 in YP.unify(arg2, -1))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object x1 = arg3;
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@"|")))
+ {
+ foreach (bool l3 in YP.unify(arg2, -1))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object x3 = arg3;
+ Variable x1 = new Variable();
+ Variable x2 = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new Functor2(@"atom", x1, x2)))
+ {
+ foreach (bool l3 in YP.unify(arg2, 0))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+
+ public static IEnumerable peepop(object arg1, object arg2)
+ {
+ {
+ Variable F = new Variable();
+ Variable Pos = new Variable();
+ Variable S1 = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"atom", F, Pos), new ListPair(Atom.a(@"("), S1))))
+ {
+ foreach (bool l3 in YP.unify(arg2, new ListPair(new Functor2(@"atom", F, Pos), new ListPair(Atom.a(@"("), S1))))
+ {
+ yield return true;
+ yield break;
+ }
+ }
+ }
+ {
+ Variable F = new Variable();
+ Variable Pos = new Variable();
+ Variable S1 = new Variable();
+ Variable L = new Variable();
+ Variable P = new Variable();
+ Variable R = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"atom", F, Pos), S1)))
+ {
+ foreach (bool l3 in YP.unify(arg2, new ListPair(new Functor(Atom.a(@"infixop", Atom.a(@"")), new object[] { new Functor2(@"/", F, Pos), L, P, R }), S1)))
+ {
+ foreach (bool l4 in infixop(F, L, P, R))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+ {
+ Variable F = new Variable();
+ Variable Pos = new Variable();
+ Variable S1 = new Variable();
+ Variable L = new Variable();
+ Variable P = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"atom", F, Pos), S1)))
+ {
+ foreach (bool l3 in YP.unify(arg2, new ListPair(new Functor3(Atom.a(@"postfixop", Atom.a(@"")), new Functor2(@"/", F, Pos), L, P), S1)))
+ {
+ foreach (bool l4 in postfixop(F, L, P))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+ {
+ Variable S0 = new Variable();
+ foreach (bool l2 in YP.unify(arg1, S0))
+ {
+ foreach (bool l3 in YP.unify(arg2, S0))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+
+ public static IEnumerable prefix_is_atom(object arg1, object arg2)
+ {
+ {
+ object Precedence = arg2;
+ Variable Token = new Variable();
+ Variable x2 = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new ListPair(Token, x2)))
+ {
+ foreach (bool l3 in prefix_is_atom(Token, Precedence))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object P = arg2;
+ Variable x1 = new Variable();
+ Variable L = new Variable();
+ Variable x3 = new Variable();
+ Variable x4 = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new Functor(Atom.a(@"infixop", Atom.a(@"")), new object[] { x1, L, x3, x4 })))
+ {
+ if (YP.greaterThanOrEqual(L, P))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object P = arg2;
+ Variable x1 = new Variable();
+ Variable L = new Variable();
+ Variable x3 = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new Functor3(Atom.a(@"postfixop", Atom.a(@"")), x1, L, x3)))
+ {
+ if (YP.greaterThanOrEqual(L, P))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object x1 = arg2;
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@")")))
+ {
+ yield return false;
+ }
+ }
+ {
+ object x1 = arg2;
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@"]")))
+ {
+ yield return false;
+ }
+ }
+ {
+ object x1 = arg2;
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@"}")))
+ {
+ yield return false;
+ }
+ }
+ {
+ object P = arg2;
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@"|")))
+ {
+ if (YP.greaterThanOrEqual(1100, P))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object P = arg2;
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@",")))
+ {
+ if (YP.greaterThanOrEqual(1000, P))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object x1 = arg2;
+ foreach (bool l2 in YP.unify(arg1, Atom.NIL))
+ {
+ yield return false;
+ }
+ }
+ }
+
+ public static IEnumerable exprtl0(object arg1, object arg2, object arg3, object arg4, object arg5)
+ {
+ {
+ object x2 = arg3;
+ Variable Term = new Variable();
+ foreach (bool l2 in YP.unify(arg1, Atom.NIL))
+ {
+ foreach (bool l3 in YP.unify(arg2, Term))
+ {
+ foreach (bool l4 in YP.unify(arg4, Term))
+ {
+ foreach (bool l5 in YP.unify(arg5, Atom.NIL))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+ }
+ {
+ object Term = arg2;
+ object Precedence = arg3;
+ object Answer = arg4;
+ object S = arg5;
+ Variable Token = new Variable();
+ Variable S1 = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new ListPair(Token, S1)))
+ {
+ foreach (bool l3 in exprtl0_6(Token, Term, Precedence, Answer, S, S1))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+
+ public static IEnumerable exprtl0_6(object arg1, object arg2, object arg3, object arg4, object arg5, object arg6)
+ {
+ {
+ object x2 = arg3;
+ object S1 = arg6;
+ Variable Term = new Variable();
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@"}")))
+ {
+ foreach (bool l3 in YP.unify(arg2, Term))
+ {
+ foreach (bool l4 in YP.unify(arg4, Term))
+ {
+ foreach (bool l5 in YP.unify(arg5, new ListPair(Atom.a(@"}"), S1)))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+ }
+ {
+ object x2 = arg3;
+ object S1 = arg6;
+ Variable Term = new Variable();
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@"]")))
+ {
+ foreach (bool l3 in YP.unify(arg2, Term))
+ {
+ foreach (bool l4 in YP.unify(arg4, Term))
+ {
+ foreach (bool l5 in YP.unify(arg5, new ListPair(Atom.a(@"]"), S1)))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+ }
+ {
+ object x2 = arg3;
+ object S1 = arg6;
+ Variable Term = new Variable();
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@")")))
+ {
+ foreach (bool l3 in YP.unify(arg2, Term))
+ {
+ foreach (bool l4 in YP.unify(arg4, Term))
+ {
+ foreach (bool l5 in YP.unify(arg5, new ListPair(Atom.a(@")"), S1)))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+ }
+ {
+ object Term = arg2;
+ object Precedence = arg3;
+ object Answer = arg4;
+ object S = arg5;
+ object S1 = arg6;
+ Variable Next = new Variable();
+ Variable S2 = new Variable();
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@",")))
+ {
+ if (YP.greaterThanOrEqual(Precedence, 1000))
+ {
+ foreach (bool l4 in parse(S1, 1000, Next, S2))
+ {
+ foreach (bool l5 in exprtl(S2, 1000, new Functor2(@",", Term, Next), Precedence, Answer, S))
+ {
+ yield return false;
+ }
+ yield break;
+ }
+ goto cutIf1;
+ }
+ foreach (bool l3 in YP.unify(Answer, Term))
+ {
+ foreach (bool l4 in YP.unify(S, new ListPair(Atom.a(@","), S1)))
+ {
+ yield return false;
+ }
+ }
+ cutIf1:
+ { }
+ }
+ }
+ {
+ object Term = arg2;
+ object Precedence = arg3;
+ object Answer = arg4;
+ object S = arg5;
+ object S1 = arg6;
+ Variable Next = new Variable();
+ Variable S2 = new Variable();
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@"|")))
+ {
+ if (YP.greaterThanOrEqual(Precedence, 1100))
+ {
+ foreach (bool l4 in parse(S1, 1100, Next, S2))
+ {
+ foreach (bool l5 in exprtl(S2, 1100, new Functor2(@";", Term, Next), Precedence, Answer, S))
+ {
+ yield return false;
+ }
+ yield break;
+ }
+ goto cutIf2;
+ }
+ foreach (bool l3 in YP.unify(Answer, Term))
+ {
+ foreach (bool l4 in YP.unify(S, new ListPair(Atom.a(@"|"), S1)))
+ {
+ yield return false;
+ }
+ }
+ cutIf2:
+ { }
+ }
+ }
+ {
+ object x2 = arg2;
+ object x3 = arg3;
+ object x4 = arg4;
+ object x5 = arg5;
+ object S1 = arg6;
+ Variable S = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new Functor1(@"string", S)))
+ {
+ foreach (bool l3 in cannot_follow(Atom.a(@"chars"), new Functor1(@"string", S), S1))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object x2 = arg2;
+ object x3 = arg3;
+ object x4 = arg4;
+ object x5 = arg5;
+ object S1 = arg6;
+ Variable N = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new Functor1(@"number", N)))
+ {
+ foreach (bool l3 in cannot_follow(Atom.a(@"number"), new Functor1(@"number", N), S1))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object Term = arg2;
+ object Precedence = arg3;
+ object Answer = arg4;
+ object S = arg5;
+ Variable S1 = new Variable();
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@"{")))
+ {
+ foreach (bool l3 in YP.unify(arg6, new ListPair(Atom.a(@"}"), S1)))
+ {
+ foreach (bool l4 in exprtl0_atom(Atom.a(@"{}"), Term, Precedence, Answer, S, S1))
+ {
+ yield return false;
+ }
+ yield break;
+ }
+ }
+ }
+ {
+ object x1 = arg2;
+ object x2 = arg3;
+ object x3 = arg4;
+ object x4 = arg5;
+ object S1 = arg6;
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@"{")))
+ {
+ foreach (bool l3 in cannot_follow(Atom.a(@"brace"), Atom.a(@"{"), S1))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object Term = arg2;
+ object Precedence = arg3;
+ object Answer = arg4;
+ object S = arg5;
+ Variable S1 = new Variable();
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@"[")))
+ {
+ foreach (bool l3 in YP.unify(arg6, new ListPair(Atom.a(@"]"), S1)))
+ {
+ foreach (bool l4 in exprtl0_atom(Atom.NIL, Term, Precedence, Answer, S, S1))
+ {
+ yield return false;
+ }
+ yield break;
+ }
+ }
+ }
+ {
+ object x1 = arg2;
+ object x2 = arg3;
+ object x3 = arg4;
+ object x4 = arg5;
+ object S1 = arg6;
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@"[")))
+ {
+ foreach (bool l3 in cannot_follow(Atom.a(@"bracket"), Atom.a(@"["), S1))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object x1 = arg2;
+ object x2 = arg3;
+ object x3 = arg4;
+ object x4 = arg5;
+ object S1 = arg6;
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@"(")))
+ {
+ foreach (bool l3 in cannot_follow(Atom.a(@"parenthesis"), Atom.a(@"("), S1))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object x1 = arg2;
+ object x2 = arg3;
+ object x3 = arg4;
+ object x4 = arg5;
+ object S1 = arg6;
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@" (")))
+ {
+ foreach (bool l3 in cannot_follow(Atom.a(@"parenthesis"), Atom.a(@"("), S1))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object x4 = arg2;
+ object x5 = arg3;
+ object x6 = arg4;
+ object x7 = arg5;
+ object S1 = arg6;
+ Variable A = new Variable();
+ Variable B = new Variable();
+ Variable P = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new Functor3(@"var", A, B, P)))
+ {
+ foreach (bool l3 in cannot_follow(Atom.a(@"variable"), new Functor3(@"var", A, B, P), S1))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object Term = arg2;
+ object Precedence = arg3;
+ object Answer = arg4;
+ object S = arg5;
+ object S1 = arg6;
+ Variable F = new Variable();
+ Variable P = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new Functor2(@"atom", F, P)))
+ {
+ foreach (bool l3 in exprtl0_atom(new Functor2(@"/", F, P), Term, Precedence, Answer, S, S1))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+
+ public static IEnumerable exprtl0_atom(object arg1, object arg2, object arg3, object arg4, object arg5, object S1)
+ {
+ {
+ object Term = arg2;
+ object Precedence = arg3;
+ object Answer = arg4;
+ object S = arg5;
+ Variable F = new Variable();
+ Variable Pos = new Variable();
+ Variable L1 = new Variable();
+ Variable O1 = new Variable();
+ Variable R1 = new Variable();
+ Variable L2 = new Variable();
+ Variable O2 = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new Functor2(@"/", F, Pos)))
+ {
+ foreach (bool l3 in ambigop(F, Precedence, L1, O1, R1, L2, O2))
+ {
+ foreach (bool l4 in prefix_is_atom(S1, Precedence))
+ {
+ foreach (bool l5 in exprtl(new ListPair(new Functor3(Atom.a(@"postfixop", Atom.a(@"")), new Functor2(@"/", F, Pos), L2, O2), S1), 0, Term, Precedence, Answer, S))
+ {
+ yield return false;
+ }
+ yield break;
+ }
+ foreach (bool l4 in exprtl(new ListPair(new Functor(Atom.a(@"infixop", Atom.a(@"")), new object[] { new Functor2(@"/", F, Pos), L1, O1, R1 }), S1), 0, Term, Precedence, Answer, S))
+ {
+ yield return false;
+ }
+ foreach (bool l4 in exprtl(new ListPair(new Functor3(Atom.a(@"postfixop", Atom.a(@"")), new Functor2(@"/", F, Pos), L2, O2), S1), 0, Term, Precedence, Answer, S))
+ {
+ yield return false;
+ }
+ yield break;
+ }
+ }
+ }
+ {
+ object Term = arg2;
+ object Precedence = arg3;
+ object Answer = arg4;
+ object S = arg5;
+ Variable F = new Variable();
+ Variable Pos = new Variable();
+ Variable L1 = new Variable();
+ Variable O1 = new Variable();
+ Variable R1 = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new Functor2(@"/", F, Pos)))
+ {
+ foreach (bool l3 in infixop(F, L1, O1, R1))
+ {
+ foreach (bool l4 in exprtl(new ListPair(new Functor(Atom.a(@"infixop", Atom.a(@"")), new object[] { new Functor2(@"/", F, Pos), L1, O1, R1 }), S1), 0, Term, Precedence, Answer, S))
+ {
+ yield return false;
+ }
+ yield break;
+ }
+ }
+ }
+ {
+ object Term = arg2;
+ object Precedence = arg3;
+ object Answer = arg4;
+ object S = arg5;
+ Variable F = new Variable();
+ Variable Pos = new Variable();
+ Variable L2 = new Variable();
+ Variable O2 = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new Functor2(@"/", F, Pos)))
+ {
+ foreach (bool l3 in postfixop(F, L2, O2))
+ {
+ foreach (bool l4 in exprtl(new ListPair(new Functor3(Atom.a(@"postfixop", Atom.a(@"")), new Functor2(@"/", F, Pos), L2, O2), S1), 0, Term, Precedence, Answer, S))
+ {
+ yield return false;
+ }
+ yield break;
+ }
+ }
+ }
+ {
+ object X = arg1;
+ object x2 = arg2;
+ object x3 = arg3;
+ object x4 = arg4;
+ object x5 = arg5;
+ Variable x7 = new Variable();
+ foreach (bool l2 in syntax_error(new ListPair(new Functor2(@"-", Atom.a(@"non"), Atom.a(@"operator")), new ListPair(X, new ListPair(Atom.a(@"follows"), new ListPair(Atom.a(@"expression"), Atom.NIL)))), new ListPair(new Functor2(@"atom", X, x7), S1)))
+ {
+ yield return false;
+ }
+ yield break;
+ }
+ }
+
+ public static IEnumerable cannot_follow(object Type, object Token, object Tokens)
+ {
+ {
+ foreach (bool l2 in syntax_error(new ListPair(Type, new ListPair(Atom.a(@"follows"), new ListPair(Atom.a(@"expression"), Atom.NIL))), new ListPair(Token, Tokens)))
+ {
+ yield return false;
+ }
+ }
+ }
+
+ public static IEnumerable exprtl(object arg1, object arg2, object arg3, object arg4, object arg5, object arg6)
+ {
+ {
+ object x1 = arg2;
+ object x3 = arg4;
+ Variable Term = new Variable();
+ foreach (bool l2 in YP.unify(arg1, Atom.NIL))
+ {
+ foreach (bool l3 in YP.unify(arg3, Term))
+ {
+ foreach (bool l4 in YP.unify(arg5, Term))
+ {
+ foreach (bool l5 in YP.unify(arg6, Atom.NIL))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+ }
+ {
+ object C = arg2;
+ object Term = arg3;
+ object Precedence = arg4;
+ object Answer = arg5;
+ object S = arg6;
+ Variable Token = new Variable();
+ Variable Tokens = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new ListPair(Token, Tokens)))
+ {
+ foreach (bool l3 in exprtl_7(Token, C, Term, Precedence, Answer, S, Tokens))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+
+ public static IEnumerable exprtl_7(object arg1, object arg2, object arg3, object arg4, object arg5, object arg6, object arg7)
+ {
+ {
+ object C = arg2;
+ object Term = arg3;
+ object Precedence = arg4;
+ object Answer = arg5;
+ object S = arg6;
+ object S1 = arg7;
+ Variable F = new Variable();
+ Variable Pos = new Variable();
+ Variable L = new Variable();
+ Variable O = new Variable();
+ Variable R = new Variable();
+ Variable Other = new Variable();
+ Variable S2 = new Variable();
+ Variable Expr = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new Functor(Atom.a(@"infixop", Atom.a(@"")), new object[] { new Functor2(@"/", F, Pos), L, O, R })))
+ {
+ if (YP.greaterThanOrEqual(Precedence, O))
+ {
+ if (YP.lessThanOrEqual(C, L))
+ {
+ foreach (bool l5 in parse(S1, R, Other, S2))
+ {
+ foreach (bool l6 in YP.univ(Expr, new ListPair(F, new ListPair(Pos, new ListPair(Term, new ListPair(Other, Atom.NIL))))))
+ {
+ foreach (bool l7 in exprtl(S2, O, Expr, Precedence, Answer, S))
+ {
+ yield return false;
+ }
+ }
+ }
+ yield break;
+ }
+ }
+ }
+ }
+ {
+ object C = arg2;
+ object Term = arg3;
+ object Precedence = arg4;
+ object Answer = arg5;
+ object S = arg6;
+ object S1 = arg7;
+ Variable F = new Variable();
+ Variable Pos = new Variable();
+ Variable L = new Variable();
+ Variable O = new Variable();
+ Variable Expr = new Variable();
+ Variable S2 = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new Functor3(Atom.a(@"postfixop", Atom.a(@"")), new Functor2(@"/", F, Pos), L, O)))
+ {
+ if (YP.greaterThanOrEqual(Precedence, O))
+ {
+ if (YP.lessThanOrEqual(C, L))
+ {
+ foreach (bool l5 in YP.univ(Expr, new ListPair(F, new ListPair(Pos, new ListPair(Term, Atom.NIL)))))
+ {
+ foreach (bool l6 in peepop(S1, S2))
+ {
+ foreach (bool l7 in exprtl(S2, O, Expr, Precedence, Answer, S))
+ {
+ yield return false;
+ }
+ }
+ }
+ yield break;
+ }
+ }
+ }
+ }
+ {
+ object C = arg2;
+ object Term = arg3;
+ object Precedence = arg4;
+ object Answer = arg5;
+ object S = arg6;
+ object S1 = arg7;
+ Variable Next = new Variable();
+ Variable S2 = new Variable();
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@",")))
+ {
+ if (YP.greaterThanOrEqual(Precedence, 1000))
+ {
+ if (YP.lessThan(C, 1000))
+ {
+ foreach (bool l5 in parse(S1, 1000, Next, S2))
+ {
+ foreach (bool l6 in exprtl(S2, 1000, new Functor2(@",", Term, Next), Precedence, Answer, S))
+ {
+ yield return false;
+ }
+ }
+ yield break;
+ }
+ }
+ }
+ }
+ {
+ object C = arg2;
+ object Term = arg3;
+ object Precedence = arg4;
+ object Answer = arg5;
+ object S = arg6;
+ object S1 = arg7;
+ Variable Next = new Variable();
+ Variable S2 = new Variable();
+ foreach (bool l2 in YP.unify(arg1, Atom.a(@"|")))
+ {
+ if (YP.greaterThanOrEqual(Precedence, 1100))
+ {
+ if (YP.lessThan(C, 1100))
+ {
+ foreach (bool l5 in parse(S1, 1100, Next, S2))
+ {
+ foreach (bool l6 in exprtl(S2, 1100, new Functor2(@";", Term, Next), Precedence, Answer, S))
+ {
+ yield return false;
+ }
+ }
+ yield break;
+ }
+ }
+ }
+ }
+ {
+ object Token = arg1;
+ object x2 = arg2;
+ object x4 = arg4;
+ object Tokens = arg7;
+ Variable Term = new Variable();
+ foreach (bool l2 in YP.unify(arg3, Term))
+ {
+ foreach (bool l3 in YP.unify(arg5, Term))
+ {
+ foreach (bool l4 in YP.unify(arg6, new ListPair(Token, Tokens)))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+ }
+
+ public static IEnumerable syntax_error(object _Message, object _List)
+ {
+ {
+ yield break;
+ }
+ }
+
+ public static IEnumerable syntax_error(object _List)
+ {
+ {
+ yield break;
+ }
+ }
+
+ public static IEnumerable prefixop(object F, object O, object Q)
+ {
+ {
+ foreach (bool l2 in YP.current_op(O, Atom.a(@"fx"), F))
+ {
+ foreach (bool l3 in YP.unify(Q, YP.subtract(O, 1)))
+ {
+ yield return false;
+ }
+ goto cutIf1;
+ }
+ foreach (bool l2 in YP.current_op(O, Atom.a(@"fy"), F))
+ {
+ foreach (bool l3 in YP.unify(Q, O))
+ {
+ yield return false;
+ }
+ goto cutIf2;
+ }
+ cutIf2:
+ cutIf1:
+ { }
+ }
+ }
+
+ public static IEnumerable postfixop(object F, object P, object O)
+ {
+ {
+ foreach (bool l2 in YP.current_op(O, Atom.a(@"xf"), F))
+ {
+ foreach (bool l3 in YP.unify(P, YP.subtract(O, 1)))
+ {
+ yield return false;
+ }
+ goto cutIf1;
+ }
+ foreach (bool l2 in YP.current_op(O, Atom.a(@"yf"), F))
+ {
+ foreach (bool l3 in YP.unify(P, O))
+ {
+ yield return false;
+ }
+ goto cutIf2;
+ }
+ cutIf2:
+ cutIf1:
+ { }
+ }
+ }
+
+ public static IEnumerable infixop(object F, object P, object O, object Q)
+ {
+ {
+ foreach (bool l2 in YP.current_op(O, Atom.a(@"xfy"), F))
+ {
+ foreach (bool l3 in YP.unify(P, YP.subtract(O, 1)))
+ {
+ foreach (bool l4 in YP.unify(Q, O))
+ {
+ yield return false;
+ }
+ }
+ goto cutIf1;
+ }
+ foreach (bool l2 in YP.current_op(O, Atom.a(@"xfx"), F))
+ {
+ foreach (bool l3 in YP.unify(P, YP.subtract(O, 1)))
+ {
+ foreach (bool l4 in YP.unify(Q, P))
+ {
+ yield return false;
+ }
+ }
+ goto cutIf2;
+ }
+ foreach (bool l2 in YP.current_op(O, Atom.a(@"yfx"), F))
+ {
+ foreach (bool l3 in YP.unify(Q, YP.subtract(O, 1)))
+ {
+ foreach (bool l4 in YP.unify(P, O))
+ {
+ yield return false;
+ }
+ }
+ goto cutIf3;
+ }
+ cutIf3:
+ cutIf2:
+ cutIf1:
+ { }
+ }
+ }
+
+ public static IEnumerable ambigop(object F, object Precedence, object L1, object O1, object R1, object L2, object O2)
+ {
+ {
+ foreach (bool l2 in postfixop(F, L2, O2))
+ {
+ if (YP.lessThanOrEqual(O2, Precedence))
+ {
+ foreach (bool l4 in infixop(F, L1, O1, R1))
+ {
+ if (YP.lessThanOrEqual(O1, Precedence))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ public static IEnumerable read_tokens1(object arg1)
+ {
+ {
+ object TokenList = arg1;
+ Variable C1 = new Variable();
+ Variable _X = new Variable();
+ Variable ListOfTokens = new Variable();
+ foreach (bool l2 in YP.get_code(C1))
+ {
+ foreach (bool l3 in read_tokens(C1, _X, ListOfTokens))
+ {
+ foreach (bool l4 in YP.unify(TokenList, ListOfTokens))
+ {
+ yield return false;
+ }
+ yield break;
+ }
+ }
+ }
+ {
+ foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"atom", Atom.a(@"end_of_file"), 0), Atom.NIL)))
+ {
+ yield return false;
+ }
+ }
+ }
+
+ public static IEnumerable read_tokens2(object arg1, object arg2)
+ {
+ {
+ object TokenList = arg1;
+ object Dictionary = arg2;
+ Variable C1 = new Variable();
+ Variable Dict = new Variable();
+ Variable ListOfTokens = new Variable();
+ foreach (bool l2 in YP.get_code(C1))
+ {
+ foreach (bool l3 in read_tokens(C1, Dict, ListOfTokens))
+ {
+ foreach (bool l4 in terminate_list(Dict))
+ {
+ foreach (bool l5 in YP.unify(Dictionary, Dict))
+ {
+ foreach (bool l6 in YP.unify(TokenList, ListOfTokens))
+ {
+ yield return false;
+ }
+ }
+ yield break;
+ }
+ }
+ }
+ }
+ {
+ foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"atom", Atom.a(@"end_of_file"), 0), Atom.NIL)))
+ {
+ foreach (bool l3 in YP.unify(arg2, Atom.NIL))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+
+ public static IEnumerable terminate_list(object arg1)
+ {
+ {
+ foreach (bool l2 in YP.unify(arg1, Atom.NIL))
+ {
+ yield return false;
+ }
+ }
+ {
+ Variable x1 = new Variable();
+ Variable Tail = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new ListPair(x1, Tail)))
+ {
+ foreach (bool l3 in terminate_list(Tail))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+
+ public static IEnumerable read_special(object arg1, object Dict, object arg3)
+ {
+ {
+ object Tokens = arg3;
+ foreach (bool l2 in YP.unify(arg1, 95))
+ {
+ foreach (bool l3 in read_variable(95, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object Tokens = arg3;
+ foreach (bool l2 in YP.unify(arg1, 247))
+ {
+ foreach (bool l3 in read_symbol(247, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object Tokens = arg3;
+ foreach (bool l2 in YP.unify(arg1, 215))
+ {
+ foreach (bool l3 in read_symbol(215, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ Variable StartPos = new Variable();
+ Variable EndPos = new Variable();
+ Variable Tokens = new Variable();
+ Variable Ch = new Variable();
+ Variable NextCh = new Variable();
+ foreach (bool l2 in YP.unify(arg1, 37))
+ {
+ foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2(@"comment", StartPos, EndPos), Tokens)))
+ {
+ foreach (bool l4 in get_current_position(StartPos))
+ {
+ foreach (bool l5 in YP.repeat())
+ {
+ foreach (bool l6 in YP.get_code(Ch))
+ {
+ if (YP.lessThan(Ch, new ListPair(32, Atom.NIL)))
+ {
+ if (YP.notEqual(Ch, 9))
+ {
+ if (YP.termNotEqual(Ch, -1))
+ {
+ foreach (bool l10 in get_current_position(EndPos))
+ {
+ foreach (bool l11 in YP.get_code(NextCh))
+ {
+ foreach (bool l12 in read_tokens(NextCh, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+ yield break;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ {
+ object T = arg3;
+ Variable C2 = new Variable();
+ Variable StartPos = new Variable();
+ Variable EndPos = new Variable();
+ Variable Tokens = new Variable();
+ Variable StartPos1 = new Variable();
+ Variable NextCh = new Variable();
+ Variable Chars = new Variable();
+ foreach (bool l2 in YP.unify(arg1, 47))
+ {
+ foreach (bool l3 in YP.get_code(C2))
+ {
+ if (YP.equal(C2, new ListPair(42, Atom.NIL)))
+ {
+ foreach (bool l5 in YP.unify(T, new ListPair(new Functor2(@"comment", StartPos, EndPos), Tokens)))
+ {
+ foreach (bool l6 in get_current_position(StartPos1))
+ {
+ foreach (bool l7 in YP.unify(StartPos, YP.subtract(StartPos1, 1)))
+ {
+ foreach (bool l8 in read_solidus(32, NextCh))
+ {
+ foreach (bool l9 in get_current_position(EndPos))
+ {
+ foreach (bool l10 in read_tokens(NextCh, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+ }
+ }
+ goto cutIf1;
+ }
+ foreach (bool l4 in YP.unify(T, Tokens))
+ {
+ foreach (bool l5 in rest_symbol(C2, Chars, NextCh))
+ {
+ foreach (bool l6 in read_after_atom4(NextCh, Dict, Tokens, new ListPair(47, Chars)))
+ {
+ yield return false;
+ }
+ }
+ }
+ cutIf1:
+ { }
+ }
+ }
+ }
+ {
+ Variable Pos = new Variable();
+ Variable Tokens = new Variable();
+ Variable NextCh = new Variable();
+ foreach (bool l2 in YP.unify(arg1, 33))
+ {
+ foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2(@"atom", Atom.a(@"!"), Pos), Tokens)))
+ {
+ foreach (bool l4 in get_current_position(Pos))
+ {
+ foreach (bool l5 in YP.get_code(NextCh))
+ {
+ foreach (bool l6 in read_after_atom(NextCh, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+ }
+ }
+ {
+ Variable Tokens = new Variable();
+ Variable NextCh = new Variable();
+ foreach (bool l2 in YP.unify(arg1, 40))
+ {
+ foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a(@" ("), Tokens)))
+ {
+ foreach (bool l4 in YP.get_code(NextCh))
+ {
+ foreach (bool l5 in read_tokens(NextCh, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+ }
+ {
+ Variable Tokens = new Variable();
+ Variable NextCh = new Variable();
+ foreach (bool l2 in YP.unify(arg1, 41))
+ {
+ foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a(@")"), Tokens)))
+ {
+ foreach (bool l4 in YP.get_code(NextCh))
+ {
+ foreach (bool l5 in read_tokens(NextCh, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+ }
+ {
+ Variable Tokens = new Variable();
+ Variable NextCh = new Variable();
+ foreach (bool l2 in YP.unify(arg1, 44))
+ {
+ foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a(@","), Tokens)))
+ {
+ foreach (bool l4 in YP.get_code(NextCh))
+ {
+ foreach (bool l5 in read_tokens(NextCh, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+ }
+ {
+ Variable Pos = new Variable();
+ Variable Tokens = new Variable();
+ Variable NextCh = new Variable();
+ foreach (bool l2 in YP.unify(arg1, 59))
+ {
+ foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2(@"atom", Atom.a(@";"), Pos), Tokens)))
+ {
+ foreach (bool l4 in get_current_position(Pos))
+ {
+ foreach (bool l5 in YP.get_code(NextCh))
+ {
+ foreach (bool l6 in read_after_atom(NextCh, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+ }
+ }
+ {
+ Variable Pos = new Variable();
+ Variable Tokens = new Variable();
+ Variable NextCh = new Variable();
+ foreach (bool l2 in YP.unify(arg1, 91))
+ {
+ foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2(@"/", Atom.a(@"["), Pos), Tokens)))
+ {
+ foreach (bool l4 in get_current_position(Pos))
+ {
+ foreach (bool l5 in YP.get_code(NextCh))
+ {
+ foreach (bool l6 in read_tokens(NextCh, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+ }
+ }
+ {
+ Variable Pos = new Variable();
+ Variable Tokens = new Variable();
+ Variable NextCh = new Variable();
+ foreach (bool l2 in YP.unify(arg1, 93))
+ {
+ foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2(@"/", Atom.a(@"]"), Pos), Tokens)))
+ {
+ foreach (bool l4 in get_current_position(Pos))
+ {
+ foreach (bool l5 in YP.get_code(NextCh))
+ {
+ foreach (bool l6 in read_after_atom(NextCh, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+ }
+ }
+ {
+ Variable Pos = new Variable();
+ Variable Tokens = new Variable();
+ Variable NextCh = new Variable();
+ foreach (bool l2 in YP.unify(arg1, 123))
+ {
+ foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2(@"/", Atom.a(@"{"), Pos), Tokens)))
+ {
+ foreach (bool l4 in get_current_position(Pos))
+ {
+ foreach (bool l5 in YP.get_code(NextCh))
+ {
+ foreach (bool l6 in read_tokens(NextCh, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+ }
+ }
+ {
+ Variable Tokens = new Variable();
+ Variable NextCh = new Variable();
+ foreach (bool l2 in YP.unify(arg1, 124))
+ {
+ foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a(@"|"), Tokens)))
+ {
+ foreach (bool l4 in YP.get_code(NextCh))
+ {
+ foreach (bool l5 in read_tokens(NextCh, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+ }
+ {
+ Variable Tokens = new Variable();
+ Variable NextCh = new Variable();
+ foreach (bool l2 in YP.unify(arg1, 125))
+ {
+ foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a(@"}"), Tokens)))
+ {
+ foreach (bool l4 in YP.get_code(NextCh))
+ {
+ foreach (bool l5 in read_after_atom(NextCh, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+ }
+ {
+ object Tokens = arg3;
+ Variable NextCh = new Variable();
+ foreach (bool l2 in YP.unify(arg1, 46))
+ {
+ foreach (bool l3 in YP.get_code(NextCh))
+ {
+ foreach (bool l4 in read_fullstop(NextCh, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+ {
+ Variable Chars = new Variable();
+ Variable Tokens = new Variable();
+ Variable NextCh = new Variable();
+ foreach (bool l2 in YP.unify(arg1, 34))
+ {
+ foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor1(@"string", Chars), Tokens)))
+ {
+ foreach (bool l4 in read_string(Chars, 34, NextCh))
+ {
+ foreach (bool l5 in read_tokens(NextCh, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+ }
+ {
+ object Tokens = arg3;
+ Variable Chars = new Variable();
+ Variable NextCh = new Variable();
+ foreach (bool l2 in YP.unify(arg1, 39))
+ {
+ foreach (bool l3 in read_string(Chars, 39, NextCh))
+ {
+ foreach (bool l4 in read_after_atom4(NextCh, Dict, Tokens, Chars))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+ {
+ object Tokens = arg3;
+ foreach (bool l2 in YP.unify(arg1, 35))
+ {
+ foreach (bool l3 in read_symbol(35, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object Tokens = arg3;
+ foreach (bool l2 in YP.unify(arg1, 36))
+ {
+ foreach (bool l3 in read_symbol(36, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object Tokens = arg3;
+ foreach (bool l2 in YP.unify(arg1, 38))
+ {
+ foreach (bool l3 in read_symbol(38, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object Tokens = arg3;
+ foreach (bool l2 in YP.unify(arg1, 42))
+ {
+ foreach (bool l3 in read_symbol(42, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object Tokens = arg3;
+ foreach (bool l2 in YP.unify(arg1, 43))
+ {
+ foreach (bool l3 in read_symbol(43, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object Tokens = arg3;
+ foreach (bool l2 in YP.unify(arg1, 45))
+ {
+ foreach (bool l3 in read_symbol(45, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object Tokens = arg3;
+ foreach (bool l2 in YP.unify(arg1, 58))
+ {
+ foreach (bool l3 in read_symbol(58, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object Tokens = arg3;
+ foreach (bool l2 in YP.unify(arg1, 60))
+ {
+ foreach (bool l3 in read_symbol(60, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object Tokens = arg3;
+ foreach (bool l2 in YP.unify(arg1, 61))
+ {
+ foreach (bool l3 in read_symbol(61, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object Tokens = arg3;
+ foreach (bool l2 in YP.unify(arg1, 62))
+ {
+ foreach (bool l3 in read_symbol(62, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object Tokens = arg3;
+ foreach (bool l2 in YP.unify(arg1, 63))
+ {
+ foreach (bool l3 in read_symbol(63, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object Tokens = arg3;
+ foreach (bool l2 in YP.unify(arg1, 64))
+ {
+ foreach (bool l3 in read_symbol(64, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object Tokens = arg3;
+ foreach (bool l2 in YP.unify(arg1, 92))
+ {
+ foreach (bool l3 in read_symbol(92, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object Tokens = arg3;
+ foreach (bool l2 in YP.unify(arg1, 94))
+ {
+ foreach (bool l3 in read_symbol(94, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object Tokens = arg3;
+ foreach (bool l2 in YP.unify(arg1, 96))
+ {
+ foreach (bool l3 in read_symbol(96, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object Tokens = arg3;
+ foreach (bool l2 in YP.unify(arg1, 126))
+ {
+ foreach (bool l3 in read_symbol(126, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+
+ public static IEnumerable read_symbol(object C1, object Dict, object Tokens)
+ {
+ {
+ Variable C2 = new Variable();
+ Variable Chars = new Variable();
+ Variable NextCh = new Variable();
+ foreach (bool l2 in YP.get_code(C2))
+ {
+ foreach (bool l3 in rest_symbol(C2, Chars, NextCh))
+ {
+ foreach (bool l4 in read_after_atom4(NextCh, Dict, Tokens, new ListPair(C1, Chars)))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+ }
+
+ public static IEnumerable rest_symbol(object arg1, object arg2, object arg3)
+ {
+ {
+ object C2 = arg1;
+ object LastCh = arg3;
+ Variable Chars = new Variable();
+ Variable NextCh = new Variable();
+ foreach (bool l2 in YP.unify(arg2, new ListPair(C2, Chars)))
+ {
+ if (YP.greaterThan(C2, 160))
+ {
+ if (YP.lessThan(C2, 192))
+ {
+ if (YP.notEqual(C2, 186))
+ {
+ if (YP.notEqual(C2, 170))
+ {
+ foreach (bool l7 in YP.get_code(NextCh))
+ {
+ foreach (bool l8 in rest_symbol(NextCh, Chars, LastCh))
+ {
+ yield return false;
+ }
+ }
+ yield break;
+ }
+ }
+ }
+ goto cutIf1;
+ }
+ foreach (bool l3 in symbol_char(C2))
+ {
+ foreach (bool l4 in YP.get_code(NextCh))
+ {
+ foreach (bool l5 in rest_symbol(NextCh, Chars, LastCh))
+ {
+ yield return false;
+ }
+ }
+ yield break;
+ }
+ cutIf1:
+ { }
+ }
+ }
+ {
+ Variable C2 = new Variable();
+ foreach (bool l2 in YP.unify(arg1, C2))
+ {
+ foreach (bool l3 in YP.unify(arg2, Atom.NIL))
+ {
+ foreach (bool l4 in YP.unify(arg3, C2))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+ }
+
+ public static IEnumerable symbol_char(object arg1)
+ {
+ {
+ foreach (bool l2 in YP.unify(arg1, 35))
+ {
+ yield return false;
+ }
+ }
+ {
+ foreach (bool l2 in YP.unify(arg1, 36))
+ {
+ yield return false;
+ }
+ }
+ {
+ foreach (bool l2 in YP.unify(arg1, 38))
+ {
+ yield return false;
+ }
+ }
+ {
+ foreach (bool l2 in YP.unify(arg1, 42))
+ {
+ yield return false;
+ }
+ }
+ {
+ foreach (bool l2 in YP.unify(arg1, 43))
+ {
+ yield return false;
+ }
+ }
+ {
+ foreach (bool l2 in YP.unify(arg1, 45))
+ {
+ yield return false;
+ }
+ }
+ {
+ foreach (bool l2 in YP.unify(arg1, 46))
+ {
+ yield return false;
+ }
+ }
+ {
+ foreach (bool l2 in YP.unify(arg1, 47))
+ {
+ yield return false;
+ }
+ }
+ {
+ foreach (bool l2 in YP.unify(arg1, 58))
+ {
+ yield return false;
+ }
+ }
+ {
+ foreach (bool l2 in YP.unify(arg1, 60))
+ {
+ yield return false;
+ }
+ }
+ {
+ foreach (bool l2 in YP.unify(arg1, 61))
+ {
+ yield return false;
+ }
+ }
+ {
+ foreach (bool l2 in YP.unify(arg1, 62))
+ {
+ yield return false;
+ }
+ }
+ {
+ foreach (bool l2 in YP.unify(arg1, 63))
+ {
+ yield return false;
+ }
+ }
+ {
+ foreach (bool l2 in YP.unify(arg1, 64))
+ {
+ yield return false;
+ }
+ }
+ {
+ foreach (bool l2 in YP.unify(arg1, 92))
+ {
+ yield return false;
+ }
+ }
+ {
+ foreach (bool l2 in YP.unify(arg1, 94))
+ {
+ yield return false;
+ }
+ }
+ {
+ foreach (bool l2 in YP.unify(arg1, 96))
+ {
+ yield return false;
+ }
+ }
+ {
+ foreach (bool l2 in YP.unify(arg1, 126))
+ {
+ yield return false;
+ }
+ }
+ }
+
+ public static IEnumerable get_current_position(object Pos)
+ {
+ {
+ foreach (bool l2 in YP.unify(Pos, 0))
+ {
+ yield return false;
+ }
+ }
+ }
+
+ public static IEnumerable read_after_atom4(object Ch, object Dict, object arg3, object Chars)
+ {
+ {
+ Variable Atom_1 = new Variable();
+ Variable Pos = new Variable();
+ Variable Tokens = new Variable();
+ foreach (bool l2 in YP.unify(arg3, new ListPair(new Functor2(@"atom", Atom_1, Pos), Tokens)))
+ {
+ foreach (bool l3 in YP.unify(Pos, 0))
+ {
+ foreach (bool l4 in YP.atom_codes(Atom_1, Chars))
+ {
+ foreach (bool l5 in read_after_atom(Ch, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ public static IEnumerable read_after_atom(object arg1, object Dict, object arg3)
+ {
+ {
+ Variable Tokens = new Variable();
+ Variable NextCh = new Variable();
+ foreach (bool l2 in YP.unify(arg1, 40))
+ {
+ foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a(@"("), Tokens)))
+ {
+ foreach (bool l4 in YP.get_code(NextCh))
+ {
+ foreach (bool l5 in read_tokens(NextCh, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ yield break;
+ }
+ }
+ }
+ {
+ object Ch = arg1;
+ object Tokens = arg3;
+ foreach (bool l2 in read_tokens(Ch, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ }
+
+ public static IEnumerable read_string(object Chars, object Quote, object NextCh)
+ {
+ {
+ Variable Ch = new Variable();
+ Variable Char = new Variable();
+ Variable Next = new Variable();
+ foreach (bool l2 in YP.get_code(Ch))
+ {
+ foreach (bool l3 in read_char(Ch, Quote, Char, Next))
+ {
+ foreach (bool l4 in rest_string5(Char, Next, Chars, Quote, NextCh))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+ }
+
+ public static IEnumerable rest_string5(object arg1, object arg2, object arg3, object arg4, object arg5)
+ {
+ {
+ object _X = arg4;
+ Variable NextCh = new Variable();
+ foreach (bool l2 in YP.unify(arg1, -1))
+ {
+ foreach (bool l3 in YP.unify(arg2, NextCh))
+ {
+ foreach (bool l4 in YP.unify(arg3, Atom.NIL))
+ {
+ foreach (bool l5 in YP.unify(arg5, NextCh))
+ {
+ yield return true;
+ yield break;
+ }
+ }
+ }
+ }
+ }
+ {
+ object Char = arg1;
+ object Next = arg2;
+ object Quote = arg4;
+ object NextCh = arg5;
+ Variable Chars = new Variable();
+ Variable Char2 = new Variable();
+ Variable Next2 = new Variable();
+ foreach (bool l2 in YP.unify(arg3, new ListPair(Char, Chars)))
+ {
+ foreach (bool l3 in read_char(Next, Quote, Char2, Next2))
+ {
+ foreach (bool l4 in rest_string5(Char2, Next2, Chars, Quote, NextCh))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+ }
+
+ public static IEnumerable escape_char(object arg1, object arg2)
+ {
+ {
+ foreach (bool l2 in YP.unify(arg1, 110))
+ {
+ foreach (bool l3 in YP.unify(arg2, 10))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ foreach (bool l2 in YP.unify(arg1, 78))
+ {
+ foreach (bool l3 in YP.unify(arg2, 10))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ foreach (bool l2 in YP.unify(arg1, 116))
+ {
+ foreach (bool l3 in YP.unify(arg2, 9))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ foreach (bool l2 in YP.unify(arg1, 84))
+ {
+ foreach (bool l3 in YP.unify(arg2, 9))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ foreach (bool l2 in YP.unify(arg1, 114))
+ {
+ foreach (bool l3 in YP.unify(arg2, 13))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ foreach (bool l2 in YP.unify(arg1, 82))
+ {
+ foreach (bool l3 in YP.unify(arg2, 13))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ foreach (bool l2 in YP.unify(arg1, 118))
+ {
+ foreach (bool l3 in YP.unify(arg2, 11))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ foreach (bool l2 in YP.unify(arg1, 86))
+ {
+ foreach (bool l3 in YP.unify(arg2, 11))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ foreach (bool l2 in YP.unify(arg1, 98))
+ {
+ foreach (bool l3 in YP.unify(arg2, 8))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ foreach (bool l2 in YP.unify(arg1, 66))
+ {
+ foreach (bool l3 in YP.unify(arg2, 8))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ foreach (bool l2 in YP.unify(arg1, 102))
+ {
+ foreach (bool l3 in YP.unify(arg2, 12))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ foreach (bool l2 in YP.unify(arg1, 70))
+ {
+ foreach (bool l3 in YP.unify(arg2, 12))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ foreach (bool l2 in YP.unify(arg1, 101))
+ {
+ foreach (bool l3 in YP.unify(arg2, 27))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ foreach (bool l2 in YP.unify(arg1, 69))
+ {
+ foreach (bool l3 in YP.unify(arg2, 27))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ foreach (bool l2 in YP.unify(arg1, 100))
+ {
+ foreach (bool l3 in YP.unify(arg2, 127))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ foreach (bool l2 in YP.unify(arg1, 68))
+ {
+ foreach (bool l3 in YP.unify(arg2, 127))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ foreach (bool l2 in YP.unify(arg1, 115))
+ {
+ foreach (bool l3 in YP.unify(arg2, 32))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ foreach (bool l2 in YP.unify(arg1, 83))
+ {
+ foreach (bool l3 in YP.unify(arg2, 32))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ foreach (bool l2 in YP.unify(arg1, 122))
+ {
+ foreach (bool l3 in YP.unify(arg2, -1))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ foreach (bool l2 in YP.unify(arg1, 90))
+ {
+ foreach (bool l3 in YP.unify(arg2, -1))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+
+ public static IEnumerable read_variable(object C1, object Dict, object arg3)
+ {
+ {
+ Variable Var = new Variable();
+ Variable Name = new Variable();
+ Variable StartPos = new Variable();
+ Variable Tokens = new Variable();
+ Variable Chars = new Variable();
+ Variable NextCh = new Variable();
+ foreach (bool l2 in YP.unify(arg3, new ListPair(new Functor3(@"var", Var, Name, StartPos), Tokens)))
+ {
+ foreach (bool l3 in get_current_position(StartPos))
+ {
+ foreach (bool l4 in read_name(C1, Chars, NextCh))
+ {
+ foreach (bool l5 in YP.atom_codes(Name, Chars))
+ {
+ if (YP.termEqual(Name, Atom.a(@"_")))
+ {
+ foreach (bool l7 in read_after_atom(NextCh, Dict, Tokens))
+ {
+ yield return false;
+ }
+ goto cutIf1;
+ }
+ foreach (bool l6 in read_lookup(Dict, Name, Var))
+ {
+ foreach (bool l7 in read_after_atom(NextCh, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ cutIf1:
+ { }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ public static IEnumerable read_lookup(object arg1, object Name, object Var)
+ {
+ {
+ Variable N = new Variable();
+ Variable V = new Variable();
+ Variable L = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"=", N, V), L)))
+ {
+ foreach (bool l3 in YP.unify(N, Name))
+ {
+ foreach (bool l4 in YP.unify(V, Var))
+ {
+ yield return false;
+ }
+ goto cutIf1;
+ }
+ foreach (bool l3 in read_lookup(L, Name, Var))
+ {
+ yield return false;
+ }
+ cutIf1:
+ { }
+ }
+ }
+ }
+
+ public static IEnumerable read_solidus(object Ch, object LastCh)
+ {
+ {
+ Variable NextCh = new Variable();
+ if (YP.equal(Ch, 42))
+ {
+ foreach (bool l3 in YP.get_code(NextCh))
+ {
+ if (YP.equal(NextCh, 47))
+ {
+ foreach (bool l5 in YP.get_code(LastCh))
+ {
+ yield return false;
+ }
+ goto cutIf2;
+ }
+ foreach (bool l4 in read_solidus(NextCh, LastCh))
+ {
+ yield return false;
+ }
+ cutIf2:
+ { }
+ }
+ goto cutIf1;
+ }
+ if (YP.notEqual(Ch, -1))
+ {
+ foreach (bool l3 in YP.get_code(NextCh))
+ {
+ foreach (bool l4 in read_solidus(NextCh, LastCh))
+ {
+ yield return false;
+ }
+ }
+ goto cutIf3;
+ }
+ foreach (bool l2 in YP.unify(LastCh, Ch))
+ {
+ foreach (bool l3 in formatError(Atom.a(@"user_error"), Atom.a(@"~N** end of file in /*comment~n"), Atom.NIL))
+ {
+ yield return false;
+ }
+ }
+ cutIf3:
+ cutIf1:
+ { }
+ }
+ }
+
+ public static IEnumerable read_identifier(object C1, object Dict, object Tokens)
+ {
+ {
+ Variable Chars = new Variable();
+ Variable NextCh = new Variable();
+ foreach (bool l2 in read_name(C1, Chars, NextCh))
+ {
+ foreach (bool l3 in read_after_atom4(NextCh, Dict, Tokens, Chars))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+
+ public static IEnumerable read_name(object C1, object arg2, object LastCh)
+ {
+ {
+ Variable Chars = new Variable();
+ Variable C2 = new Variable();
+ foreach (bool l2 in YP.unify(arg2, new ListPair(C1, Chars)))
+ {
+ foreach (bool l3 in YP.get_code(C2))
+ {
+ if (YP.greaterThanOrEqual(C2, new ListPair(97, Atom.NIL)))
+ {
+ if (YP.lessThanOrEqual(C2, new ListPair(122, Atom.NIL)))
+ {
+ foreach (bool l6 in read_name(C2, Chars, LastCh))
+ {
+ yield return false;
+ }
+ goto cutIf2;
+ }
+ if (YP.lessThan(C2, 192))
+ {
+ if (YP.notEqual(YP.bitwiseOr(C2, 16), 186))
+ {
+ foreach (bool l7 in YP.unify(Chars, Atom.NIL))
+ {
+ foreach (bool l8 in YP.unify(LastCh, C2))
+ {
+ yield return false;
+ }
+ }
+ goto cutIf3;
+ }
+ }
+ if (YP.equal(YP.bitwiseOr(C2, 32), 247))
+ {
+ foreach (bool l6 in YP.unify(Chars, Atom.NIL))
+ {
+ foreach (bool l7 in YP.unify(LastCh, C2))
+ {
+ yield return false;
+ }
+ }
+ goto cutIf4;
+ }
+ foreach (bool l5 in read_name(C2, Chars, LastCh))
+ {
+ yield return false;
+ }
+ cutIf4:
+ cutIf3:
+ cutIf2:
+ goto cutIf1;
+ }
+ if (YP.greaterThanOrEqual(C2, new ListPair(65, Atom.NIL)))
+ {
+ if (YP.greaterThan(C2, new ListPair(90, Atom.NIL)))
+ {
+ if (YP.notEqual(C2, new ListPair(95, Atom.NIL)))
+ {
+ foreach (bool l7 in YP.unify(Chars, Atom.NIL))
+ {
+ foreach (bool l8 in YP.unify(LastCh, C2))
+ {
+ yield return false;
+ }
+ }
+ goto cutIf6;
+ }
+ }
+ foreach (bool l5 in read_name(C2, Chars, LastCh))
+ {
+ yield return false;
+ }
+ cutIf6:
+ goto cutIf5;
+ }
+ if (YP.greaterThanOrEqual(C2, new ListPair(48, Atom.NIL)))
+ {
+ if (YP.lessThanOrEqual(C2, new ListPair(57, Atom.NIL)))
+ {
+ foreach (bool l6 in read_name(C2, Chars, LastCh))
+ {
+ yield return false;
+ }
+ goto cutIf7;
+ }
+ }
+ foreach (bool l4 in YP.unify(Chars, Atom.NIL))
+ {
+ foreach (bool l5 in YP.unify(LastCh, C2))
+ {
+ yield return false;
+ }
+ }
+ cutIf7:
+ cutIf5:
+ cutIf1:
+ { }
+ }
+ }
+ }
+ }
+
+ public static IEnumerable read_fullstop(object Ch, object Dict, object Tokens)
+ {
+ {
+ Variable Number = new Variable();
+ Variable Tokens1 = new Variable();
+ Variable Chars = new Variable();
+ Variable NextCh = new Variable();
+ if (YP.lessThanOrEqual(Ch, new ListPair(57, Atom.NIL)))
+ {
+ if (YP.greaterThanOrEqual(Ch, new ListPair(48, Atom.NIL)))
+ {
+ foreach (bool l4 in YP.unify(Tokens, new ListPair(new Functor1(@"number", Number), Tokens1)))
+ {
+ foreach (bool l5 in read_float(Number, Dict, Tokens1, new ListPair(48, Atom.NIL), Ch))
+ {
+ yield return false;
+ }
+ }
+ goto cutIf1;
+ }
+ }
+ if (YP.greaterThan(Ch, new ListPair(32, Atom.NIL)))
+ {
+ foreach (bool l3 in rest_symbol(Ch, Chars, NextCh))
+ {
+ foreach (bool l4 in read_after_atom4(NextCh, Dict, Tokens, new ListPair(46, Chars)))
+ {
+ yield return false;
+ }
+ }
+ goto cutIf2;
+ }
+ if (YP.greaterThanOrEqual(Ch, 0))
+ {
+ foreach (bool l3 in YP.unify(Tokens, Atom.NIL))
+ {
+ yield return false;
+ }
+ goto cutIf3;
+ }
+ foreach (bool l2 in formatError(Atom.a(@"user_error"), Atom.a(@"~N** end of file just after full stop~n"), Atom.NIL))
+ {
+ }
+ cutIf3:
+ cutIf2:
+ cutIf1:
+ { }
+ }
+ }
+
+ public static IEnumerable read_float(object Number, object Dict, object Tokens, object Digits, object Digit)
+ {
+ {
+ Variable Chars = new Variable();
+ Variable Rest = new Variable();
+ Variable NextCh = new Variable();
+ foreach (bool l2 in prepend(Digits, Chars, Rest))
+ {
+ foreach (bool l3 in read_float(Digit, Rest, NextCh, Chars))
+ {
+ foreach (bool l4 in YP.number_codes(Number, Chars))
+ {
+ foreach (bool l5 in read_tokens(NextCh, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ public static IEnumerable prepend(object arg1, object arg2, object arg3)
+ {
+ {
+ object X = arg3;
+ foreach (bool l2 in YP.unify(arg1, Atom.NIL))
+ {
+ foreach (bool l3 in YP.unify(arg2, new ListPair(46, X)))
+ {
+ yield return false;
+ }
+ }
+ }
+ {
+ object Y = arg3;
+ Variable C = new Variable();
+ Variable Cs = new Variable();
+ Variable X = new Variable();
+ foreach (bool l2 in YP.unify(arg1, new ListPair(C, Cs)))
+ {
+ foreach (bool l3 in YP.unify(arg2, new ListPair(C, X)))
+ {
+ foreach (bool l4 in prepend(Cs, X, Y))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+ }
+
+ public static IEnumerable read_float(object C1, object arg2, object NextCh, object Total)
+ {
+ {
+ Variable Chars = new Variable();
+ Variable C2 = new Variable();
+ Variable C3 = new Variable();
+ Variable C4 = new Variable();
+ Variable More = new Variable();
+ foreach (bool l2 in YP.unify(arg2, new ListPair(C1, Chars)))
+ {
+ foreach (bool l3 in YP.get_code(C2))
+ {
+ if (YP.greaterThanOrEqual(C2, new ListPair(48, Atom.NIL)))
+ {
+ if (YP.lessThanOrEqual(C2, new ListPair(57, Atom.NIL)))
+ {
+ foreach (bool l6 in read_float(C2, Chars, NextCh, Total))
+ {
+ yield return false;
+ }
+ goto cutIf1;
+ }
+ }
+ if (YP.equal(YP.bitwiseOr(C2, 32), new ListPair(101, Atom.NIL)))
+ {
+ foreach (bool l5 in YP.get_code(C3))
+ {
+ if (YP.equal(C3, new ListPair(45, Atom.NIL)))
+ {
+ foreach (bool l7 in YP.get_code(C4))
+ {
+ foreach (bool l8 in YP.unify(Chars, new ListPair(C2, new ListPair(45, More))))
+ {
+ if (YP.greaterThanOrEqual(C4, new ListPair(48, Atom.NIL)))
+ {
+ if (YP.lessThanOrEqual(C4, new ListPair(57, Atom.NIL)))
+ {
+ foreach (bool l11 in read_exponent(C4, More, NextCh))
+ {
+ yield return false;
+ }
+ goto cutIf4;
+ }
+ }
+ foreach (bool l9 in YP.unify(More, Atom.NIL))
+ {
+ foreach (bool l10 in formatError(Atom.a(@"user_error"), Atom.a(@"~N** Missing exponent in ~s~n"), new ListPair(Total, Atom.NIL)))
+ {
+ }
+ }
+ foreach (bool l9 in YP.unify(More, new ListPair(48, Atom.NIL)))
+ {
+ foreach (bool l10 in YP.unify(NextCh, C4))
+ {
+ yield return false;
+ }
+ }
+ cutIf4:
+ { }
+ }
+ }
+ goto cutIf3;
+ }
+ if (YP.equal(C3, new ListPair(43, Atom.NIL)))
+ {
+ foreach (bool l7 in YP.get_code(C4))
+ {
+ foreach (bool l8 in YP.unify(Chars, new ListPair(C2, More)))
+ {
+ if (YP.greaterThanOrEqual(C4, new ListPair(48, Atom.NIL)))
+ {
+ if (YP.lessThanOrEqual(C4, new ListPair(57, Atom.NIL)))
+ {
+ foreach (bool l11 in read_exponent(C4, More, NextCh))
+ {
+ yield return false;
+ }
+ goto cutIf6;
+ }
+ }
+ foreach (bool l9 in YP.unify(More, Atom.NIL))
+ {
+ foreach (bool l10 in formatError(Atom.a(@"user_error"), Atom.a(@"~N** Missing exponent in ~s~n"), new ListPair(Total, Atom.NIL)))
+ {
+ }
+ }
+ foreach (bool l9 in YP.unify(More, new ListPair(48, Atom.NIL)))
+ {
+ foreach (bool l10 in YP.unify(NextCh, C4))
+ {
+ yield return false;
+ }
+ }
+ cutIf6:
+ { }
+ }
+ }
+ goto cutIf5;
+ }
+ foreach (bool l6 in YP.unify(C4, C3))
+ {
+ foreach (bool l7 in YP.unify(Chars, new ListPair(C2, More)))
+ {
+ if (YP.greaterThanOrEqual(C4, new ListPair(48, Atom.NIL)))
+ {
+ if (YP.lessThanOrEqual(C4, new ListPair(57, Atom.NIL)))
+ {
+ foreach (bool l10 in read_exponent(C4, More, NextCh))
+ {
+ yield return false;
+ }
+ goto cutIf7;
+ }
+ }
+ foreach (bool l8 in YP.unify(More, Atom.NIL))
+ {
+ foreach (bool l9 in formatError(Atom.a(@"user_error"), Atom.a(@"~N** Missing exponent in ~s~n"), new ListPair(Total, Atom.NIL)))
+ {
+ }
+ }
+ foreach (bool l8 in YP.unify(More, new ListPair(48, Atom.NIL)))
+ {
+ foreach (bool l9 in YP.unify(NextCh, C4))
+ {
+ yield return false;
+ }
+ }
+ cutIf7:
+ { }
+ }
+ }
+ cutIf5:
+ cutIf3:
+ { }
+ }
+ goto cutIf2;
+ }
+ foreach (bool l4 in YP.unify(Chars, Atom.NIL))
+ {
+ foreach (bool l5 in YP.unify(NextCh, C2))
+ {
+ yield return false;
+ }
+ }
+ cutIf2:
+ cutIf1:
+ { }
+ }
+ }
+ }
+ }
+
+ public static IEnumerable read_exponent(object C1, object arg2, object NextCh)
+ {
+ {
+ Variable Chars = new Variable();
+ Variable C2 = new Variable();
+ foreach (bool l2 in YP.unify(arg2, new ListPair(C1, Chars)))
+ {
+ foreach (bool l3 in YP.get_code(C2))
+ {
+ if (YP.greaterThanOrEqual(C2, new ListPair(48, Atom.NIL)))
+ {
+ if (YP.lessThanOrEqual(C2, new ListPair(57, Atom.NIL)))
+ {
+ foreach (bool l6 in read_exponent(C2, Chars, NextCh))
+ {
+ yield return false;
+ }
+ goto cutIf1;
+ }
+ }
+ foreach (bool l4 in YP.unify(Chars, Atom.NIL))
+ {
+ foreach (bool l5 in YP.unify(NextCh, C2))
+ {
+ yield return false;
+ }
+ }
+ cutIf1:
+ { }
+ }
+ }
+ }
+ }
+
+ public static IEnumerable read_number(object C1, object Dict, object arg3)
+ {
+ {
+ Variable Number = new Variable();
+ Variable Tokens = new Variable();
+ Variable C2 = new Variable();
+ Variable N = new Variable();
+ Variable C = new Variable();
+ Variable C3 = new Variable();
+ Variable Digits = new Variable();
+ foreach (bool l2 in YP.unify(arg3, new ListPair(new Functor1(@"number", Number), Tokens)))
+ {
+ foreach (bool l3 in read_number4(C1, C2, 0, N))
+ {
+ if (YP.equal(C2, 39))
+ {
+ if (YP.greaterThanOrEqual(N, 2))
+ {
+ if (YP.lessThanOrEqual(N, 36))
+ {
+ foreach (bool l7 in read_based(N, 0, Number, C))
+ {
+ foreach (bool l8 in read_tokens(C, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ goto cutIf2;
+ }
+ }
+ if (YP.equal(N, 0))
+ {
+ foreach (bool l6 in YP.get_code(C3))
+ {
+ foreach (bool l7 in read_char(C3, -1, Number, C))
+ {
+ foreach (bool l8 in read_tokens(C, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ }
+ goto cutIf3;
+ }
+ foreach (bool l5 in formatError(Atom.a(@"user_error"), Atom.a(@"~N** ~d' read as ~d '~n"), new ListPair(N, new ListPair(N, Atom.NIL))))
+ {
+ foreach (bool l6 in YP.unify(Number, N))
+ {
+ foreach (bool l7 in YP.unify(C, C2))
+ {
+ foreach (bool l8 in read_tokens(C, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ }
+ }
+ cutIf3:
+ cutIf2:
+ goto cutIf1;
+ }
+ if (YP.equal(C2, 46))
+ {
+ foreach (bool l5 in YP.get_code(C3))
+ {
+ if (YP.greaterThanOrEqual(C3, new ListPair(48, Atom.NIL)))
+ {
+ if (YP.lessThanOrEqual(C3, new ListPair(57, Atom.NIL)))
+ {
+ foreach (bool l8 in YP.number_codes(N, Digits))
+ {
+ foreach (bool l9 in read_float(Number, Dict, Tokens, Digits, C3))
+ {
+ yield return false;
+ }
+ }
+ goto cutIf5;
+ }
+ }
+ foreach (bool l6 in YP.unify(Number, N))
+ {
+ foreach (bool l7 in read_fullstop(C3, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ cutIf5:
+ { }
+ }
+ goto cutIf4;
+ }
+ foreach (bool l4 in YP.unify(Number, N))
+ {
+ foreach (bool l5 in read_tokens(C2, Dict, Tokens))
+ {
+ yield return false;
+ }
+ }
+ cutIf4:
+ cutIf1:
+ { }
+ }
+ }
+ }
+ }
+
+ public static IEnumerable read_number4(object C0, object C, object N0, object N)
+ {
+ {
+ Variable N1 = new Variable();
+ Variable C1 = new Variable();
+ if (YP.greaterThanOrEqual(C0, new ListPair(48, Atom.NIL)))
+ {
+ if (YP.lessThanOrEqual(C0, new ListPair(57, Atom.NIL)))
+ {
+ foreach (bool l4 in YP.unify(N1, YP.add(YP.subtract(YP.multiply(N0, 10), new ListPair(48, Atom.NIL)), C0)))
+ {
+ foreach (bool l5 in YP.get_code(C1))
+ {
+ foreach (bool l6 in read_number4(C1, C, N1, N))
+ {
+ yield return false;
+ }
+ }
+ }
+ goto cutIf1;
+ }
+ }
+ if (YP.equal(C0, 95))
+ {
+ foreach (bool l3 in YP.get_code(C1))
+ {
+ foreach (bool l4 in read_number4(C1, C, N0, N))
+ {
+ yield return false;
+ }
+ }
+ goto cutIf2;
+ }
+ foreach (bool l2 in YP.unify(C, C0))
+ {
+ foreach (bool l3 in YP.unify(N, N0))
+ {
+ yield return false;
+ }
+ }
+ cutIf2:
+ cutIf1:
+ { }
+ }
+ }
+
+ public static IEnumerable read_based(object Base, object N0, object N, object C)
+ {
+ {
+ Variable C1 = new Variable();
+ Variable Digit = new Variable();
+ Variable N1 = new Variable();
+ foreach (bool l2 in YP.get_code(C1))
+ {
+ if (YP.greaterThanOrEqual(C1, new ListPair(48, Atom.NIL)))
+ {
+ if (YP.lessThanOrEqual(C1, new ListPair(57, Atom.NIL)))
+ {
+ foreach (bool l5 in YP.unify(Digit, YP.subtract(C1, new ListPair(48, Atom.NIL))))
+ {
+ if (YP.lessThan(Digit, Base))
+ {
+ foreach (bool l7 in YP.unify(N1, YP.add(YP.multiply(N0, Base), Digit)))
+ {
+ foreach (bool l8 in read_based(Base, N1, N, C))
+ {
+ yield return false;
+ }
+ }
+ goto cutIf2;
+ }
+ if (YP.equal(C1, new ListPair(95, Atom.NIL)))
+ {
+ foreach (bool l7 in read_based(Base, N0, N, C))
+ {
+ yield return false;
+ }
+ goto cutIf3;
+ }
+ foreach (bool l6 in YP.unify(N, N0))
+ {
+ foreach (bool l7 in YP.unify(C, C1))
+ {
+ yield return false;
+ }
+ }
+ cutIf3:
+ cutIf2:
+ { }
+ }
+ goto cutIf1;
+ }
+ }
+ if (YP.greaterThanOrEqual(C1, new ListPair(65, Atom.NIL)))
+ {
+ if (YP.lessThanOrEqual(C1, new ListPair(90, Atom.NIL)))
+ {
+ foreach (bool l5 in YP.unify(Digit, YP.subtract(C1, YP.subtract(new ListPair(65, Atom.NIL), 10))))
+ {
+ if (YP.lessThan(Digit, Base))
+ {
+ foreach (bool l7 in YP.unify(N1, YP.add(YP.multiply(N0, Base), Digit)))
+ {
+ foreach (bool l8 in read_based(Base, N1, N, C))
+ {
+ yield return false;
+ }
+ }
+ goto cutIf5;
+ }
+ if (YP.equal(C1, new ListPair(95, Atom.NIL)))
+ {
+ foreach (bool l7 in read_based(Base, N0, N, C))
+ {
+ yield return false;
+ }
+ goto cutIf6;
+ }
+ foreach (bool l6 in YP.unify(N, N0))
+ {
+ foreach (bool l7 in YP.unify(C, C1))
+ {
+ yield return false;
+ }
+ }
+ cutIf6:
+ cutIf5:
+ { }
+ }
+ goto cutIf4;
+ }
+ }
+ if (YP.greaterThanOrEqual(C1, new ListPair(97, Atom.NIL)))
+ {
+ if (YP.lessThanOrEqual(C1, new ListPair(122, Atom.NIL)))
+ {
+ foreach (bool l5 in YP.unify(Digit, YP.subtract(C1, YP.subtract(new ListPair(97, Atom.NIL), 10))))
+ {
+ if (YP.lessThan(Digit, Base))
+ {
+ foreach (bool l7 in YP.unify(N1, YP.add(YP.multiply(N0, Base), Digit)))
+ {
+ foreach (bool l8 in read_based(Base, N1, N, C))
+ {
+ yield return false;
+ }
+ }
+ goto cutIf8;
+ }
+ if (YP.equal(C1, new ListPair(95, Atom.NIL)))
+ {
+ foreach (bool l7 in read_based(Base, N0, N, C))
+ {
+ yield return false;
+ }
+ goto cutIf9;
+ }
+ foreach (bool l6 in YP.unify(N, N0))
+ {
+ foreach (bool l7 in YP.unify(C, C1))
+ {
+ yield return false;
+ }
+ }
+ cutIf9:
+ cutIf8:
+ { }
+ }
+ goto cutIf7;
+ }
+ }
+ foreach (bool l3 in YP.unify(Digit, 99))
+ {
+ if (YP.lessThan(Digit, Base))
+ {
+ foreach (bool l5 in YP.unify(N1, YP.add(YP.multiply(N0, Base), Digit)))
+ {
+ foreach (bool l6 in read_based(Base, N1, N, C))
+ {
+ yield return false;
+ }
+ }
+ goto cutIf10;
+ }
+ if (YP.equal(C1, new ListPair(95, Atom.NIL)))
+ {
+ foreach (bool l5 in read_based(Base, N0, N, C))
+ {
+ yield return false;
+ }
+ goto cutIf11;
+ }
+ foreach (bool l4 in YP.unify(N, N0))
+ {
+ foreach (bool l5 in YP.unify(C, C1))
+ {
+ yield return false;
+ }
+ }
+ cutIf11:
+ cutIf10:
+ { }
+ }
+ cutIf7:
+ cutIf4:
+ cutIf1:
+ { }
+ }
+ }
+ }
+
+ public static IEnumerable read_char(object Char, object Quote, object Result, object Next)
+ {
+ {
+ Variable C1 = new Variable();
+ Variable C2 = new Variable();
+ Variable C3 = new Variable();
+ Variable Ch = new Variable();
+ if (YP.equal(Char, 92))
+ {
+ foreach (bool l3 in YP.get_code(C1))
+ {
+ if (YP.lessThan(C1, 0))
+ {
+ foreach (bool l5 in formatError(Atom.a(@"user_error"), Atom.a(@"~N** end of file in ~cquoted~c~n"), new ListPair(Quote, new ListPair(Quote, Atom.NIL))))
+ {
+ foreach (bool l6 in YP.unify(Result, -1))
+ {
+ foreach (bool l7 in YP.unify(Next, C1))
+ {
+ yield return false;
+ }
+ }
+ }
+ goto cutIf2;
+ }
+ if (YP.lessThanOrEqual(C1, new ListPair(32, Atom.NIL)))
+ {
+ foreach (bool l5 in YP.get_code(C2))
+ {
+ foreach (bool l6 in read_char(C2, Quote, Result, Next))
+ {
+ yield return false;
+ }
+ }
+ goto cutIf3;
+ }
+ if (YP.equal(YP.bitwiseOr(C1, 32), new ListPair(99, Atom.NIL)))
+ {
+ foreach (bool l5 in YP.get_code(C2))
+ {
+ foreach (bool l6 in read_char(C2, Quote, Result, Next))
+ {
+ yield return false;
+ }
+ }
+ goto cutIf4;
+ }
+ if (YP.lessThanOrEqual(C1, new ListPair(55, Atom.NIL)))
+ {
+ if (YP.greaterThanOrEqual(C1, new ListPair(48, Atom.NIL)))
+ {
+ foreach (bool l6 in YP.get_code(C2))
+ {
+ if (YP.lessThanOrEqual(C2, new ListPair(55, Atom.NIL)))
+ {
+ if (YP.greaterThanOrEqual(C2, new ListPair(48, Atom.NIL)))
+ {
+ foreach (bool l9 in YP.get_code(C3))
+ {
+ if (YP.lessThanOrEqual(C3, new ListPair(55, Atom.NIL)))
+ {
+ if (YP.greaterThanOrEqual(C3, new ListPair(48, Atom.NIL)))
+ {
+ foreach (bool l12 in YP.get_code(Next))
+ {
+ foreach (bool l13 in YP.unify(Result, YP.subtract(YP.add(YP.multiply(YP.add(YP.multiply(C1, 8), C2), 8), C3), YP.multiply(73, new ListPair(48, Atom.NIL)))))
+ {
+ yield return false;
+ }
+ }
+ goto cutIf7;
+ }
+ }
+ foreach (bool l10 in YP.unify(Next, C3))
+ {
+ foreach (bool l11 in YP.unify(Result, YP.subtract(YP.add(YP.multiply(C1, 8), C2), YP.multiply(9, new ListPair(48, Atom.NIL)))))
+ {
+ yield return false;
+ }
+ }
+ cutIf7:
+ { }
+ }
+ goto cutIf6;
+ }
+ }
+ foreach (bool l7 in YP.unify(Next, C2))
+ {
+ foreach (bool l8 in YP.unify(Result, YP.subtract(C1, new ListPair(48, Atom.NIL))))
+ {
+ yield return false;
+ }
+ }
+ cutIf6:
+ { }
+ }
+ goto cutIf5;
+ }
+ }
+ if (YP.equal(C1, new ListPair(94, Atom.NIL)))
+ {
+ foreach (bool l5 in YP.get_code(C2))
+ {
+ if (YP.lessThan(C2, 0))
+ {
+ foreach (bool l7 in formatError(Atom.a(@"user_error"), Atom.a(@"~N** end of file in ~c..~c^..~c~n"), new ListPair(Quote, new ListPair(92, new ListPair(Quote, Atom.NIL)))))
+ {
+ foreach (bool l8 in YP.unify(Result, -1))
+ {
+ foreach (bool l9 in YP.unify(Next, C2))
+ {
+ yield return false;
+ }
+ }
+ }
+ goto cutIf9;
+ }
+ if (YP.equal(C2, new ListPair(63, Atom.NIL)))
+ {
+ foreach (bool l7 in YP.unify(Result, 127))
+ {
+ foreach (bool l8 in YP.get_code(Next))
+ {
+ yield return false;
+ }
+ }
+ goto cutIf10;
+ }
+ foreach (bool l6 in YP.unify(Result, YP.bitwiseAnd(C2, 31)))
+ {
+ foreach (bool l7 in YP.get_code(Next))
+ {
+ yield return false;
+ }
+ }
+ cutIf10:
+ cutIf9:
+ { }
+ }
+ goto cutIf8;
+ }
+ foreach (bool l4 in escape_char(C1, Result))
+ {
+ foreach (bool l5 in YP.get_code(Next))
+ {
+ yield return false;
+ }
+ goto cutIf11;
+ }
+ foreach (bool l4 in YP.unify(Result, C1))
+ {
+ foreach (bool l5 in YP.get_code(Next))
+ {
+ yield return false;
+ }
+ }
+ cutIf11:
+ cutIf8:
+ cutIf5:
+ cutIf4:
+ cutIf3:
+ cutIf2:
+ { }
+ }
+ goto cutIf1;
+ }
+ if (YP.equal(Char, Quote))
+ {
+ foreach (bool l3 in YP.get_code(Ch))
+ {
+ if (YP.equal(Ch, Quote))
+ {
+ foreach (bool l5 in YP.unify(Result, Quote))
+ {
+ foreach (bool l6 in YP.get_code(Next))
+ {
+ yield return false;
+ }
+ }
+ goto cutIf13;
+ }
+ foreach (bool l4 in YP.unify(Result, -1))
+ {
+ foreach (bool l5 in YP.unify(Next, Ch))
+ {
+ yield return false;
+ }
+ }
+ cutIf13:
+ { }
+ }
+ goto cutIf12;
+ }
+ if (YP.lessThan(Char, new ListPair(32, Atom.NIL)))
+ {
+ if (YP.notEqual(Char, 9))
+ {
+ if (YP.notEqual(Char, 10))
+ {
+ if (YP.notEqual(Char, 13))
+ {
+ foreach (bool l6 in YP.unify(Result, -1))
+ {
+ foreach (bool l7 in YP.unify(Next, Char))
+ {
+ foreach (bool l8 in formatError(Atom.a(@"user_error"), Atom.a(@"~N** Strange character ~d ends ~ctoken~c~n"), new ListPair(Char, new ListPair(Quote, new ListPair(Quote, Atom.NIL)))))
+ {
+ yield return false;
+ }
+ }
+ }
+ goto cutIf14;
+ }
+ }
+ }
+ }
+ foreach (bool l2 in YP.unify(Result, Char))
+ {
+ foreach (bool l3 in YP.get_code(Next))
+ {
+ yield return false;
+ }
+ }
+ cutIf14:
+ cutIf12:
+ cutIf1:
+ { }
+ }
+ }
+
+ }
+}
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/PrologException.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/PrologException.cs
index ffb8ddc..63b304a 100644
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/PrologException.cs
+++ b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/PrologException.cs
@@ -1,71 +1,71 @@
-/*
- * Copyright (C) 2007-2008, Jeff Thompson
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of the copyright holder nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-using System;
-
-namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog
-{
- ///
- /// A PrologException is used as the exception thrown by YP.throw(Term).
- ///
- public class PrologException : Exception
- {
- public readonly object _term;
-
- ///
- /// Create a PrologException with the given Term. The printable exception message is the full Term.
- ///
- /// the term of the exception
- ///
- public PrologException(object Term)
- : base(YP.getValue(Term).ToString())
- {
- _term = YP.makeCopy(Term, new Variable.CopyStore());
- }
-
- ///
- /// Create a PrologException where the Term is error(ErrorTerm, Message).
- /// This uses YP.makeCopy to copy the ErrorTerm and Message so that they are valid after unbinding.
- ///
- /// the term of the exception
- /// the message, converted to a string, to use as the printable exception message
- ///
- public PrologException(object ErrorTerm, object Message)
- : base(YP.getValue(Message).ToString())
- {
- _term = YP.makeCopy(new Functor2(Atom.a("error"), ErrorTerm, Message), new Variable.CopyStore());
- }
-
- public object Term
- {
- get { return _term; }
- }
- }
-}
+/*
+ * Copyright (C) 2007-2008, Jeff Thompson
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the copyright holder nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+using System;
+
+namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog
+{
+ ///
+ /// A PrologException is used as the exception thrown by YP.throw(Term).
+ ///
+ public class PrologException : Exception
+ {
+ public readonly object _term;
+
+ ///
+ /// Create a PrologException with the given Term. The printable exception message is the full Term.
+ ///
+ /// the term of the exception
+ ///
+ public PrologException(object Term)
+ : base(YP.getValue(Term).ToString())
+ {
+ _term = YP.makeCopy(Term, new Variable.CopyStore());
+ }
+
+ ///
+ /// Create a PrologException where the Term is error(ErrorTerm, Message).
+ /// This uses YP.makeCopy to copy the ErrorTerm and Message so that they are valid after unbinding.
+ ///
+ /// the term of the exception
+ /// the message, converted to a string, to use as the printable exception message
+ ///
+ public PrologException(object ErrorTerm, object Message)
+ : base(YP.getValue(Message).ToString())
+ {
+ _term = YP.makeCopy(new Functor2(Atom.a("error"), ErrorTerm, Message), new Variable.CopyStore());
+ }
+
+ public object Term
+ {
+ get { return _term; }
+ }
+ }
+}
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/README.TXT b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/README.TXT
index 05186f1..a1beeb6 100644
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/README.TXT
+++ b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/README.TXT
@@ -1,405 +1,405 @@
-YPOS: YieldProlog for OpenSim
-
- a compiler from Prolog to OpenSim compatible C# scripts
-
-Ported by Kino Coursey and Douglas Miles at Daxtron Labs.
-Based on Jeff Thompson Yield Prolog, http://yieldprolog.sourceforge.net/
-For Prolog see http://en.wikipedia.org/wiki/Prolog
-
-
-INTRODUCTION
-
-This folder contains code to implement a Prolog compiler using the "Yield Statement" found in C#, Javascript, and Python.
-The original Yield Prolog system can transform Prolog programs into C# code.
-In this system we detect and extract YieldProlog code (with "//YP" as the first four characters in the script) and seperate it from any c# code ("marked by "//CS").
-The YP code is transformed to C# and prepended to the "//CS" section, and passed as a bundel to the existing C# compiler.
-The end result is Prolog can interface to OpenSim using the existing "//CS" functionality, and C# can call the compiled Prolog.
-As such YP allows both declaritive and procedural programming in a 3D script enabled environment.
-
-FEATURES
-* Allows implementation of logic programming for objects and agents.
-* C#/Javascript/Python as intermediate language
-* Yield Prolog has relatively high speed of execution which is important in OpenSim. http://yieldprolog.sourceforge.net/benchmarks.html
-* It is compatable with the existing C#/Mono based system.
-* Yield Prolog is BSD license
-* Calling Prolog from C# scripts
-* Calling C# functions (with LSL and OS functions) from Prolog
-* Prolog dynamic database
-* Edinburgh, Cocksin & Mellish style syntax.
-* Compiler is generated by compiling the Prolog descrition of itself into C#
-* Same script entry interface as LSL
-
-
-TODO
-* Utilize ability to generate Javascript and Python code
-* Integrate Prolog database with Sim
-* Translation error reporting back to the editor
-* Communications via message passing
-* Interface to external inference engines
-
-POSSIBILITIES
-* Inworld expert systems
-* Parallel logic programming and expert systems
-* Ontology based processing
-* Knowledge based alerting, accessing and business rules
- For instance, listen on channel x, filter the events and broadcast alerts on channel y
- or send IM, emails etc.
-
-
-USAGE:
-
-Add "yp" as an allowed compiler
-
-OpenSim.ini
-[ScriptEngine.DotNetEngine]
-AllowedCompilers=lsl,cs,js,vb,yp
-
-Enter scripts using the inworld editing process. Scripts have the following format.
-The first line of a file must have "//yp".
-
-//yp
-
-//CS
-
-
-
-
-
-
-
-C# code calling a Prolog Predicate:
------------------------------------
-The Prolog predicate is transformed into a C# boolean function. So the general calling format is:
- foreach( bool var in prolog_predicate(ARGS)) {};
-
-I/O is via using a string reader and writer in conjunction with YP.See() and YP.Tell()
-
- StringWriter PrologOutuput= new StringWriter();
- StringReader PrologInput= new StringReader(myInputString);
- YP.see(PrologInput);
- YP.tell(PrologOutuput);
-
- YP.seen();
- YP.told();
- StringBuilder builder = PrologOutput.GetStringBuilder();
- string finaloutput = builder.ToString();
-
-Any prolog reads and writes will be to the passed StringReader and StringWriter. In fact any TextReader/TextWriter class can be used.
-
-Strings in Prolog are stored as Atom's and you need to use an Atom object to match.
-
-\\yp
-wanted('bob').
-\\cs
-string Who="bob";
-foreach( bool ans in wanted(Atom.a(Who) )){};
-
-
-Prolog code calling a C# function:
------------------------------------
-The prolog code uses the script_event('name_of_function',ARGS) builtin, which is transformed into the function call.
-The C# function called uses "PrologCallback" and returns a boolean.
-
-
-
-Dynamic database assertions:
------------------------------------
-
-void assertdb2(string predicate, string arg1, string arg2)
-{
- name = Atom.a(predicate);
- YP.assertFact(name, new object[] { arg1, arg2 });
-}
-
-void retractdb2(string predicate, string arg1, string arg2)
-{
- name = Atom.a(predicate);
- YP.retractFact(name, new object[] { arg1, arg2 });
-}
-
-
-========================= APPENDIX A: touch test ================================
-
-
- ===================================
-Input YP Code
- ===================================
-//yp
- mydb('field2','field1').
- mydb('andy','jane').
- mydb('carl','dan').
- mydb('andy','bill').
- mydb('andy','betty').
-
- call_me(X):-mydb(X,Y) , respond(Y).
- respond(X):- script_event('sayit',X).
-
-//cs
- public void default_event_touch_start(int N )
- {
- llSay(0,"pstart1");
- foreach( bool ans in call_me(Atom.a(@"andy") )){};
- llSay(0,"pstop2");
- }
-
- public void default_event_state_entry()
- {
- llSay(0,"prolog tester active.");
- }
-
-PrologCallback sayit(object ans)
- {
- llSay(0,"sayit1");
- string msg = "one answer is :"+((Variable)ans).getValue();
- llSay(0,msg);
- yield return false;
- }
-
-
- ===================================
-Generated CS Code
- ===================================
-using OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog;using OpenSim.Region.ScriptEngine.Common; using System.Collections.Generic;
-namespace SecondLife { public class Script : OpenSim.Region.ScriptEngine.Common.BuiltIn_Commands_BaseClass {
-static OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog.YP YP=null;public Script() { YP= new OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog.YP(); }
-//cs
- public void default_event_touch_start(int N )
- {
- llSay(0,"pstart1");
- foreach( bool ans in call_me(Atom.a(@"carl") )){};
- llSay(0,"pstop2");
- }
-
- public void default_event_state_entry()
- {
- llSay(0,"prolog tester active.");
- }
-
-public IEnumerable sayit(object ans)
- {
- llSay(0,"sayit1");
- string msg = "one answer is :"+((Variable)ans).getValue();
- llSay(0,msg);
- yield return false;
- }
-
-
-//YPEncoded
-public IEnumerable