- /* Muscle. */
-"%%{"[a-zA-Z][0-9a-zA-Z_-]+"}" {
- yylval.muscle = xstrndup (yytext + 3, yyleng - 4);
- return MUSCLE;
+"@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
+ fatal ("invalid token in skeleton: %s", yytext);
+ }
+
+ XFREE (outname);
+ outname = xstrdup (filename);
+ xfclose (yyout);
+ yyout = xfopen (outname, "w");
+ lineno = 1;