I would say that your parser shouldn't have anything to do with your business logic; if forum administrators can turn tags on or off that should be handled when you're traversing your AST, not in the parser.
Your parser should merely be responsible for building the best syntax tree it can with the full knowledge of the grammar it's given. With that in mind I would recommend creating a rule for each valid BBCode tag and handle excluded tags after the parsing phase.
I also wonder what do you do when your parser recognizes invalid BBCode such as [z]invalid[/z]
?