1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
#!/bin/sed -f
# This file is used when generating code for the Ruby parser.
/^int yydebug;/{
i\
#ifndef yydebug
a\
#endif
}
/^extern int yydebug;/{
i\
#ifndef yydebug
a\
#endif
}
/^yydestruct.*yymsg/,/{/{
/^yydestruct/{
/,$/N
/[, *]p)/!{
H
s/^/ruby_parser_&/
s/)$/, p)/
/\*/s/p)$/struct parser_params *&/
}
}
/^#endif/{
x
/yydestruct/{
i\
\ struct parser_params *p;
}
x
}
/^{/{
x
/yydestruct/{
i\
#define yydestruct(m, t, v) ruby_parser_yydestruct(m, t, v, p)
}
x
}
}
/^yy_stack_print /,/{/{
/^yy_stack_print/{
/[, *]p)/!{
H
s/^/ruby_parser_&/
s/)$/, p)/
/\*/s/p)$/struct parser_params *&/
}
}
/^#endif/{
x
/yy_stack_print/{
i\
\ struct parser_params *p;
}
x
}
/^{/{
x
/yy_stack_print/{
i\
#define yy_stack_print(b, t) ruby_parser_yy_stack_print(b, t, p)
}
x
}
}
/^yy_reduce_print/,/^}/{
s/fprintf *(stderr,/YYFPRINTF (p,/g
}
s/^yysyntax_error (/&struct parser_params *p, /
s/ yysyntax_error (/&p, /
s/\( YYFPRINTF *(\)yyoutput,/\1p,/
s/\( YYFPRINTF *(\)yyo,/\1p,/
s/\( YYFPRINTF *(\)stderr,/\1p,/
s/\( YYDPRINTF *((\)stderr,/\1p,/
s/^\([ ]*\)\(yyerror[ ]*([ ]*parser,\)/\1parser_\2/
s!^ *extern char \*getenv();!/* & */!
s/^\(#.*\)".*\.tab\.c"/\1"parse.c"/
/^\(#.*\)".*\.y"/s:\\\\:/:g
|