-"%%{line}" { return LINE; }
-"%%{skeleton-line}" { return SLINE; }
-
-"%%{section}" { return SECTION; }
+"@output ".*\n {
+ char const *filename = yytext + sizeof "@output " - 1;
+ yytext[yyleng - 1] = '\0';
+
+ if (*filename == '@')
+ {
+ if (strcmp (filename, "@output_header_name@") == 0)
+ filename = spec_defines_file;
+ else if (strcmp (filename, "@output_parser_name@") == 0)
+ filename = parser_file_name;
+ else
+ abort ();
+ }
+
+ XFREE (outname);
+ outname = xstrdup (filename);
+ yyout = xfopen (outname, "w");
+ lineno = 1;
+}