summaryrefslogtreecommitdiffstatshomepage
path: root/docs/source/index.rst
blob: 22e88dbd79824ca406c4e2883dcec4bf799af3e4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
OneRoll
=======

.. toctree::
   :maxdepth: 2
   :caption: Contents


====

 - Basic dice rolling (XdY)
 - Mathematical operations: +, -, *, /, ^
 - Modifiers: !, kh, kl, dh, dl, r, ro
 - Bracket support
 - User comments (e.g., 3d6 + 2 # Attack roll)
 - Complete error 
 - Statistical rolling and analysis
 - Rich terminal UI (TUI) via textual
 - Python SDK and CLI


.. code-block:: peg
   :caption: Dice Expression Grammar

   WHITESPACE = _{ " " | "\t" | "\n" | "\r" }
   number = @{ "-"? ~ ("0" | ('1'..'9' ~ ('0'..'9')*)) }
   comment = { "#" ~ (!"\n" ~ ANY)* }
   dice_expr = { dice_term ~ (op ~ dice_term)* ~ comment? }
   dice_term = { 
      dice_roll 
      | paren_expr 
      | number 
   }
   paren_expr = { "(" ~ dice_expr ~ ")" }
   dice_roll = { 
      number ~ "d" ~ dice_sides ~ modifiers?
   }
   dice_sides = @{ number }
   modifiers = { modifier+ }
   modifier = { 
      explode
      | explode_alias
      | explode_keep_high
      | reroll
      | reroll_once
      | reroll_until
      | reroll_add
      | keep_alias
      | keep_high
      | keep_low
      | drop_high
      | drop_low
      | unique
      | sort
      | count
   }
   explode = { "!" }
   explode_alias = { "e" }
   explode_keep_high = { "K" ~ number }
   reroll = { "r" ~ number }
   reroll_once = { "ro" ~ number }
   reroll_until = { "R" ~ number }
   reroll_add = { "a" ~ number }
   keep_alias = { "k" ~ number }
   keep_high = { "kh" ~ number }
   keep_low = { "kl" ~ number }
   drop_high = { "dh" ~ number }
   drop_low = { "dl" ~ number }
   unique = { "u" }
   sort = { "s" }
   count = { "c" ~ number }
   op = { "+" | "-" | "*" | "/" | "^" }
   main = { SOI ~ dice_expr ~ EOI }