{ open Alloyparse } let car = ['a'-'z' 'A'-'Z' '0'-'9' '\''] rule token = parse | "--" [^'\n']* '\n' { token lexbuf } | ['\000'-'\032']* { token lexbuf } | (['a'-'z' 'A'-'Z'] (car | ('_' car))*) as id { match id with | "univ" -> UNIV | "iden" -> IDEN | "none" -> NONE | "if" -> IF | "then" -> THEN | "else" -> ELSE | "let" -> LET | "or" -> OR | "implies" -> IMPLIES | "and" -> AND | "not" -> NOT | "some" -> SOME | "one" -> ONE | "lone" -> LONE | "no" -> NO | "in" -> IN | "all" -> ALL | "set" -> SET | "sig" -> SIG | "abstract" -> ABSTRACT | "extends" -> EXTENDS | "pred" -> PRED | "fun" -> FUN | "fact" -> FACT | "assert" -> ASSERT | "check" -> CHECK | "run" -> RUN | "open" -> OPEN | "module" -> MODULE | "exactly" -> EXACTLY | "for" -> FOR | "but" -> BUT | "expect" -> EXPECTS | _ -> IDENT (Str.global_replace (Str.regexp_string "'") "__quote__" id) } | ['0'-'9']+ { INT } | "+" { PLUS } | "-" { MOINS } | "++" { PLUSPLUS } | "&" { INTER } | "->" { FLECHE } | "[" {CROCHETG } | "]" { CROCHETD } | "<:" { RESTG } | ":>" { RESTD } | "." { POINT } | "~" { TILDE } | "(" { PARG } | ")" { PARD } | "|" { BARRE } | "," { VIRGULE } | "=" { EQ } | "||" { OR } | "=>" { IMPLIES } | "&&" { AND } | "!" { NOT } | "{" { ACCG } | "}" { ACCD } | ":" { DP } | "/" { DIV } | "<" { LT } | ">" { GT } | eof { EOF }