The current production for StringLiteral does not allow for the use single
quotes inside double quotes, and vice versa, with escaping.
I suggest changing the production for StringLiteral to the following:
StringLiteral ::= '([^']|\'|\"|
an alternative form that may be clearer would be:
StringLiteral ::= '([^']|(['"]))*'