Take a look at 'The AWK Programming Language ' Alfred V. Aho, Brian W. Kernighan, Peter J. Weinberger.
http://www.amazon.com/The-AWK-Programming-Language-Alfred/dp...
Yes, its that Aho and Kerninghan...
operators to C function mapping. you can run like so.
$ awk -f fixed.awk < fixst.in > fixed.c
--- fixed.awk ---
BEGIN {
printf("#include <stdio.h>\n");
printf("typedef long fixed;\n");
printf("void *send(fixed *this, char *message, ...);\n");
}
/^{/ {
Ndecl = 0;
printf("{\n");
}
/^}/ {
while(--Ndecl >= 0)
printf("\t%s\n", Destructor[Ndecl]);
printf("}\n");
}
/^:/ {
if($2~/fixed/) {
sub(/;/, "", $3);
printf("\tfixed *%s = send(NULL, \"fixed\");\n", $3);
Destructor[Ndecl++] = "send(" $3 ", \"~fixed\");"
}
else if ($4 ~ /(double)/) {
sub(/;/, "", $5);
printf("\tsend(%s, \"double\", &%s);\n", $5, $2);
}
else if ($3 ~ /^=/) {
sub(/;/, "", $4);
printf("\tsend(%s, \"=\", %s);\n", $2, $4);
}
else if ($3 ~ /^\+/) {
sub(/;/, "", $4);
printf("\tsend(%s, \"+=\", %s);\n", $2, $4);
}
else if ($3 ~ /^\*/) {
sub(/;/, "", $4);
printf("\tsend(%s, \"*=\", %s);\n", $2, $4);
}
}
/^[^{}:]/ { print }
--- fixst.in --- int main()
{
: fixed a;
: fixed b;
: fixed t0;
: fixed t1;
double f;
: a = 1.00;
: b = 9.99;
: t0 = 0.00;
: t1 = 2.00;
: t0 += t1;
: t0 *= b;
: t0 += a;
: f = (double)t0;
}
http://www.amazon.com/AWK-Programming-Language-Alfred-Aho/dp...
[1] http://www.amazon.com/The-AWK-Programming-Language-Alfred/dp...
1. some text files to process,
2. the patience to read through their man and info pages,
3. and a healthy appreciation of unix philosophy.
For learning awk at the highest level, the man page will not be enough, and I suggest reading this book: http://www.amazon.com/AWK-Programming-Language-Alfred-Aho/dp...