updated grammar to better support immutable 'final' keyword