summaryrefslogtreecommitdiff
path: root/tool/ytab.sed
blob: 95a9b3e1eb33158e9fc9b367eea2b12c00284c8a (plain)
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