Half of programming is learning to be an able toolsmith.
If no such tool exists, you'll have to make your own, perhaps using a pair of existing tools: sed and m4:[list][*]sed() transforms the input to a form m4() can understand[*]m4() 'replaces' the macros with suitable PHP code.
But then, isn't an SGML/XML processor is supposed to be able to handle this? If so, then if your input looked more like:
<html><body>
<php_init_sql />
<form name="frm" action="nextstep.php">
<gen_select_sql name="xxx"
cols="value, name"
table="select_opts"
match="@GET_cathegory"
option_format=" <option value=\"%1\">%2</option>\n"
/>
</form>
<php_end_sql />
</body></html>
then an XML processor should be able to produce the desired output. Here, <php_init_sql> is defined to output PHP code that handles the stuff done once-only in a PHP program (require-onces, includes, et al), including sql startup. <gen_select_sql> generates PHP code, that queries the DB and produces the complete <select>...</select>.
I think it all comes down to figuring out what you
really want to accomplish. After that, it becomes straightforward and clear. Shoot, if the input is 'clean' enough, you could write shell scripts, awk scripts, perl scripts, sed scripts, even ex scripts to process it.