lexan: split LexicalAnalyser into two components

Split LexicalAnalyser into a specification and an analyser so that the
specification only has to be created once.

Signed-off-by: Peter Williams <pwil3058@gmail.com>