Axiom.Compiler.Framework.PrologCodeParser.ProcessOperator C# (CSharp) Метод

ProcessOperator() приватный Метод

private ProcessOperator ( PrologCodePredicate p ) : void
p Axiom.Compiler.CodeObjectModel.PrologCodePredicate
Результат void
        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));
            }
        }