@Override
 public void meet(Or node) throws RuntimeException {
   builder.append("(");
   node.getLeftArg().visit(this);
   builder.append(" OR ");
   node.getRightArg().visit(this);
   builder.append(")");
 }
Пример #2
0
 public static void init() {
   Add.init();
   Address.init();
   Align.init();
   Alloc.init();
   Anchor.init();
   And.init();
   Bad.init();
   Bitcast.init();
   Block.init();
   Builtin.init();
   Call.init();
   Cmp.init();
   Cond.init();
   Confirm.init();
   Const.init();
   Conv.init();
   CopyB.init();
   Deleted.init();
   Div.init();
   Dummy.init();
   End.init();
   Eor.init();
   Free.init();
   IJmp.init();
   Id.init();
   Jmp.init();
   Load.init();
   Member.init();
   Minus.init();
   Mod.init();
   Mul.init();
   Mulh.init();
   Mux.init();
   NoMem.init();
   Not.init();
   Offset.init();
   Or.init();
   Phi.init();
   Pin.init();
   Proj.init();
   Raise.init();
   Return.init();
   Sel.init();
   Shl.init();
   Shr.init();
   Shrs.init();
   Size.init();
   Start.init();
   Store.init();
   Sub.init();
   Switch.init();
   Sync.init();
   Tuple.init();
   Unknown.init();
 }
  @Override
  public Boolean visit(Or ast) {
    boolean checkLhs = ast.getLhs().accept(this);
    boolean checkRhs = ast.getRhs().accept(this);

    if (!(checkLhs && checkRhs)) return false;
    Type lhsType = ast.getLhs().typeOf(env);
    Type rhsType = ast.getRhs().typeOf(env);

    if (!(lhsType.isCompatibleToBool() && rhsType.isCompatibleToBool())) {
      addToErrorList(
          ast,
          "the operator || can not be applied to instances of type "
              + lhsType.getClass()
              + " and type "
              + rhsType.getClass());
      return false;
    }
    return true;
  }
Пример #4
0
 @Override
 public Node visit(Sequence node) {
   // Node result = new Sequence( node.a.accept(this), node.b);
   Node result =
       Sequence.getInstance(
           new SequenceChild(node.sequenceChild.a.accept(this), node.sequenceChild.b));
   // Dc(AB) = Dc(A)B if A does not contain the empty string
   if (!node.sequenceChild.a.accept(nullable)) {
     return result;
     // Dc(AB) = Dc(A)B | Dc(B) if A contains the empty string
   } else {
     /* return new Or(
     result, // Dc(AB)
     node.sequenceChild.b.accept(this) // Dc(B)
     );
                               */
     return Or.getInstance(
         new OrChild(
             result, // Dc(AB)
             node.sequenceChild.b.accept(this)) // Dc(B)
         );
   }
 }
Пример #5
0
 @Override
 public Node visit(OrChild node) {
   // Dc(A | B) = Dc(A) | Dc(B)
   // return new Or(node.a.accept(this), node.b.accept(this));
   return Or.getInstance(new OrChild(node.a.accept(this), node.b.accept(this)));
 }
 @Override
 public ConditionBuilder orNot(final Condition condition) {
   if (condition == null) return this;
   return Or.any(this, Not.any(condition));
 }