top output = "range? " line = input line (('-' | '') . fromsign) (span(&digits) . from) + ('..' | '...') . dots + ('-' | '') . tosign span(&digits) . to :f(nomatch) n = fromsign from end = tosign to end = ident(dots, '...') end - 1 print output = le(n,end) n :f(top) n = n + 1 :(print) nomatch output = "Could't find a range!" :(top) end * wrap match with pos(0) ... rpos(0) to match full line