How to syntax-highlight a part of file in a different syntax?
You can use my SyntaxRange plugin for that.
Either explicitly assign the range, e.g.
:10,20SyntaxInclude bnf
or automatically based on the delimiting patterns:
:call SyntaxRange#Include('<BNF>', '</BNF>', 'bnf')
for many file types vim will use the heredoc names as a clue. For example in php files I'm often creating here docs thus:
<?php
$my_html = <<<html
<h1>Solar</h1>
<p>Is <em>good</em></p>
html;
$my_js = <<<javascript
alert('yeah baby');
javascript;
$my_sql = <<<sql
SELECT user
FROM mytable
WHERE energy = 'solar';
sql;
works beautifully, with only problem being that indentation is problematic (the closing marker cannot have preceding spaces)