explain BNF