]> gitweb.factorcode.org Git - factor.git/blob - extra/dice/dice.factor
dice: adding some tests, simplify a bit.
[factor.git] / extra / dice / dice.factor
1 ! Copyright (C) 2010 John Benediktsson
2 ! See http://factorcode.org/license.txt for BSD license
3 USING: fry kernel lexer macros math math.parser peg.ebnf random
4 sequences ;
5 IN: dice
6
7 EBNF: parse-roll
8
9 number = ([0-9])+    => [[ string>number ]]
10 dice   = "d" number  => [[ second '[ _ random ] ]]
11 roll   = number dice => [[ first2 '[ 0 _ [ @ + 1 + ] times ] ]]
12 added  = "+" number  => [[ second '[ _ + ] ]]
13 total  = roll added? => [[ first2 [ append ] when* ]]
14 error  = .*          => [[ "unknown dice" throw ]]
15 rolls  = total | error
16
17 ;EBNF
18
19 MACRO: roll ( string -- ) parse-roll ;
20
21 SYNTAX: ROLL: scan-token parse-roll append! ;