I think .*? can match any characters except \n, but follow can not parse '{' and '}'
Inside a parser rule, the . matches any token, not any character. Change the rule into a lexer rule instead:
HeadDesc : '<?' .*? '?>';
And then the . will also match line breaks.