
Description="Applied Type System"

Digits=[[ (?:0x|0X|0b|0B)[0-9a-fA-F]+|\d*[\.\_]?\d+(?:[eE][\-\+]\d+)?[lLuUbfdm]* ]]

Keywords={
  { Id=1,
    List={"and", "as", "assert", "asr", "begin", "", "class", "constraint", 
        "do", "done", "downto", "else", "end", "exception", "external", "false", "for", 
        "fun", "function", "functor", "if", "in", "include", "inherit", "initializer", 
        "land", "lazy", "let", "lor", "lsl", "lsr", "lxor", "match", "method", "mod", 
        "module", "mutable", "new", "object", "of", "open", "or", "private", "rec", 
        "sig", "struct", "then", "to", "true", "try", "type", "val", "virtual", "when", 
        "while", "with", "value", "staload", "macdef", "typedef", "static", "inline", 
        "return", "extern", "implement"},
  },
  { Id=2,
    List={"bool", "string", "int", "real", "word", "float", "unit", "option", "ref"},
  },
  { Id=2,
    Regex=[['[a-zA-Z0-9_']+]],
  },

  { Id=3,
    Regex=[[\b[A-Z][a-zA-Z0-9_']*(?=\.)]],
  },

  { Id=4,
    Regex=[[\b[A-Z][a-zA-Z0-9_']*]],
  },
}

Strings={
  Delimiter=[["|']],
}

IgnoreCase=false

Comments={
  { Block=false,
    Delimiter= { [[//]] },
  },
  { Block=true,
    Nested=true,
    Delimiter= { [[\/\*]],[[\*\/]],}
  },
  { Block=true,
    Nested=true,
    Delimiter= { [[\(\*]],[[\*\)]],}
  }

}

PreProcessor={
  Prefix=[[#]],
}

Operators=[[\(|\)|\[|\]|\{|\}|\,|\;|\:|\&|<|>|\!|\=|\_|\*|\%|\+|\-|\.|\^]]
