3) What ever code or pseudocode this is, you need to distinguish between lists and strings. Otherwise you have noun ::= noun, which will get messy. Also, am I able to include regular expressions of some sort?
Read WikiPedia: Backus-Naur_form, it should answer most of that. If we wrap element names in angle brackets, that'll help us distinguish between them and terminals, but we don't have to do that until we start getting clashes. - MoonShadow
PeterTaylor was wondering about suggesting an option strict which requires terminals to be quoted.