# Program to sanitize Yacc output and minor changes to it to suit the Icon # translator. # procedure to skip optional white space. procedure sws() return tab( many( ' \t' ) ) | "" end $define YY_STATE "yy_state" procedure main() local line, prefix while line := read() do { if line == "#" then next # omit lone #s -- illegal now else line ? { if write(="#endif") then next # omit illegal stuff else if (prefix := tab(find("yyerror"))) & ="yyerror" & sws() & ="(" & sws() & ="\"" then { # # We are beyond the 'yyerror( "'. Write the part of the # line before the call, then decide what to do about # the error message that follows. # writes(prefix) if ="syntax error\"" then writes("yyerror(yychar, yylval, ", YY_STATE) else if ="yacc stack overflow\"" then writes("tsyserr(\"parse stack overflow\"") else writes("tsyserr(\"parser: ") write(tab(0)) } else if ="extern char *malloc(), *realloc();" then { # let proto.h handle this declaration. } else write(tab(0)) } } end