What is so exciting about that? If you ignore details that arguably could be considered semantics (such as that variables have to be declared), most languages can be described by CFG. PGN is no exception, if you drop the requirement that the moves form a legal Chess game. I think it would be quite trivial to write down the CFG.
If it were not for the nesting of variations, PGN could even be generated by a regular expression. This is why flex can be used to parse it. I only have to take care of the parentheses nesting in the back end.
