25 lines
644 B
Factor
25 lines
644 B
Factor
! 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 ;
|
|
|