447 {
448 ExpressionNode expressionNode = null;
449 while (true)
450 {
452 if (operatorInfo._priority < pri)
453 {
454 break;
455 }
457 switch (operatorInfo._type)
458 {
459 default:
460 return;
461 case Nodes.Binop:
462 {
463 ExpressionNode right =
NodePop();
464 ExpressionNode expressionNode2 =
NodePop();
465 switch (operatorInfo._op)
466 {
467 case 4:
468 case 6:
469 case 22:
470 case 23:
471 case 24:
472 case 25:
473 throw ExprException.UnsupportedOperator(operatorInfo._op);
474 default:
475 expressionNode = ((operatorInfo._op != 14) ?
new BinaryNode(
_table, operatorInfo._op, expressionNode2, right) :
new LikeNode(
_table, operatorInfo._op, expressionNode2, right));
476 break;
477 }
478 break;
479 }
480 case Nodes.Unop:
481 {
482 ExpressionNode expressionNode2 = null;
483 ExpressionNode right =
NodePop();
484 int op = operatorInfo._op;
485 if (op != 1 && op != 3 && op == 25)
486 {
487 throw ExprException.UnsupportedOperator(operatorInfo._op);
488 }
489 expressionNode =
new UnaryNode(
_table, operatorInfo._op, right);
490 break;
491 }
492 case Nodes.Zop:
493 expressionNode = new ZeroOpNode(operatorInfo._op);
494 break;
495 case Nodes.UnopSpec:
496 case Nodes.BinopSpec:
497 return;
498 }
500 }
501 }
readonly DataTable _table
void NodePush(ExpressionNode node)