A parser for declarative DSLs