square brackets mean optional argument in BNF, it is not what is intended here