:nonzero-int (* (range "19") (any (range "09"))) :int (+ "0" :nonzero-int) :decimal (cmt (* (? (<- :int)) "." (<- (some (range "09")))) ,parse-decimal) :fraction (cmt (\* (? (\* (number :nonzero-int) :s+)) (number :nonzero-int) "/" (number :nonzero-int)) ,parse-fraction) :integer (cmt (number :nonzero-int) ,parse-integer) :num (+ :decimal :fraction :integer)