// ------------------------------------------------
// The tiny language used in the ulator DSL
// ------------------------------------------------
WHITESPACE = _{ " " | "\t" | "\r" | "\n" }
program = { reproducibility }
reproducibility = { "reproducibility" ~ "{" ~ statement* ~ "}" }
statement = { identifier ~ "=" ~ expr }
expr = { term ~ (("+" | "-") ~ term)* }
term = { factor ~ (("x" | "*") ~ factor)* }
factor = _{ reference | signed_number | identifier | "(" ~ expr ~ ")" }
reference = { "@" ~ identifier ~ ("#" ~ number)? }
identifier = @{ ASCII_ALPHANUMERIC+ }
signed_number = { ("-")? ~ number }
number = @{ (ASCII_DIGIT | "_")+ }