{
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 }
|
|