private void ProcessOperator(PrologCodePredicate p)
{
if (!(p.Arguments[0] is PrologCodeIntegerAtom))
{
_errors.Add(new PrologCompilerError("P0009", "Invalid operator priority.", "", false, _scanner.Current.Line, _scanner.Current.Column));
}
int priority = ((PrologCodeIntegerAtom)p.Arguments[0]).Value;
if (!(p.Arguments[1] is PrologCodeConstantAtom))
{
_errors.Add(new PrologCompilerError("P0010", "Invalid operator associativity specifier.", "", false, _scanner.Current.Line, _scanner.Current.Column));
}
string associativity = ((PrologCodeConstantAtom)p.Arguments[1]).Value;
if (p.Arguments[2] is PrologCodeNonEmptyList)
{
ArrayList operators = GetListOperators((PrologCodeNonEmptyList)p.Arguments[2]);
foreach (PrologCodeTerm op in operators)
{
DefineNewOperator(priority, associativity, op);
}
}
else if(p.Arguments[2] is PrologCodeConstantAtom)
{
DefineNewOperator(priority, associativity, (PrologCodeTerm)p.Arguments[2]);
}
else if (p.Arguments[2] is PrologCodeStringAtom)
{
DefineNewOperator(priority, associativity, (PrologCodeTerm)p.Arguments[2]);
}
else
{
_errors.Add(new PrologCompilerError("P0011", "Invalid operator definition.", "", false, _scanner.Current.Line, _scanner.Current.Column));
}
}