(* rand.mll *) (* This is the definition of the file that is the input to ocamllex *) (* It is used to create a lexer. *) (* This file is full of REGULAR_EXPRESSIONS that are needed to create TOKENS *) (* This file is an attempt to figure out how to use ML while at the same time actually solving this problem that Rand had earlier. The idea is to figure out when an expression has a string operator in it. This of course will be no help to Rand because he needs one in C++, but all of the concepts will be the same. *) { open Rand_parse exception Eof } rule token = parse [' ' '\t'] { token lexbuf } | ['\n'] { EOL } | '$'['A'-'Z' 'a'-'z']['A'-'Z' 'a'-'z' '0'-'9'] { ID } | ['0'-'9']+'.'['0'-'9']+ { FLOAT } | ['0'-'9']+ { INT } | '"' [^ '"' '\\' '\n' '\r']* '"' { STRING } | '%' { MOD } | '.' { DOT } | '+' { PLUS } | '-' { MINUS } | '*' { TIMES } | '/' { DIV } | '(' { LPAREN } | ')' { RPAREN } | _ { token lexbuf } (* Normally . matches any char... *) | eof { raise Eof }