- expression → simple_expression repeat | fcount ( die , condition_list )
- repeat → { num } | ε
- simple_expression → term simple_expression'
- simple_expression' → addop term simple_expression' | ε
- term → factor term'
- term' → mulop factor term' | ε
- factor → num factor' | [ num d num addop extrema ] |( simple_expression ) | min | max
- factor' → d num | ε
- min → fmin ( simple_expression , simple_expression )
- max → fmax ( simple_expression , simple_expression )
- condition_list → condition condition_list'
- condition_list' → , condition condition_list' | ε
- condition → relop num
- num → [1-9][0-9]*
- d → d|D
- addop → + | -
- mulop → * | /
- relop → > | < | >= | <= | =
- extrema → MIN | MAX
- min → min
- max → max
- count → count
- whitespace
- num
- d
- relop
- extrema
- min
- max
- count
- catchall
1d20 + 4 + min([2d4-MAX], 3)
max(10, 1d20 + 4) # evaluate 2 simple_expressions, return max value
min(2d20, 15)
max(10, max(1d10, 1d20))
[4d6 - MIN] # roll 4 six-sided dice, subtract the lowest value
[4d6 - MAX] # roll 4 six-sided dice, subtract the highest value
count(4d6, >4)
count(10d6, >=5, =1, =6, <=4)