Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- type internal NumberStates =
- | Start
- | Sign
- | Integer
- | Dot
- | Float
- | E
- | ExponentSign
- let internal (|Number|_|) input =
- let (|Exp|_|) = function | NextToken "e" x -> Some x | _ -> None
- let rec ParseNumber cont =
- function
- | Start -> function
- | Minus (tok,tail) -> ParseNumber (cont+tok) Sign tail
- | Digits (tok,tail) -> ParseNumber (cont+tok) Integer tail
- | Decimal (tok,tail) -> ParseNumber (cont+tok) Dot tail
- | _ -> None
- | Sign -> function
- | Digits (tok,tail) -> ParseNumber (cont+tok) Integer tail
- | Decimal (tok,tail) -> ParseNumber (cont+tok) Dot tail
- | _ -> None
- | Integer -> function
- | Decimal (tok,tail) -> ParseNumber (cont+tok) Dot tail
- | Exp (tok,tail) -> ParseNumber (cont+tok) E tail
- | _ -> Some cont
- | Dot -> function
- | Decimal (tok,tail) -> ParseNumber (cont+tok) Float tail
- | Exp (tok,tail) -> ParseNumber (cont+tok) E tail
- | _ -> Some cont
- | Float -> function
- | Exp (tok,tail) -> ParseNumber (cont+tok) E tail
- | _ -> Some cont
- | E -> function
- | Minus (tok,tail) -> ParseNumber (cont+tok) ExponentSign tail
- | Digits (tok,tail) -> Some (cont+tok)
- | _ -> None
- | ExponentSign -> function
- | Digits (tok,tail) -> Some (cont+tok)
- | _ -> None
- ParseNumber "" Start input
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement