module alloy/lexical/Keywords
exports
  sorts SigQual MulQual Keyword
        Disj Private Cmd
  lexical syntax
    Keyword -> Id {reject}
    "abstract" -> SigQual
    "all" -> Keyword
    "and" -> Keyword
    "assert" -> Keyword
    "but" -> Keyword
    "check" -> Cmd
    "disj" -> Disj
    "else" -> Keyword
    "enum" -> Keyword
    "exactly" -> Keyword
    "expect" -> Keyword
    "extends" -> Keyword
    "fact" -> Keyword
    "for" -> Keyword
    "iden" -> Keyword
    "iff" -> Keyword
    "implies" -> Keyword
    "in" -> Keyword
    "int" -> Keyword
    "Int" -> Keyword
    "let" -> Keyword
    "lone" -> SigQual
    "lone" -> MulQual
    "module" -> Keyword
    "no" -> Keyword
    "none" -> Keyword
    "not" -> Keyword
    "one" -> SigQual
    "one" -> MulQual
    "open" -> Keyword
    "or" -> Keyword
    "private" -> Private
    Private -> SigQual
    "run" -> Cmd
    "set" -> MulQual
    "seq" -> Keyword
    "sig" -> Keyword
    "some" -> SigQual
    "some" -> MulQual
    "univ" -> Keyword
    SigQual -> Keyword
    MulQual -> Keyword
  lexical restrictions
    "abstract"
    "all"    
    "assert"
    "check"
    "disj"
    "else"
    "enum"
    "exactly"
    "extends"
    "fact"
    "iden"
    "iff"
    "implies"
    "in"
    "int"
    "Int"
    "let"
    "lone"
    "module"
    "none"
    "no"
    "not"
    "one"
    "open"
    "private"
    "run"
    "set"
    "sig"
    "some"
    "univ" -/- [A-Za-z0-9\_\$]

