Annotation of researchv10no/cmd/sml/src/lex/hookup.sml, revision 1.1.1.1

1.1       root        1: (* Copyright 1989 by AT&T Bell Laboratories *)
                      2: signature LEX = sig
                      3:     type lexer
                      4:     val mkLex : {stream : instream, interactive : bool} -> 
                      5:                 {nextToken : Token.token ref,
                      6:                  prompt : string ref,
                      7:                  advance : unit -> unit}
                      8: end
                      9: 
                     10: structure Lex : LEX =
                     11: struct
                     12:  type lexer ={nextToken : Token.token ref,
                     13:                  prompt : string ref,
                     14:                  advance : unit -> unit}
                     15: 
                     16:  fun mkLex{stream,interactive} =
                     17:   let val prompt = ref ""
                     18:       val lexarg = {comLevel = ref 0, lineNum = ErrorMsg.lineNum,
                     19:                       complain = ErrorMsg.complain}
                     20: 
                     21:       val nextToken = ref Token.SEMICOLON
                     22: 
                     23:       val doprompt = ref true
                     24: 
                     25:       fun getline _ =(if !doprompt then (output std_out (!prompt);
                     26:                                         flush_out std_out;
                     27:                                         doprompt := false)
                     28:                                   else ();
                     29:                      let val s = input_line stream
                     30:                      in doprompt := (ordof(s,size s - 1)=ord("\n")
                     31:                                     handle Ord => false);
                     32:                         s
                     33:                      end)
                     34: 
                     35:      val get = Mlex.makeLexer(if interactive then getline else input stream)
                     36:                lexarg
                     37:      fun advance() = nextToken := get()
                     38: 
                     39:   in {nextToken=nextToken, prompt=prompt, advance=advance}
                     40:  end
                     41:     
                     42: end

unix.superglobalmegacorp.com

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