diff --git a/autotests/folding/highlight.stan.fold b/autotests/folding/highlight.stan.fold new file mode 100644 --- /dev/null +++ b/autotests/folding/highlight.stan.fold @@ -0,0 +1,380 @@ +/* Stan Highlighting Example + + This file contains a syntatically correct but nonsensical Stan program that + includes almost every feature of the language needed to validate syntax + highlighters. It will compile (as of Stan 2.17.1), but it does nothing + useful. + + Author: Jeffrey Arnold + Copyright: Jeffrey Arnold (2018) + License: MIT + +*/ +// line comment +# deprecated line comment +functions { + #include stuff.stan + #include "morestuff.stan" + #include 'moststuff.stan' + #include + + // declarations + void oof(real x); + + // definitions + // return types + void oof(real x) { + print("print ", x); + } + /* + @param x A number + @return x + 1 + */ + real foo(real x) { + return x; + } + int bar(int x) { + return x; + } + vector baz(vector x) { + return x; + } + row_vector qux(row_vector x) { + return x; + } + matrix quux(matrix x) { + return x; + } + // numbers of arguments + void corge() { + print("no parameters"); + } + void grault(int a, real b, vector c, row_vector d, matrix f) { + print("many parameters"); + } + void garply(real a, real[] b, real[,] c, real[,,] d) { + print("array arguments"); + } + // array return types + int[] waldo(int[] x) { + return x; + } + int[,] fred(int[,] x) { + return x; + } + int[,,] plough(int[,,] x) { + return x; + } + // data only function argument + real plugh(data real x) { + return x; + } + // ode function + real[] ode_func(real a, real[] b, real[] c, real[] d, int[] e) { + return b; + } +} +data { + // non-int variable types + int x_int; + real x_real; + real y_real; + vector[1] x_vector; + ordered[1] x_ordered; + positive_ordered[1] x_positive_ordered; + simplex[1] x_simplex; + unit_vector[1] x_unit_vector; + row_vector[1] x_row_vector; + matrix[1, 1] x_matrix; + cholesky_factor_corr[2] x_cholesky_factor_corr; + cholesky_factor_cov[2] x_cholesky_factor_cov; + cholesky_factor_cov[2, 3] x_cholesky_factor_cov_2; + corr_matrix[2] x_corr_matrix; + cov_matrix[2] x_cov_matrix; + + // range constraints + real alpha; + real bravo; + real charlie; + + // arrays + int echo[1]; + int foxtrot[1, 1]; + int golf[1, 1, 1]; + + // identifier with all valid letters + real abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789; + + // hard pattern + real charlie)> ranger; + + // identifier patterns + real a; + real a3; + real a_3; + real Sigma; + real my_cpp_style_variable; + real myCamelCaseVariable; + real abcdefghijklmnojk; + // names beginning with keywords + real iffffff; + real whilest; + // name ending with truncation + real fooT; +} +transformed data { + // declaration and assignment + int india = 1; + real romeo = 1.0; + row_vector[2] victor = [1, 2]; + matrix[2, 2] mike = [[1, 2], [3, 4]]; + real sierra[2] = {1., 2.}; +} +parameters { + real hotel; +} +transformed parameters { + real juliette; + juliette = hotel * 2.; +} +model { + real x; + int k; + vector[2] y = [1., 1.]'; + matrix[2, 2] A = [[1., 1.], [1., 1.]]; + real odeout[2, 2]; + real algout[2, 2]; + + // if else statements + if (x_real < 0) x = 0.; + + if (x_real < 0) { + x = 0.; + } + + if (x_real < 0) x = 0.; + else x = 1.; + + if (x_real < 0) { + x = 0.; + } else { + x = 1.; + } + + if (x_real < 0) x = 0.; + else if (x_real > 1) x = 1.; + else x = 0.5; + + if (x_real < 0) { + x = 0.; + } else if (x_real > 1) { + x = 1.; + } else { + x = 0.5; + } + + // for loops + for (i in 1:5) { + print("i = ", i); + } + // for (j in echo) { + // print("j = ", j); + // } + // while loop + while (1) { + break; + continue; + } + + // reject statement + reject("reject statment ", x_real); + + // print statement + print("print statement ", x_real); + print("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_~@#$%^&*`'-+={}[].,;: "); + + // increment log probability statements; + target += 1.; + + // valid integer literals + k = 0; + k = 1; + k = -1; + k = 256; + k = -127098; + k = 007; + + // valid real literals + x = 0.0; + x = 1.0; + x = 3.14; + x = 003.14; + x = -217.9387; + x = 0.123; + x = .123; + x = 1.; + x = -0.123; + x = -.123; + x = -1.; + x = 12e34; + x = 12E34; + x = 12.e34; + x = 12.E34; + x = 12.0e34; + x = 12.0E34; + x = .1e34; + x = .1E34; + x = -12e34; + x = -12E34; + x = -12.e34; + x = -12.E34; + x = -12.0e34; + x = -12.0E34; + x = -.1e34; + x = -.1E34; + x = 12e-34; + x = 12E-34; + x = 12.e-34; + x = 12.E-34; + x = 12.0e-34; + x = 12.0E-34; + x = .1e-34; + x = .1E-34; + x = -12e-34; + x = -12E-34; + x = -12.e-34; + x = -12.E-34; + x = -12.0e-34; + x = -12.0E-34; + x = -.1e-34; + x = -.1E-34; + x = 12e+34; + x = 12E+34; + x = 12.e+34; + x = 12.E+34; + x = 12.0e+34; + x = 12.0E+34; + x = .1e+34; + x = .1E+34; + x = -12e+34; + x = -12E+34; + x = -12.e+34; + x = -12.E+34; + x = -12.0e+34; + x = -12.0E+34; + x = -.1e+34; + x = -.1E+34; + + // assignment statements + x = 1; + x += 1.; + x -= 1.; + x *= 1.; + x /= 1.; + y .*= x_vector; + y ./= x_vector; + + // operators + x = x_real && 1; + x = x_real || 1; + x = x_real < 1.; + x = x_real <= 1.; + x = x_real > 1.; + x = x_real >= 1.; + x = x_real + 1.; + x = x_real - 1.; + x = x_real * 1.; + x = x_real / 1.; + x = x_real ^ 2.; + x = x_real % 2; + x = !x_real; + x = +x_real; + x = -x_real; + x = x_int ? x_real : 0.; + + y = x_row_vector'; + y = x_matrix \ x_vector; + y = x_vector .* x_vector; + y = x_vector ./ x_vector; + + // parenthized expression + x = (x_real + x_real); + + // block statement + { + real z; + z = 1.; + } + + // built-in functions + x = log(1.); + x = exp(1.); + + // non-built-in function + x = foo(1.); + + // constants and nullary functions + x = machine_precision(); + x = pi(); + x = e(); + x = sqrt2(); + x = log2(); + x = log10(); + // special values + x = not_a_number(); + x = positive_infinity(); + x = negative_infinity(); + x = machine_precision(); + // log probability + x = target(); + + // sampling statement + x_real ~ normal(0., 1.); + + // truncation + x_real ~ normal(0., 1.) T[-1., 1.]; + x_real ~ normal(0., 1.) T[, 1.]; + x_real ~ normal(0., 1.) T[-1., ]; + x_real ~ normal(0., 1.) T[ , ]; + + // transformation on lhs of sampling + log(x_real) ~ normal(0., 1.); + + // lhs indexes + y[1] = 1.; + A[1, 2] = 1.; + A[1][2] = 1.; + + // special functions + odeout = integrate_ode(ode_func, {1.}, x_real, {1.}, {1.}, {1.}, {0}); + odeout = integrate_ode_bdf(ode_func, {1.}, x_real, {1.}, {1.}, {1.}, {0}, + x_real, x_real, x_int); + odeout = integrate_ode_rk45(ode_func, {1.}, x_real, {1.}, {1.}, {1.}, {0}, + x_real, x_real, x_int); + // algout = algebra_solver(algebra_func, x_vector, x_vector, {1.}, {0}); + + // distribution functions + x = normal_lpdf(0.5 | 0., 1.); + x = normal_cdf(0.5, 0., 1.); + x = normal_lcdf(0.5 | 0., 1.); + x = normal_lccdf(0.5 | 0., 1.); + x = binomial_lpmf(1 | 2, 0.5); + + // deprecated features + foo <- 1; + increment_log_prob(0.0); + y_hat = integrate_ode(sho, y0, t0, ts, theta, x_r, x_i); + x = get_lp(); + x = multiply_log(1.0, 1.0); + x = binomial_coefficient_log(1.0, 1.0); + // deprecated distribution functions versions + x = normal_log(0.5, 0.0, 1.0); + x = normal_cdf_log(0.5, 0.0, 1.0); + x = normal_ccdf_log(0.5, 0.0, 1.0); + +} +generated quantities { + real Y; + // rng function + Y = normal_rng(0., 1.); +} diff --git a/autotests/html/highlight.stan.html b/autotests/html/highlight.stan.html new file mode 100644 --- /dev/null +++ b/autotests/html/highlight.stan.html @@ -0,0 +1,387 @@ + + + +highlight.stan + +
+/* Stan Highlighting Example
+
+  This file contains a syntatically correct but nonsensical Stan program that
+  includes almost every feature of the language needed to validate syntax
+  highlighters. It will compile (as of Stan 2.17.1), but it does nothing
+  useful.
+
+  Author: Jeffrey Arnold <jeffrey.anold@gmail.com>
+  Copyright: Jeffrey Arnold (2018)
+  License: MIT
+
+*/
+// line comment
+# deprecated line comment
+functions {
+  #include stuff.stan
+  #include "morestuff.stan"
+  #include 'moststuff.stan'
+  #include <evenmorestuff.stan>
+
+  // declarations
+  void oof(real x);
+
+  // definitions
+  // return types
+  void oof(real x) {
+    print("print ", x);
+  }
+  /*
+    @param x A number
+    @return x + 1
+  */
+  real foo(real x) {
+    return x;
+  }
+  int bar(int x) {
+    return x;
+  }
+  vector baz(vector x) {
+    return x;
+  }
+  row_vector qux(row_vector x) {
+    return x;
+  }
+  matrix quux(matrix x) {
+    return x;
+  }
+  // numbers of arguments
+  void corge() {
+    print("no parameters");
+  }
+  void grault(int a, real b, vector c, row_vector d, matrix f) {
+    print("many parameters");
+  }
+  void garply(real a, real[] b, real[,] c, real[,,] d) {
+    print("array arguments");
+  }
+  // array return types
+  int[] waldo(int[] x) {
+    return x;
+  }
+  int[,] fred(int[,] x) {
+    return x;
+  }
+  int[,,] plough(int[,,] x) {
+    return x;
+  }
+  // data only function argument
+  real plugh(data real x) {
+    return x;
+  }
+  // ode function
+  real[] ode_func(real a, real[] b, real[] c, real[] d, int[] e) {
+    return b;
+  }
+}
+data {
+  // non-int variable types
+  int x_int;
+  real x_real;
+  real y_real;
+  vector[1] x_vector;
+  ordered[1] x_ordered;
+  positive_ordered[1] x_positive_ordered;
+  simplex[1] x_simplex;
+  unit_vector[1] x_unit_vector;
+  row_vector[1] x_row_vector;
+  matrix[1, 1] x_matrix;
+  cholesky_factor_corr[2] x_cholesky_factor_corr;
+  cholesky_factor_cov[2] x_cholesky_factor_cov;
+  cholesky_factor_cov[2, 3] x_cholesky_factor_cov_2;
+  corr_matrix[2] x_corr_matrix;
+  cov_matrix[2] x_cov_matrix;
+
+  // range constraints
+  real<lower = 0., upper = 1.> alpha;
+  real<lower = 0.> bravo;
+  real<upper = 1.> charlie;
+
+  // arrays
+  int echo[1];
+  int foxtrot[1, 1];
+  int golf[1, 1, 1];
+
+  // identifier with all valid letters
+  real abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789;
+
+  // hard pattern
+  real<lower = (bravo < charlie), upper = (bravo > charlie)> ranger;
+
+  // identifier patterns
+  real a;
+  real a3;
+  real a_3;
+  real Sigma;
+  real my_cpp_style_variable;
+  real myCamelCaseVariable;
+  real abcdefghijklmnojk;
+  // names beginning with keywords
+  real iffffff;
+  real whilest;
+  // name ending with truncation
+  real fooT;
+}
+transformed data {
+  // declaration and assignment
+  int india = 1;
+  real romeo = 1.0;
+  row_vector[2] victor = [1, 2];
+  matrix[2, 2] mike = [[1, 2], [3, 4]];
+  real sierra[2] = {1., 2.};
+}
+parameters {
+  real hotel;
+}
+transformed parameters {
+  real juliette;
+  juliette = hotel * 2.;
+}
+model {
+  real x;
+  int k;
+  vector[2] y = [1., 1.]';
+  matrix[2, 2] A = [[1., 1.], [1., 1.]];
+  real odeout[2, 2];
+  real algout[2, 2];
+
+  // if else statements
+  if (x_real < 0) x = 0.;
+
+  if (x_real < 0) {
+    x = 0.;
+  }
+
+  if (x_real < 0) x = 0.;
+  else x = 1.;
+
+  if (x_real < 0) {
+    x = 0.;
+  } else {
+    x = 1.;
+  }
+
+  if (x_real < 0) x = 0.;
+  else if (x_real > 1) x = 1.;
+  else x = 0.5;
+
+  if (x_real < 0) {
+    x = 0.;
+  } else if (x_real > 1) {
+    x = 1.;
+  } else {
+    x = 0.5;
+  }
+
+  // for loops
+  for (i in 1:5) {
+    print("i = ", i);
+  }
+  // for (j in echo) {
+  //   print("j = ", j);
+  // }
+  // while loop
+  while (1) {
+    break;
+    continue;
+  }
+
+  // reject statement
+  reject("reject statment ", x_real);
+
+  // print statement
+  print("print statement ", x_real);
+  print("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_~@#$%^&*`'-+={}[].,;: ");
+
+  // increment log probability statements;
+  target += 1.;
+
+  // valid integer literals
+  k = 0;
+  k = 1;
+  k = -1;
+  k = 256;
+  k = -127098;
+  k = 007;
+
+  // valid real literals
+  x = 0.0;
+  x = 1.0;
+  x = 3.14;
+  x = 003.14;
+  x = -217.9387;
+  x = 0.123;
+  x = .123;
+  x = 1.;
+  x = -0.123;
+  x = -.123;
+  x = -1.;
+  x = 12e34;
+  x = 12E34;
+  x = 12.e34;
+  x = 12.E34;
+  x = 12.0e34;
+  x = 12.0E34;
+  x = .1e34;
+  x = .1E34;
+  x = -12e34;
+  x = -12E34;
+  x = -12.e34;
+  x = -12.E34;
+  x = -12.0e34;
+  x = -12.0E34;
+  x = -.1e34;
+  x = -.1E34;
+  x = 12e-34;
+  x = 12E-34;
+  x = 12.e-34;
+  x = 12.E-34;
+  x = 12.0e-34;
+  x = 12.0E-34;
+  x = .1e-34;
+  x = .1E-34;
+  x = -12e-34;
+  x = -12E-34;
+  x = -12.e-34;
+  x = -12.E-34;
+  x = -12.0e-34;
+  x = -12.0E-34;
+  x = -.1e-34;
+  x = -.1E-34;
+  x = 12e+34;
+  x = 12E+34;
+  x = 12.e+34;
+  x = 12.E+34;
+  x = 12.0e+34;
+  x = 12.0E+34;
+  x = .1e+34;
+  x = .1E+34;
+  x = -12e+34;
+  x = -12E+34;
+  x = -12.e+34;
+  x = -12.E+34;
+  x = -12.0e+34;
+  x = -12.0E+34;
+  x = -.1e+34;
+  x = -.1E+34;
+
+  // assignment statements
+  x = 1;
+  x += 1.;
+  x -= 1.;
+  x *= 1.;
+  x /= 1.;
+  y .*= x_vector;
+  y ./= x_vector;
+
+  // operators
+  x = x_real && 1;
+  x = x_real || 1;
+  x = x_real < 1.;
+  x = x_real <= 1.;
+  x = x_real > 1.;
+  x = x_real >= 1.;
+  x = x_real + 1.;
+  x = x_real - 1.;
+  x = x_real * 1.;
+  x = x_real / 1.;
+  x = x_real ^ 2.;
+  x = x_real % 2;
+  x = !x_real;
+  x = +x_real;
+  x = -x_real;
+  x = x_int ? x_real : 0.;
+
+  y = x_row_vector';
+  y = x_matrix \ x_vector;
+  y = x_vector .* x_vector;
+  y = x_vector ./ x_vector;
+
+  // parenthized expression
+  x = (x_real + x_real);
+
+  // block statement
+  {
+    real z;
+    z = 1.;
+  }
+
+  // built-in functions
+  x = log(1.);
+  x = exp(1.);
+
+  // non-built-in function
+  x = foo(1.);
+
+  // constants and nullary functions
+  x = machine_precision();
+  x = pi();
+  x = e();
+  x = sqrt2();
+  x = log2();
+  x = log10();
+  // special values
+  x = not_a_number();
+  x = positive_infinity();
+  x = negative_infinity();
+  x = machine_precision();
+  // log probability
+  x = target();
+
+  // sampling statement
+  x_real ~ normal(0., 1.);
+
+  // truncation
+  x_real ~ normal(0., 1.) T[-1., 1.];
+  x_real ~ normal(0., 1.) T[, 1.];
+  x_real ~ normal(0., 1.) T[-1., ];
+  x_real ~ normal(0., 1.) T[ , ];
+
+  // transformation on lhs of sampling
+  log(x_real) ~ normal(0., 1.);
+
+  // lhs indexes
+  y[1] = 1.;
+  A[1, 2] = 1.;
+  A[1][2] = 1.;
+
+  // special functions
+  odeout = integrate_ode(ode_func, {1.}, x_real, {1.}, {1.}, {1.}, {0});
+  odeout = integrate_ode_bdf(ode_func, {1.}, x_real, {1.}, {1.}, {1.}, {0},
+                             x_real, x_real, x_int);
+  odeout = integrate_ode_rk45(ode_func, {1.}, x_real, {1.}, {1.}, {1.}, {0},
+                              x_real, x_real, x_int);
+  // algout = algebra_solver(algebra_func, x_vector, x_vector, {1.}, {0});
+
+  // distribution functions
+  x = normal_lpdf(0.5 | 0., 1.);
+  x = normal_cdf(0.5, 0., 1.);
+  x = normal_lcdf(0.5 | 0., 1.);
+  x = normal_lccdf(0.5 | 0., 1.);
+  x = binomial_lpmf(1 | 2, 0.5);
+
+  // deprecated features
+  foo <- 1;
+  increment_log_prob(0.0);
+  y_hat = integrate_ode(sho, y0, t0, ts, theta, x_r, x_i);
+  x = get_lp();
+  x = multiply_log(1.0, 1.0);
+  x = binomial_coefficient_log(1.0, 1.0);
+  // deprecated distribution functions versions
+  x = normal_log(0.5, 0.0, 1.0);
+  x = normal_cdf_log(0.5, 0.0, 1.0);
+  x = normal_ccdf_log(0.5, 0.0, 1.0);
+
+}
+generated quantities {
+  real Y;
+  // rng function
+  Y = normal_rng(0., 1.);
+}
+
diff --git a/autotests/input/highlight.stan b/autotests/input/highlight.stan new file mode 100644 --- /dev/null +++ b/autotests/input/highlight.stan @@ -0,0 +1,380 @@ +/* Stan Highlighting Example + + This file contains a syntatically correct but nonsensical Stan program that + includes almost every feature of the language needed to validate syntax + highlighters. It will compile (as of Stan 2.17.1), but it does nothing + useful. + + Author: Jeffrey Arnold + Copyright: Jeffrey Arnold (2018) + License: MIT + +*/ +// line comment +# deprecated line comment +functions { + #include stuff.stan + #include "morestuff.stan" + #include 'moststuff.stan' + #include + + // declarations + void oof(real x); + + // definitions + // return types + void oof(real x) { + print("print ", x); + } + /* + @param x A number + @return x + 1 + */ + real foo(real x) { + return x; + } + int bar(int x) { + return x; + } + vector baz(vector x) { + return x; + } + row_vector qux(row_vector x) { + return x; + } + matrix quux(matrix x) { + return x; + } + // numbers of arguments + void corge() { + print("no parameters"); + } + void grault(int a, real b, vector c, row_vector d, matrix f) { + print("many parameters"); + } + void garply(real a, real[] b, real[,] c, real[,,] d) { + print("array arguments"); + } + // array return types + int[] waldo(int[] x) { + return x; + } + int[,] fred(int[,] x) { + return x; + } + int[,,] plough(int[,,] x) { + return x; + } + // data only function argument + real plugh(data real x) { + return x; + } + // ode function + real[] ode_func(real a, real[] b, real[] c, real[] d, int[] e) { + return b; + } +} +data { + // non-int variable types + int x_int; + real x_real; + real y_real; + vector[1] x_vector; + ordered[1] x_ordered; + positive_ordered[1] x_positive_ordered; + simplex[1] x_simplex; + unit_vector[1] x_unit_vector; + row_vector[1] x_row_vector; + matrix[1, 1] x_matrix; + cholesky_factor_corr[2] x_cholesky_factor_corr; + cholesky_factor_cov[2] x_cholesky_factor_cov; + cholesky_factor_cov[2, 3] x_cholesky_factor_cov_2; + corr_matrix[2] x_corr_matrix; + cov_matrix[2] x_cov_matrix; + + // range constraints + real alpha; + real bravo; + real charlie; + + // arrays + int echo[1]; + int foxtrot[1, 1]; + int golf[1, 1, 1]; + + // identifier with all valid letters + real abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789; + + // hard pattern + real charlie)> ranger; + + // identifier patterns + real a; + real a3; + real a_3; + real Sigma; + real my_cpp_style_variable; + real myCamelCaseVariable; + real abcdefghijklmnojk; + // names beginning with keywords + real iffffff; + real whilest; + // name ending with truncation + real fooT; +} +transformed data { + // declaration and assignment + int india = 1; + real romeo = 1.0; + row_vector[2] victor = [1, 2]; + matrix[2, 2] mike = [[1, 2], [3, 4]]; + real sierra[2] = {1., 2.}; +} +parameters { + real hotel; +} +transformed parameters { + real juliette; + juliette = hotel * 2.; +} +model { + real x; + int k; + vector[2] y = [1., 1.]'; + matrix[2, 2] A = [[1., 1.], [1., 1.]]; + real odeout[2, 2]; + real algout[2, 2]; + + // if else statements + if (x_real < 0) x = 0.; + + if (x_real < 0) { + x = 0.; + } + + if (x_real < 0) x = 0.; + else x = 1.; + + if (x_real < 0) { + x = 0.; + } else { + x = 1.; + } + + if (x_real < 0) x = 0.; + else if (x_real > 1) x = 1.; + else x = 0.5; + + if (x_real < 0) { + x = 0.; + } else if (x_real > 1) { + x = 1.; + } else { + x = 0.5; + } + + // for loops + for (i in 1:5) { + print("i = ", i); + } + // for (j in echo) { + // print("j = ", j); + // } + // while loop + while (1) { + break; + continue; + } + + // reject statement + reject("reject statment ", x_real); + + // print statement + print("print statement ", x_real); + print("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_~@#$%^&*`'-+={}[].,;: "); + + // increment log probability statements; + target += 1.; + + // valid integer literals + k = 0; + k = 1; + k = -1; + k = 256; + k = -127098; + k = 007; + + // valid real literals + x = 0.0; + x = 1.0; + x = 3.14; + x = 003.14; + x = -217.9387; + x = 0.123; + x = .123; + x = 1.; + x = -0.123; + x = -.123; + x = -1.; + x = 12e34; + x = 12E34; + x = 12.e34; + x = 12.E34; + x = 12.0e34; + x = 12.0E34; + x = .1e34; + x = .1E34; + x = -12e34; + x = -12E34; + x = -12.e34; + x = -12.E34; + x = -12.0e34; + x = -12.0E34; + x = -.1e34; + x = -.1E34; + x = 12e-34; + x = 12E-34; + x = 12.e-34; + x = 12.E-34; + x = 12.0e-34; + x = 12.0E-34; + x = .1e-34; + x = .1E-34; + x = -12e-34; + x = -12E-34; + x = -12.e-34; + x = -12.E-34; + x = -12.0e-34; + x = -12.0E-34; + x = -.1e-34; + x = -.1E-34; + x = 12e+34; + x = 12E+34; + x = 12.e+34; + x = 12.E+34; + x = 12.0e+34; + x = 12.0E+34; + x = .1e+34; + x = .1E+34; + x = -12e+34; + x = -12E+34; + x = -12.e+34; + x = -12.E+34; + x = -12.0e+34; + x = -12.0E+34; + x = -.1e+34; + x = -.1E+34; + + // assignment statements + x = 1; + x += 1.; + x -= 1.; + x *= 1.; + x /= 1.; + y .*= x_vector; + y ./= x_vector; + + // operators + x = x_real && 1; + x = x_real || 1; + x = x_real < 1.; + x = x_real <= 1.; + x = x_real > 1.; + x = x_real >= 1.; + x = x_real + 1.; + x = x_real - 1.; + x = x_real * 1.; + x = x_real / 1.; + x = x_real ^ 2.; + x = x_real % 2; + x = !x_real; + x = +x_real; + x = -x_real; + x = x_int ? x_real : 0.; + + y = x_row_vector'; + y = x_matrix \ x_vector; + y = x_vector .* x_vector; + y = x_vector ./ x_vector; + + // parenthized expression + x = (x_real + x_real); + + // block statement + { + real z; + z = 1.; + } + + // built-in functions + x = log(1.); + x = exp(1.); + + // non-built-in function + x = foo(1.); + + // constants and nullary functions + x = machine_precision(); + x = pi(); + x = e(); + x = sqrt2(); + x = log2(); + x = log10(); + // special values + x = not_a_number(); + x = positive_infinity(); + x = negative_infinity(); + x = machine_precision(); + // log probability + x = target(); + + // sampling statement + x_real ~ normal(0., 1.); + + // truncation + x_real ~ normal(0., 1.) T[-1., 1.]; + x_real ~ normal(0., 1.) T[, 1.]; + x_real ~ normal(0., 1.) T[-1., ]; + x_real ~ normal(0., 1.) T[ , ]; + + // transformation on lhs of sampling + log(x_real) ~ normal(0., 1.); + + // lhs indexes + y[1] = 1.; + A[1, 2] = 1.; + A[1][2] = 1.; + + // special functions + odeout = integrate_ode(ode_func, {1.}, x_real, {1.}, {1.}, {1.}, {0}); + odeout = integrate_ode_bdf(ode_func, {1.}, x_real, {1.}, {1.}, {1.}, {0}, + x_real, x_real, x_int); + odeout = integrate_ode_rk45(ode_func, {1.}, x_real, {1.}, {1.}, {1.}, {0}, + x_real, x_real, x_int); + // algout = algebra_solver(algebra_func, x_vector, x_vector, {1.}, {0}); + + // distribution functions + x = normal_lpdf(0.5 | 0., 1.); + x = normal_cdf(0.5, 0., 1.); + x = normal_lcdf(0.5 | 0., 1.); + x = normal_lccdf(0.5 | 0., 1.); + x = binomial_lpmf(1 | 2, 0.5); + + // deprecated features + foo <- 1; + increment_log_prob(0.0); + y_hat = integrate_ode(sho, y0, t0, ts, theta, x_r, x_i); + x = get_lp(); + x = multiply_log(1.0, 1.0); + x = binomial_coefficient_log(1.0, 1.0); + // deprecated distribution functions versions + x = normal_log(0.5, 0.0, 1.0); + x = normal_cdf_log(0.5, 0.0, 1.0); + x = normal_ccdf_log(0.5, 0.0, 1.0); + +} +generated quantities { + real Y; + // rng function + Y = normal_rng(0., 1.); +} diff --git a/autotests/reference/highlight.stan.ref b/autotests/reference/highlight.stan.ref new file mode 100644 --- /dev/null +++ b/autotests/reference/highlight.stan.ref @@ -0,0 +1,380 @@ +/* Stan Highlighting Example
+
+ This file contains a syntatically correct but nonsensical Stan program that
+ includes almost every feature of the language needed to validate syntax
+ highlighters. It will compile (as of Stan 2.17.1), but it does nothing
+ useful.
+
+ Author: Jeffrey Arnold
+ Copyright: Jeffrey Arnold (2018)
+ License: MIT
+
+*/
+// line comment
+# deprecated line comment
+functions {
+ #include stuff.stan
+ #include "morestuff.stan"
+ #include 'moststuff.stan'
+ #include
+
+ // declarations
+ void oof(real x);
+
+ // definitions
+ // return types
+ void oof(real x) {
+ print("print ", x);
+ }
+ /*
+ @param x A number
+ @return x + 1
+ */
+ real foo(real x) {
+ return x;
+ }
+ int bar(int x) {
+ return x;
+ }
+ vector baz(vector x) {
+ return x;
+ }
+ row_vector qux(row_vector x) {
+ return x;
+ }
+ matrix quux(matrix x) {
+ return x;
+ }
+ // numbers of arguments
+ void corge() {
+ print("no parameters");
+ }
+ void grault(int a, real b, vector c, row_vector d, matrix f) {
+ print("many parameters");
+ }
+ void garply(real a, real[] b, real[,] c, real[,,] d) {
+ print("array arguments");
+ }
+ // array return types
+ int[] waldo(int[] x) {
+ return x;
+ }
+ int[,] fred(int[,] x) {
+ return x;
+ }
+ int[,,] plough(int[,,] x) {
+ return x;
+ }
+ // data only function argument
+ real plugh(data real x) {
+ return x;
+ }
+ // ode function
+ real[] ode_func(real a, real[] b, real[] c, real[] d, int[] e) {
+ return b;
+ }
+}
+data {
+ // non-int variable types
+ int x_int;
+ real x_real;
+ real y_real;
+ vector[1] x_vector;
+ ordered[1] x_ordered;
+ positive_ordered[1] x_positive_ordered;
+ simplex[1] x_simplex;
+ unit_vector[1] x_unit_vector;
+ row_vector[1] x_row_vector;
+ matrix[1, 1] x_matrix;
+ cholesky_factor_corr[2] x_cholesky_factor_corr;
+ cholesky_factor_cov[2] x_cholesky_factor_cov;
+ cholesky_factor_cov[2, 3] x_cholesky_factor_cov_2;
+ corr_matrix[2] x_corr_matrix;
+ cov_matrix[2] x_cov_matrix;
+
+ // range constraints
+ real<lower = 0., upper = 1.> alpha;
+ real<lower = 0.> bravo;
+ real<upper = 1.> charlie;
+
+ // arrays
+ int echo[1];
+ int foxtrot[1, 1];
+ int golf[1, 1, 1];
+
+ // identifier with all valid letters
+ real abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789;
+
+ // hard pattern
+ real<lower = (bravo < charlie), upper = (bravo > charlie)> ranger;
+
+ // identifier patterns
+ real a;
+ real a3;
+ real a_3;
+ real Sigma;
+ real my_cpp_style_variable;
+ real myCamelCaseVariable;
+ real abcdefghijklmnojk;
+ // names beginning with keywords
+ real iffffff;
+ real whilest;
+ // name ending with truncation
+ real fooT;
+}
+transformed data {
+ // declaration and assignment
+ int india = 1;
+ real romeo = 1.0;
+ row_vector[2] victor = [1, 2];
+ matrix[2, 2] mike = [[1, 2], [3, 4]];
+ real sierra[2] = {1., 2.};
+}
+parameters {
+ real hotel;
+}
+transformed parameters {
+ real juliette;
+ juliette = hotel * 2.;
+}
+model {
+ real x;
+ int k;
+ vector[2] y = [1., 1.]';
+ matrix[2, 2] A = [[1., 1.], [1., 1.]];
+ real odeout[2, 2];
+ real algout[2, 2];
+
+ // if else statements
+ if (x_real < 0) x = 0.;
+
+ if (x_real < 0) {
+ x = 0.;
+ }
+
+ if (x_real < 0) x = 0.;
+ else x = 1.;
+
+ if (x_real < 0) {
+ x = 0.;
+ } else {
+ x = 1.;
+ }
+
+ if (x_real < 0) x = 0.;
+ else if (x_real > 1) x = 1.;
+ else x = 0.5;
+
+ if (x_real < 0) {
+ x = 0.;
+ } else if (x_real > 1) {
+ x = 1.;
+ } else {
+ x = 0.5;
+ }
+
+ // for loops
+ for (i in 1:5) {
+ print("i = ", i);
+ }
+ // for (j in echo) {
+ // print("j = ", j);
+ // }
+ // while loop
+ while (1) {
+ break;
+ continue;
+ }
+
+ // reject statement
+ reject("reject statment ", x_real);
+
+ // print statement
+ print("print statement ", x_real);
+ print("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_~@#$%^&*`'-+={}[].,;: ");
+
+ // increment log probability statements;
+ target += 1.;
+
+ // valid integer literals
+ k = 0;
+ k = 1;
+ k = -1;
+ k = 256;
+ k = -127098;
+ k = 007;
+
+ // valid real literals
+ x = 0.0;
+ x = 1.0;
+ x = 3.14;
+ x = 003.14;
+ x = -217.9387;
+ x = 0.123;
+ x = .123;
+ x = 1.;
+ x = -0.123;
+ x = -.123;
+ x = -1.;
+ x = 12e34;
+ x = 12E34;
+ x = 12.e34;
+ x = 12.E34;
+ x = 12.0e34;
+ x = 12.0E34;
+ x = .1e34;
+ x = .1E34;
+ x = -12e34;
+ x = -12E34;
+ x = -12.e34;
+ x = -12.E34;
+ x = -12.0e34;
+ x = -12.0E34;
+ x = -.1e34;
+ x = -.1E34;
+ x = 12e-34;
+ x = 12E-34;
+ x = 12.e-34;
+ x = 12.E-34;
+ x = 12.0e-34;
+ x = 12.0E-34;
+ x = .1e-34;
+ x = .1E-34;
+ x = -12e-34;
+ x = -12E-34;
+ x = -12.e-34;
+ x = -12.E-34;
+ x = -12.0e-34;
+ x = -12.0E-34;
+ x = -.1e-34;
+ x = -.1E-34;
+ x = 12e+34;
+ x = 12E+34;
+ x = 12.e+34;
+ x = 12.E+34;
+ x = 12.0e+34;
+ x = 12.0E+34;
+ x = .1e+34;
+ x = .1E+34;
+ x = -12e+34;
+ x = -12E+34;
+ x = -12.e+34;
+ x = -12.E+34;
+ x = -12.0e+34;
+ x = -12.0E+34;
+ x = -.1e+34;
+ x = -.1E+34;
+
+ // assignment statements
+ x = 1;
+ x += 1.;
+ x -= 1.;
+ x *= 1.;
+ x /= 1.;
+ y .*= x_vector;
+ y ./= x_vector;
+
+ // operators
+ x = x_real && 1;
+ x = x_real || 1;
+ x = x_real < 1.;
+ x = x_real <= 1.;
+ x = x_real > 1.;
+ x = x_real >= 1.;
+ x = x_real + 1.;
+ x = x_real - 1.;
+ x = x_real * 1.;
+ x = x_real / 1.;
+ x = x_real ^ 2.;
+ x = x_real % 2;
+ x = !x_real;
+ x = +x_real;
+ x = -x_real;
+ x = x_int ? x_real : 0.;
+
+ y = x_row_vector';
+ y = x_matrix \ x_vector;
+ y = x_vector .* x_vector;
+ y = x_vector ./ x_vector;
+
+ // parenthized expression
+ x = (x_real + x_real);
+
+ // block statement
+ {
+ real z;
+ z = 1.;
+ }
+
+ // built-in functions
+ x = log(1.);
+ x = exp(1.);
+
+ // non-built-in function
+ x = foo(1.);
+
+ // constants and nullary functions
+ x = machine_precision();
+ x = pi();
+ x = e();
+ x = sqrt2();
+ x = log2();
+ x = log10();
+ // special values
+ x = not_a_number();
+ x = positive_infinity();
+ x = negative_infinity();
+ x = machine_precision();
+ // log probability
+ x = target();
+
+ // sampling statement
+ x_real ~ normal(0., 1.);
+
+ // truncation
+ x_real ~ normal(0., 1.) T[-1., 1.];
+ x_real ~ normal(0., 1.) T[, 1.];
+ x_real ~ normal(0., 1.) T[-1., ];
+ x_real ~ normal(0., 1.) T[ , ];
+
+ // transformation on lhs of sampling
+ log(x_real) ~ normal(0., 1.);
+
+ // lhs indexes
+ y[1] = 1.;
+ A[1, 2] = 1.;
+ A[1][2] = 1.;
+
+ // special functions
+ odeout = integrate_ode(ode_func, {1.}, x_real, {1.}, {1.}, {1.}, {0});
+ odeout = integrate_ode_bdf(ode_func, {1.}, x_real, {1.}, {1.}, {1.}, {0},
+ x_real, x_real, x_int);
+ odeout = integrate_ode_rk45(ode_func, {1.}, x_real, {1.}, {1.}, {1.}, {0},
+ x_real, x_real, x_int);
+ // algout = algebra_solver(algebra_func, x_vector, x_vector, {1.}, {0});
+
+ // distribution functions
+ x = normal_lpdf(0.5 | 0., 1.);
+ x = normal_cdf(0.5, 0., 1.);
+ x = normal_lcdf(0.5 | 0., 1.);
+ x = normal_lccdf(0.5 | 0., 1.);
+ x = binomial_lpmf(1 | 2, 0.5);
+
+ // deprecated features
+ foo <- 1;
+ increment_log_prob(0.0);
+ y_hat = integrate_ode(sho, y0, t0, ts, theta, x_r, x_i);
+ x = get_lp();
+ x = multiply_log(1.0, 1.0);
+ x = binomial_coefficient_log(1.0, 1.0);
+ // deprecated distribution functions versions
+ x = normal_log(0.5, 0.0, 1.0);
+ x = normal_cdf_log(0.5, 0.0, 1.0);
+ x = normal_ccdf_log(0.5, 0.0, 1.0);
+
+}
+generated quantities {
+ real Y;
+ // rng function
+ Y = normal_rng(0., 1.);
+}
diff --git a/data/syntax/stan.xml b/data/syntax/stan.xml new file mode 100644 --- /dev/null +++ b/data/syntax/stan.xml @@ -0,0 +1,129 @@ + + + + + + break + continue + else + for + if + in + return + while + + + reject + print + integrate_ode + integrate_ode_bdf + integrate_ode_rk45 + algebra_solver + + + int + real + vector + ordered + positive_ordered + simplex + unit_vector + row_vector + matrix + cholesky_factor_corr + cholesky_factor_cov + corr_matrix + cov_matrix + void + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +