I am writing a major mode for a programming language that has a well-defined grammar: it has a BNF, formalised in some happy files.
I don't particularly want to re-implement the BNF as a series of forward / backward regex scans (as many major modes do), although I would not be opposed to translating it either manually or automatically.
I am aware of SMIE, are there any other options available to me in Emacs lisp that allow me to define the grammar of the language and have as much automatically generated as possible, e.g. faces, sexp commands, imenu population.
I am concerned primarily with simplicity and correctness of the mode, rather than its raw performance, but I'd certainly like to have a rough idea of what the trade-offs are (obviously if the performance is too low it'd be unusable and therefore not appropriate to use).
This is somewhat related to Writing a Major Mode although further advanced, as I am already aware of everything under "Major Modes" in the Emacs Lisp manual.
UPDATE: I have studied and spoken with the author of Semantic and it isn't able to generate the
font-locks, it's more aiming to provide higher level tools and it's not something I am looking for.