Annotation of researchv10no/cmd/sml/doc/examples/awk/awk.sml, revision 1.1

1.1     ! root        1: (* awk.sml *)
        !             2: 
        !             3: signature AWK =
        !             4: sig
        !             5:   val makeInt : string -> int  (* translates a digit string into an int *)
        !             6:   val awk : instream * (string list  -> unit) * (unit -> unit) -> unit
        !             7: end
        !             8: 
        !             9: structure Awk : AWK =
        !            10: struct
        !            11: 
        !            12:   val digit0 = ord "0"
        !            13:   and digit9 = ord "9"
        !            14:   exception MakeInt
        !            15:   fun makeInt (s:string) : int =
        !            16:       (* translates string s into an integer.
        !            17:          Bug: doesn't deal with negative integers *)
        !            18:       let val len = length s
        !            19:          fun translate(i,n) =
        !            20:              if i<len
        !            21:              then let val c = ordof(s,i)
        !            22:                    in if digit0 <= c andalso c <= digit9
        !            23:                       then translate(i+1,10*n+c-digit0)
        !            24:                       else raise MakeInt
        !            25:                   end
        !            26:              else n
        !            27:        in translate(0,0)
        !            28:       end
        !            29: 
        !            30:   exception END
        !            31: 
        !            32:   fun parseStream (instream) = 
        !            33:       fn () => if end_of_stream instream
        !            34:               then raise END
        !            35:               else Lex2.words(input_line(instream))
        !            36: 
        !            37:   fun awk(instream,step,final) =
        !            38:       let val lines = parseStream instream
        !            39:          fun iter () = (step(lines()); iter())
        !            40:        in iter() handle END => final()
        !            41:       end
        !            42: 
        !            43: end
        !            44: 
        !            45: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.