blob: f72c1bb80f40fbf7249963b2505c6cae58edb8f8 (
plain) (
blame)
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
81
82
83
84
85
86
87
88
89
90
91
|
%{
#include <ctype.h>
/*
* GENERIC -- This filter takes a file containing a generic operator as input
* and generates as output either a set of files, one for each of the data
* types in the generic family, or a single file wherein the generic section
* has been duplicated for each case.
*/
#undef output
extern char *type_string;
extern char xtype_string[];
extern char type_char;
%}
W [ \t]
%%
PIXEL outstr (type_string);
XPIXEL outstr (xtype_string);
INDEF output_indef (type_char);
INDEF(S|I|L|R|D|X) ECHO;
SZ_PIXEL output_upper ("SZ_");
TY_PIXEL output_upper ("TY_");
$PIXEL outstr ("PIXEL");
$INDEF outstr ("INDEF");
[A-Z][A-Z_]*PIXEL {
yytext[strlen(yytext)-5] = '\0';
output_upper (yytext);
}
"$t" { if (isupper (type_char))
output (tolower (type_char));
else
output (type_char);
}
"$T" { if (islower (type_char))
output (toupper (type_char));
else
output (type_char);
}
"$/" pass_through();
[0-9]+("$f"|"$F") make_float (type_char);
{W}*"$if" do_if();
{W}*"$else" do_else();
{W}*"$endif" do_endif();
{W}*"$for" do_for();
{W}*"$endfor" do_endfor();
{W}*"$IF" do_if();
{W}*"$ELSE" do_else();
{W}*"$ENDIF" do_endif();
{W}*"$FOR" do_for();
{W}*"$ENDFOR" do_endfor();
"$$" output ('$');
"/*" copy_comment();
\" copy_string();
^\#if ECHO;
^\#else ECHO;
^\#endif ECHO;
^\#include ECHO;
\# copy_line();
^\% copy_line();
%%
/* LEX_INPUT -- Make input() callable as a function from the .c code.
*/
lex_input()
{
return (input());
}
/* LEX_UNPUT -- Make unput() callable as a function from the .c code.
*/
lex_unput (ch)
int ch;
{
unput (ch);
}
|