Advertisement
Guest User

Untitled

a guest
May 3rd, 2014
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 1.57 KB | None | 0 0
  1. type internal NumberStates =
  2.     | Start
  3.     | Sign
  4.     | Integer
  5.     | Dot
  6.     | Float
  7.     | E
  8.     | ExponentSign
  9. let internal (|Number|_|) input =
  10.     let (|Exp|_|)   = function | NextToken "e" x -> Some x | _ -> None
  11.     let rec ParseNumber cont =
  12.         function
  13.         | Start -> function
  14.             | Minus     (tok,tail) -> ParseNumber (cont+tok) Sign tail
  15.             | Digits    (tok,tail) -> ParseNumber (cont+tok) Integer tail
  16.             | Decimal   (tok,tail) -> ParseNumber (cont+tok) Dot tail
  17.             | _ -> None
  18.         | Sign -> function
  19.             | Digits    (tok,tail) -> ParseNumber (cont+tok) Integer tail
  20.             | Decimal   (tok,tail) -> ParseNumber (cont+tok) Dot tail
  21.             | _ -> None
  22.         | Integer -> function
  23.             | Decimal   (tok,tail) -> ParseNumber (cont+tok) Dot tail
  24.             | Exp       (tok,tail) -> ParseNumber (cont+tok) E tail
  25.             | _ -> Some cont
  26.         | Dot -> function
  27.             | Decimal   (tok,tail) -> ParseNumber (cont+tok) Float tail
  28.             | Exp       (tok,tail) -> ParseNumber (cont+tok) E tail
  29.             | _ -> Some cont
  30.         | Float -> function
  31.             | Exp       (tok,tail) -> ParseNumber (cont+tok) E tail
  32.             | _ -> Some cont
  33.         | E -> function
  34.             | Minus     (tok,tail) -> ParseNumber (cont+tok) ExponentSign tail
  35.             | Digits    (tok,tail) -> Some (cont+tok)
  36.             | _ -> None
  37.         | ExponentSign -> function
  38.             | Digits    (tok,tail) -> Some (cont+tok)
  39.             | _ -> None
  40.     ParseNumber "" Start input
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement