コード例 #1
0
ファイル: expr_pylike_eval.c プロジェクト: dfelinto/blender
static bool parse_not(ExprParseState *state)
{
  if (state->token == TOKEN_NOT) {
    CHECK_ERROR(parse_next_token(state) && parse_not(state));
    parse_add_func(state, OPCODE_FUNC1, 1, op_not);
    return true;
  }

  return parse_cmp(state);
}
コード例 #2
0
bool WhereMatcher::parse_or() {
  bool left = parse_not();
  Token t = stream_get();

  if (t.first == bool_or) {
    return left || parse_and();
  } else {
    if (t.first != value_undefined_type)
      stream_unget(t);
    return left;
  }
}
コード例 #3
0
ファイル: expr_pylike_eval.c プロジェクト: dfelinto/blender
static bool parse_and(ExprParseState *state)
{
  CHECK_ERROR(parse_not(state));

  if (state->token == TOKEN_AND) {
    int jump = parse_add_jump(state, OPCODE_JMP_AND);

    CHECK_ERROR(parse_next_token(state) && parse_and(state));

    parse_set_jump(state, jump);
  }

  return true;
}
コード例 #4
0
ファイル: parse-expr.cpp プロジェクト: thehexia/mathmagician
// unary-expr ::= - unary expr
//                + unary expr
//                ! unary expr
//                primary expr
Expr*
parse_unary_expr(Parser& p, Token_stream& ts)
{
  if(ts.next()) {
    switch (ts.next()->kind()) {
      // negative
      case minus_tok: return parse_neg(p, ts);
      case plus_tok: return parse_pos(p, ts);
      case bang_tok: return parse_not(p, ts);
      default:
        return parse_primary_expr(p, ts);
    }
  }

  return nullptr;
}
コード例 #5
0
void parse_line(char *buff) {
  switch(*buff) {
    case '?': 
      parse_ro_pred(buff+1); 
      break;
    case '=': 
      parse_copy_pred(buff+1);
      break;
    case '&':
      parse_binop_pred(buff+1, create_and); 
      break;
    case '|':
      parse_binop_pred(buff+1, create_or); 
      break;
    case '~':
      parse_not(buff+1); 
      break;
    case 'P':
      parse_psi(buff+1);
      break;
    case 'H':
      parse_eta(buff+1);
      break;
    case '@': 
      parse_updateuse(buff+1);
    case 'N': 
      parse_node(buff+1); 
      break;
    case 'E':
      parse_edge(buff+1);
      break;
    case 'C': 
      parse_cond_edge(buff+1);
      break;
  }
}