3 ms·
Can you given an example of how to write custom C abstractions with Awk?
by coliveira 11y ago
Can you given an example of how to write custom C abstractions with Awk?
- generic_user 11y ago[edit] keep in mind this is just a simple example. Awk is just one tool in the toolbox. 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/020107981X 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; }
- benwaffle 11y agohttps://www.cs.rit.edu/~ats/books/ooc.pdf https://www.cs.rit.edu/~ats/books/ooc.pdf