A little question about the Identifier error

I currently running a sample like this

functions {
int num_matches(vector x, int y) {
  int n = 0;
  for (i in 1:rows(x))
    if (x[i] == y)
      n += 1;
  return n;
}
  
// Find the indexes of the elements in the vector x that equal real number y
int[] which_equal(vector x, int y) {
  int match_positions[num_matches(x, y)];
  int pos = 1;
  for (i in 1:size(x)) {
    if (x[i] == y) {
      match_positions[pos] = i;
      pos += 1;
    }
  }
  return match_positions;
}


}
  
data {
  int<lower=1> I; // Total number of observations
  int<lower=1> Q; // Total numbers of covariates
  int<lower=1> J; // Numbers of repeated measurements in time dimension
  int<lower=1> S; // Dimension of alpha
  int<lower=1> L; // Length of each beta
  int<lower=1> K; // Total number of classes
  int<lower=1, upper=K> g[I]; // Class of each observation
  int<lower=1> nz[I, Q]; // calculate the total count of non-zero elements 
  array[I, Q] vector[J] y;  // observed data
  array[I, Q] matrix[J, S] Z;  // covariates for alpha
  array[I, Q] matrix[J, L] B;  // covariates for beta
  int<lower=0, upper=1> data_index[I, Q, J]; // Indicator for non-missing data
  // int data_index_nonzero[I, Q, J];  Nonzero indices for each observation and covariate
}

parameters {
  array[Q] vector[S] alpha;
  array[K, Q] vector[L] beta;
  matrix[Q, Q] Sigma_omega;
  array[I] vector[Q] omega;
  vector<lower=0>[Q] sigma2;
}

model {
  for (q in 1:Q) {
    alpha[q] ~ multi_normal(rep_vector(0, S), diag_matrix(rep_vector(100, S))); // Prior for alpha
    sigma2[q] ~ inv_gamma(1, 1); // Prior for sigma2
  }
  for (k in 1:K) {
    for (q in 1:Q) {
      beta[k, q] ~ multi_normal(rep_vector(0, L), diag_matrix(rep_vector(100, L))); // Prior for beta
    }
  }
  for (i in 1:I) {
    omega[i] ~ multi_normal(rep_vector(0, Q), Sigma_omega); // Prior for omega
  }
  
  for (q in 1:Q) {
    vector[S] alpha_q = alpha[q];
    for (i in 1:I) {
      int g_i = g[i];
      vector[L] beta_giq = beta[g_i, q];
      vector[L] beta_Kq = beta[K, q]; // this is the beta_0 in the formula
      int nz_iq = nz[i, q];
      vector[J] data_index_iq_raw = data_index[i,q];
      int[num_matches(data_index_iq_raw,1)] data_index_iq = which_equal(data_index_iq_raw, 1);

      vector[nz_iq] y_iq = y[i, q, data_index_iq];
      matrix[nz_iq, S] Z_iq = Z[i, q, data_index_iq, :];
      matrix[nz_iq, L] B_iq = B[i, q, data_index_iq, :];
      vector[nz_iq] mu;
      
      if (g_i == K) {
        // case when g[i] == K
        mu = Z_iq * alpha_q + B_iq * beta_Kq + rep_vector(omega[i, q], nz_iq);
      } else {
        // case when g[i] != K
        mu = Z_iq * alpha_q + B_iq * beta_giq + B_iq * beta_Kq
        + rep_vector(omega[i, q], nz_iq);
      }
      
      y_iq ~ normal(mu, sqrt(sigma2[q]));
    }
  }
}

it shows that ::
rstan:::rstudio_stanc(“D:/Research/May/trajectory/stancode/June9/V5June.stan”)
Error in stanc(filename, allow_undefined = TRUE) : 0

Syntax error in ‘string’, line 68, column 9 to column 10, parsing error:

Identifier expected after sized type in local (or model block) variable declaration. (No transformations/constraints allowed.)

but the line 67 shows in my Rstudio interface is this line:
vector[L] beta_giq = beta[g_i, q];
but I don’t think it is this line, so is there anyone can help me where the problem goes on? Really appreciate that if someone could help.

Besides, I wanna ask why when I click the check for my stan file, the error shows are not match, for this example, error shows for line 68 n, but actually bugs comes for line72, and it won’t show exactly the place where the error comes, so it cost a lot time for me to find the bug, how can I configure the rstan so it will show the exactly position for error?

The error is on line

      int[num_matches(data_index_iq_raw,1)] data_index_iq = which_equal(data_index_iq_raw, 1);

where int[..] is wrong; it should be array[..] int. There’s also a type error on the previous line. The correct code is

      vector[J] data_index_iq_raw = to_vector(data_index[i,q]);
      array[num_matches(data_index_iq_raw,1)] int data_index_iq = which_equal(data_index_iq_raw, 1);

I don’t know why RStudio reports wrong line number. Maybe it removes empty lines or something?

It works! Really appreciate that! BTW do you know anything about how to optimize the varying length target, In my model , i is subject, q the variables, and J is time, for each y_iq, the recording time is varying , so it takes almost 8 hours for my models to fit, I set chain 1 and iteration only takes 5000 times , and previous 1000 is the burn in.
If you are available, I will provid detailed formula, and thanks again!