{ open Parser;; (* The type token is defined in parser.mli *) exception Eof;; exception Illegal;; } rule token = parse [' ' '\t' '\n'] { token lexbuf } (* skip blanks *) | "var" { VAR } | "alloc" { ALLOC } | "false" { BOOL false } | "true" { BOOL true } | "read" { READ } | "write" { WRITE } | "writeln" { WRITELN } | "array" { ARRAY } | "of" { OF } | "do" { DO } | "begin" { BEGIN } | "end" { END } | "if" { IF } | "then" { THEN } | "else" { ELSE } | "while" { WHILE } | "type" { TYPE } | "function" { FUNCTION } | "procedure" { PROCEDURE } | "integer" { INTEGER } | "boolean" { BOOLEAN } | "program" { PROGRAM } | '"' ( [^ '"' ] | "\\\"" ) * '"' { STRING (Lexing.lexeme lexbuf) } | ['A'-'Z''a'-'z'] + ['0'-'9'] * ''' * { IDENT (Lexing.lexeme lexbuf) } | ['0'-'9']+ { INT(int_of_string (Lexing.lexeme lexbuf)) } | ";;" { SEMISEMI } | ":=" { COLONEQUAL } | "<>" { LESSGREATER } | "<=" { LESSEQUAL } | ">=" { GREATEREQUAL } | '<' { LESS } | '>' { GREATER } | ";" { SEMI } | "," { COMMA } | ':' { COLON } | '=' { EQUAL } | '-' { MINUS } | '+' { PLUS } | '*' { TIMES } | '/' { DIV } | '(' { LPAREN } | ')' { RPAREN } | '[' { LBRACKET } | ']' { RBRACKET } | eof { raise Eof } | _ { raise Illegal }