dice: implementing randomized dice rolling with EBNF.
parent
fe7b482efe
commit
56404b8b89
|
@ -0,0 +1 @@
|
|||
John Benediktsson
|
|
@ -0,0 +1,24 @@
|
|||
! Copyright (C) 2010 John Benediktsson
|
||||
! See http://factorcode.org/license.txt for BSD license
|
||||
|
||||
USING: fry kernel lexer macros math math.parser peg.ebnf random
|
||||
sequences strings ;
|
||||
|
||||
IN: dice
|
||||
|
||||
EBNF: parse-roll
|
||||
|
||||
number = ([0-9])+ => [[ >string string>number ]]
|
||||
dice = "d" number => [[ second '[ _ random ] ]]
|
||||
roll = number dice => [[ first2 '[ 0 _ [ @ + 1 + ] times ] ]]
|
||||
added = "+" number => [[ second '[ _ + ] ]]
|
||||
total = roll added? => [[ first2 [ append ] when* ]]
|
||||
error = .* => [[ "unknown dice" throw ]]
|
||||
rolls = total | error
|
||||
|
||||
;EBNF
|
||||
|
||||
MACRO: roll ( string -- ) parse-roll ;
|
||||
|
||||
SYNTAX: ROLL: scan-token parse-roll append ;
|
||||
|
|
@ -0,0 +1 @@
|
|||
Random dice rolls (with modifiers)
|
Loading…
Reference in New Issue