From 0288d0956330d5ac8db48b752240f723e8703929 Mon Sep 17 00:00:00 2001 From: 简律纯 Date: Fri, 12 Sep 2025 04:02:02 +0800 Subject: feat: initial basic roll features --- src/oneroll/grammar.pest | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 src/oneroll/grammar.pest (limited to 'src/oneroll/grammar.pest') 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 -- cgit v1.2.3-70-g09d2