Fixed two (potential) issues

* the `DATE` rule could match an empty string (lexer rules must always match at least 1 char, otherwise the lexer might go in an infinite loop!)
* the literal `|` inside a character class does not function as a logical *OR*: `[a|b]` matches one of: `'a'`, `'|'` or `'b'`. Either do `[ab]` or `('a'|'b')`. Note that the `[...]` will always match a single char, I therefor proposed ('w'|'d'|'h'|'m'|'s'|'ms')

Good luck!