class Rouge::Lexers::OCL

def self.builtins

def self.builtins
  @builtins ||= Set.new %w(
    self null result true false invalid @pre
    )
end

def self.functions

def self.functions
  @functions ||= Set.new %w(
    oclAsSet oclIsNew oclIsUndefined oclIsInvalid oclAsType oclIsTypeOf
    oclIsKindOf oclInState oclType oclLocale hasReturned result
    isSignalSent isOperationCallabs floor round max min toString div mod
    size substring concat toInteger toReal toUpperCase toLowerCase
    indexOf equalsIgnoreCase at characters toBoolean includes excludes
    count includesAll excludesAll isEmpty notEmpty sum product
    selectByKind selectByType asBag asSequence asOrderedSet asSet flatten
    union intersection including excluding symmetricDifferencecount
    append prepend insertAt subOrderedSet first last reverse subSequence
    any closure collect collectNested exists forAll isUnique iterate one
    reject select sortedBy allInstances average conformsTo
  )
end

def self.keywords

def self.keywords
  @keywords ||= Set.new %w(
    context pre post inv init body def derive if then else endif import
    package endpackage let in
  )
end

def self.keywords_type

def self.keywords_type
  @keywords_type ||= Set.new %w(
    Boolean Integer UnlimitedNatural Real String OrderedSet Tuple Bag Set
    Sequence OclInvalid OclVoid TupleType OclState Collection OclMessage
  )
end

def self.operators

def self.operators
  @operators ||= Set.new %w(
    or xor and not implies
  )
end