I'm thinking I might just write a typical ebnf generator, but then I'd be going from reinventing the wheel to reinventing the wheel, tire and hubcap.
EBNF generators I've used are very hands-offy because providing for the most common paths might somehow exclude some use cases.
So I think I want something that is EBNF+, and which is focused on describing c/json/lua/python type DSLs in a top-down way that allows accumulation of guidance through context, allows the user to validate in-situ rather than forcing them to write the code to build the parse tree, code to walk it and validate it and then code to do anything with it.
Start from EBNF and extend sideways, if you will.