1(* User declarations.  This is a -*- sml -*- file *)
2structure Tokens = Tokens
3type pos = int
4
5type svalue = Tokens.svalue
6type ('a,'b) token = ('a,'b)Tokens.token
7type lexresult = (svalue,pos) token
8
9val pos = ref 1
10fun eof () = Tokens.EOF(!pos,!pos)
11
12%%
13%header (functor DiskFilesLexFun(structure Tokens : DiskFiles_TOKENS));
14digit=[0-9];
15integer={digit}+;
16idstring=\" ([^\"\\] | "\\\"" | "\\\\" | "\\n")* \";
17%%
18\n => (pos := !pos + 1; continue());
19[\ \t]+ => (continue());
20"$"   => (Tokens.DOLLAR(!pos,!pos));
21"."   => (Tokens.FULLSTOP(!pos,!pos));
22"\\"   => (Tokens.BACKSLASH(!pos,!pos));
23"("   => (Tokens.LPAREN(!pos,!pos));
24")"   => (Tokens.RPAREN(!pos,!pos));
25"["   => (Tokens.LBRACKET(!pos,!pos));
26"]"   => (Tokens.RBRACKET(!pos,!pos));
27"TYV"   => (Tokens.TYV(!pos,!pos));
28"TYOP"   => (Tokens.TYOP(!pos,!pos));
29"TMV"   => (Tokens.TMV(!pos,!pos));
30"TMC"   => (Tokens.TMC(!pos,!pos));
31"IDS"   => (Tokens.IDS(!pos,!pos));
32"TYPES"   => (Tokens.TYPES(!pos,!pos));
33"TERMS"   => (Tokens.TERMS(!pos,!pos));
34"THEOREMS"   => (Tokens.THEOREMS(!pos,!pos));
35{integer} => (Tokens.NUMBER(Option.valOf (Int.fromString yytext),
36                            !pos, !pos));
37{idstring} => (let val substr = String.substring(yytext,1,size yytext - 2)
38               in
39                 Tokens.ID(valOf (String.fromString substr), !pos, !pos)
40               end);
41