diff options
| author | 2025-09-12 04:02:02 +0800 | |
|---|---|---|
| committer | 2025-09-12 04:02:02 +0800 | |
| commit | 0288d0956330d5ac8db48b752240f723e8703929 (patch) | |
| tree | 0297dee9f8166af0a856dd3a1057ad5f25f14c6a /src/oneroll/grammar.pest | |
| parent | 5135876b5e2a6c40232414ea0b7eb875fa225cf0 (diff) | |
| download | OneRoll-0288d0956330d5ac8db48b752240f723e8703929.tar.gz OneRoll-0288d0956330d5ac8db48b752240f723e8703929.zip | |
feat: initial basic roll features
Diffstat (limited to 'src/oneroll/grammar.pest')
| -rw-r--r-- | src/oneroll/grammar.pest | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/oneroll/grammar.pest b/src/oneroll/grammar.pest new file mode 100644 index 0000000..01b97e9 --- /dev/null +++ b/src/oneroll/grammar.pest @@ -0,0 +1,43 @@ +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 + | reroll + | reroll_once + | keep_high + | keep_low + | drop_high + | drop_low +} + +explode = { "!" } +reroll = { "r" ~ number } +reroll_once = { "ro" ~ number } +keep_high = { "kh" ~ number } +keep_low = { "kl" ~ number } +drop_high = { "dh" ~ number } +drop_low = { "dl" ~ number } + +op = { "+" | "-" | "*" | "/" | "^" } + +main = { SOI ~ dice_expr ~ EOI }
\ No newline at end of file |
