33 lines · 752 B · Standard ML
RawDownload
(* The shallow abstract syntax *) datatype location =    Location of int * int; datatype regular_expression =    Epsilon  | Characters  of char list  | Sequence    of regular_expression * regular_expression  | Alternative of regular_expression * regular_expression  | Repetition  of regular_expression  | Name        of string; datatype lexer_definition =    Lexdef of location *              (string * regular_expression) list *              (string * (regular_expression * location) list) list; (* Representation of automata *) datatype automata =    Perform of int  | Shift of automata_trans * automata_move Array.arrayand automata_trans =    No_remember  | Remember of intand automata_move =    Backtrack  | Goto of int;