public override string ToString () { return name; }
}
- private static Symbol Nexpr = "expr";
-
- private static Symbol Nnull = "";
- private static Symbol Nfuncall = "funcall";
- private static Symbol Nvarref = "varref";
- private static Symbol Ninteger = "integer";
- private static Symbol Nstring = "string";
- private static Symbol Nsymbol = "symbol";
- private static Symbol Nlist = "list";
-
- private static Symbol Ndefun = "defun";
- private static Symbol Nfname = "fname";
- private static Symbol Nargs = "args";
- private static Symbol Nargs_unevalled = "args-unevalled";
- private static Symbol Nfixed = "fixed";
- private static Symbol Noptional = "optional";
- private static Symbol Nrest = "rest";
-
- private static Symbol Ndefvar = "defvar";
- private static Symbol Nvname = "vname";
- private static Symbol Ndescription = "description";
- private static Symbol Nrange = "range";
+ private static Symbol Qexpr = "expr";
+
+ private static Symbol Qnull = "";
+ private static Symbol Qfuncall = "funcall";
+ private static Symbol Qvarref = "varref";
+ private static Symbol Qinteger = "integer";
+ private static Symbol Qstring = "string";
+ private static Symbol Qsymbol = "symbol";
+ private static Symbol Qlist = "list";
+
+ private static Symbol Qdefun = "defun";
+ private static Symbol Qfname = "fname";
+ private static Symbol Qargs = "args";
+ private static Symbol Qargs_unevalled = "args-unevalled";
+ private static Symbol Qfixed = "fixed";
+ private static Symbol Qoptional = "optional";
+ private static Symbol Qrest = "rest";
+
+ private static Symbol Qdefvar = "defvar";
+ private static Symbol Qvname = "vname";
+ private static Symbol Qdescription = "description";
+ private static Symbol Qrange = "range";
public abstract class Function
{
int nfixed = 0;
int noptional = 0;
int nrest = 0;
- name = node.Attributes[Nfname].Value;
+ name = node.Attributes[Qfname].Value;
node = node.FirstChild;
if (node != null
- && (node.Name == Nargs || node.Name == Nargs_unevalled))
+ && (node.Name == Qargs || node.Name == Qargs_unevalled))
{
XmlNode n;
- args_evalled = node.Name == Nargs;
+ args_evalled = node.Name == Qargs;
for (n = node.FirstChild; n != null; n = n.NextSibling)
{
- if (n.Name == Nfixed)
+ if (n.Name == Qfixed)
nfixed++;
- else if (n.Name == Noptional)
+ else if (n.Name == Qoptional)
noptional++;
- else if (n.Name == Nrest)
+ else if (n.Name == Qrest)
nrest++;
else
throw new Exception ("Invalid argument type: " + n);
{
int i = 0;
for (i = 0; i < args.Length; i++, nfixed++)
- if (args[i] == Noptional || args[i] == Nrest)
+ if (args[i] == Qoptional || args[i] == Qrest)
break;
if (i < args.Length)
{
- if (args[i] == Noptional)
+ if (args[i] == Qoptional)
{
for (i++; i < args.Length; i++, noptional++)
- if (args[i] == Nrest)
+ if (args[i] == Qrest)
break;
if (i < args.Length)
nrest = 1;
this.args = new Variable[max_arg];
int j;
for (i = j = 0; j < this.args.Length; i++)
- if (args[i] != Noptional || args[i] != Nrest)
+ if (args[i] != Qoptional || args[i] != Qrest)
this.args[j++] = domain.Defvar (args[i]);
}
else
public void SetBody (Domain domain, XmlNode node)
{
for (node = node.FirstChild; node != null; node = node.NextSibling)
- if (node.Name != Ndescription
- && node.Name != Nargs
- && node.Name != Nargs_unevalled)
+ if (node.Name != Qdescription
+ && node.Name != Qargs
+ && node.Name != Qargs_unevalled)
break;
int nterms = 0;
for (XmlNode n = node; n != null; n = n.NextSibling)
public void Defun (XmlNode node, bool prototype)
{
- Symbol name = node.Attributes[Nfname].Value;
+ Symbol name = node.Attributes[Qfname].Value;
Function func;
if (prototype || ! functions.TryGetValue (name, out func))
Variable vari;
node = node.FirstChild;
- if (node != null && node.Name == Ndescription)
+ if (node != null && node.Name == Qdescription)
{
desc = node.InnerText;
node = node.NextSibling;
nranges = range_list.Count;
}
- if (type == Ninteger)
+ if (type == Qinteger)
{
int intval = parse_integer (val);
int[] range = null;
for (int i = 0; i < nranges; i++)
{
XmlNode n = range_list[i];
- if (n.Name == Nrange)
+ if (n.Name == Qrange)
{
range[i * 2]
= parse_integer (n.FirstChild.InnerText);
else
vari = new Variable.Int (name, desc, intval, range);
}
- else if (type == Nstring)
+ else if (type == Qstring)
{
string[] range = null;
if (range_list != null)
else
vari = new Variable.Str (name, desc, val, range);
}
- else if (type == Nsymbol)
+ else if (type == Qsymbol)
{
Symbol[] range = null;
if (range_list != null)
throw new Exception ("Invalid number of arguments to: "
+ fname + " " + nargs);
this.args = args;
- if (vname != Nnull)
+ if (vname != Qnull)
vari = domain.GetVar (vname, true);
}
internal static TermValue parser (Domain domain, XmlNode node)
{
Symbol fname = node.Name;
- Symbol vname = Nnull;
+ Symbol vname = Qnull;
XmlAttribute attr;
- if (fname == Nfuncall)
- fname = node.Attributes[Nfname].Value;
- attr = node.Attributes[Nvname];
+ if (fname == Qfuncall)
+ fname = node.Attributes[Qfname].Value;
+ attr = node.Attributes[Qvname];
if (attr != null)
vname = attr.Value;
{
Symbol name = node.Name;
- if (name == Ninteger)
+ if (name == Qinteger)
{
intval = parse_integer (node.InnerText);
objval = null;
else
{
intval = 0;
- if (name == Nsymbol)
+ if (name == Qsymbol)
objval = (Symbol) node.InnerText;
- else if (name == Nstring)
+ else if (name == Qstring)
objval = node.InnerText.Clone ();
- else if (name == Nvarref)
+ else if (name == Qvarref)
objval = domain.GetVar ((Symbol) node.Attributes[0].Value, true);
- else if (name == Nlist)
+ else if (name == Qlist)
{
List<Term> list = new List<Term> ();
for (node = node.FirstChild; node != null;
static private Term Zero = new Term (0);
static private Term One = new Term (1);
- static private Term TermInt = new Term (Ninteger);
- static private Term TermStr = new Term (Nstring);
- static private Term TermSymbol = new Term (Nsymbol);
- static private Term TermList = new Term (Nlist);
+ static private Term TermInt = new Term (Qinteger);
+ static private Term TermStr = new Term (Qstring);
+ static private Term TermSymbol = new Term (Qsymbol);
+ static private Term TermList = new Term (Qlist);
static private Term TermTerm = new Term ((Symbol) "term");
internal static int parse_integer (string str)
for (XmlNode n = node; n != null; n = n.NextSibling)
if (n.NodeType == XmlNodeType.Element)
{
- if (n.Name == Ndefun)
+ if (n.Name == Qdefun)
domain.Defun (n, true);
- else if (n.Name == Ndefvar)
+ else if (n.Name == Qdefvar)
domain.Defvar (n);
else
nterms++;
for (XmlNode n = node; n != null; n = n.NextSibling)
if (n.NodeType == XmlNodeType.Element)
{
- if (n.Name == Ndefun)
+ if (n.Name == Qdefun)
domain.Defun (n, false);
- else if (n.Name != Ndefvar)
+ else if (n.Name != Qdefvar)
terms[i++]= new Term (domain, n);
}
return terms;
reader.Read ();
} while (reader.NodeType != XmlNodeType.None
&& (reader.NodeType != XmlNodeType.Element
- || reader.Name != Nexpr));
+ || reader.Name != Qexpr));
if (reader.NodeType == XmlNodeType.None)
throw new Exception ("Node <expr> not found");
node = doc.ReadNode (reader);