private void DefineNewOperator(int pri, string assoc, PrologCodeTerm op)
{
// Check operator name
string opValue = "";
if (op is PrologCodeConstantAtom)
{
opValue = ((PrologCodeConstantAtom)op).Value;
}
else if (op is PrologCodeStringAtom)
{
opValue = ((PrologCodeStringAtom)op).Value;
}
else
{
_errors.Add(new PrologCompilerError("P0011", "Invalid operator definition.", "", false, _scanner.Current.Line, _scanner.Current.Column));
return;
}
if (opValue == "," || opValue == "','")
{
_errors.Add(new PrologCompilerError("P0011", "Invalid operator definition.", "", false, _scanner.Current.Line, _scanner.Current.Column));
return;
}
// Check operator priority
if (pri > 0 && pri < 1200)
{
UpdateOperatorTable(pri, assoc, opValue);
}
else if (pri == 0)
{
// Remove an operator
_operators.RemoveOperator(opValue);
}
else
{
// Error
}
}