// Sten M. Andersen, www.stenmorten.com, 2003 // Prefix-to-Infix (fully parent.) char ch; char tr['K']; void error(); void get_char() { do ch = getch(); while ( ch <= ' ' ); } void prefix() { char c; do ch = getchar(); while ( ch <= ' ' ); switch ( ch ) { case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': printf( "%c", ch ); break; case 'N': printf("-" ); prefix(); break; case 'A': case 'C': case 'E': case 'K': c = ch; printf("("); prefix(); printf( "%c", tr[ c ] ); prefix(); printf(")"); break; default: error(); } } void error() { printf("Seen %c when A, C, E, K, N or a, b, .., z expected.\n", ch ); } int main() { tr['A'] = 'v'; tr['C'] = '>'; tr['E'] = '='; tr['K'] = '&'; tr['N'] = '-'; do { prefix(); printf("\n"); } while ( 1 ); }