ISTART FN() { teff() ; tass() ; tsta() ; tasssta() ; tiff() ; tifass() ; return 0 ; } teff() { /* simple operator test */ /* first evaluate for side effects */ LSTART X + Y X - Y X / Y X % Y X * Y X & Y X | Y X ^ Y X || Y X && Y X << S X >> S -X !X ~X X == Y X != Y X <= Y X >= Y X < Y X > Y X ? X : Y } tass() { LSTART /* assignment ops */ Z1 = X Z1 += X Z1 -= X Z1 /= X Z1 %= X Z1 *= X Z1 &= X Z1 |= X Z1 ^= X Z1 <<= S Z1 >>= S Z1 ++ Z1 -- -- Z1 ++ Z1 } tsta() { /* secondly evaluate and use the value */ LSTART Z2 = ( X + Y ) Z2 = ( X - Y ) Z2 = ( X / Y ) Z2 = ( X % Y ) Z2 = ( X * Y ) Z2 = ( X & Y ) Z2 = ( X | Y ) Z2 = ( X ^ Y ) Z2 = ( X || Y ) Z2 = ( X && Y ) Z2 = ( X << S ) Z2 = ( X >> S ) Z2 = ( -X ) Z2 = ( !X ) Z2 = ( ~X ) Z2 = ( X == Y ) Z2 = ( X != Y ) Z2 = ( X <= Y ) Z2 = ( X >= Y ) Z2 = ( X < Y ) Z2 = ( X > Y ) Z2 = ( X ? X : Y ) } tasssta() { /* assignment ops */ LSTART Z2 = ( Z1 = X ) Z2 = ( Z1 += X ) Z2 = ( Z1 -= X ) Z2 = ( Z1 /= X ) Z2 = ( Z1 %= X ) Z2 = ( Z1 *= X ) Z2 = ( Z1 &= X ) Z2 = ( Z1 |= X ) Z2 = ( Z1 ^= X ) Z2 = ( Z1 <<= S ) Z2 = ( Z1 >>= S ) Z2 = ( Z1 ++ ) Z2 = ( Z1 -- ) Z2 = ( -- Z1 ) Z2 = ( ++ Z1 ) } tiff() { LSTART /* conditional context */ if ( X + Y ) yes() ; else no() if ( X - Y ) yes() ; else no() if ( X / Y ) yes() ; else no() if ( X % Y ) yes() ; else no() if ( X * Y ) yes() ; else no() if ( X & Y ) yes() ; else no() if ( X | Y ) yes() ; else no() if ( X ^ Y ) yes() ; else no() if ( X || Y ) yes() ; else no() if ( X && Y ) yes() ; else no() if ( X << S ) yes() ; else no() if ( X >> S ) yes() ; else no() if ( -X ) yes() ; else no() if ( !X ) yes() ; else no() if ( ~X ) yes() ; else no() if ( X == Y ) yes() ; else no() if ( X != Y ) yes() ; else no() if ( X <= Y ) yes() ; else no() if ( X >= Y ) yes() ; else no() if ( X < Y ) yes() ; else no() if ( X > Y ) yes() ; else no() if ( X ? X : Y ) yes() ; else no() } tifass() { LSTART /* assignment ops */ if ( Z1 = X ) yes() ; else no() if ( Z1 += X ) yes() ; else no() if ( Z1 -= X ) yes() ; else no() if ( Z1 /= X ) yes() ; else no() if ( Z1 %= X ) yes() ; else no() if ( Z1 *= X ) yes() ; else no() if ( Z1 &= X ) yes() ; else no() if ( Z1 |= X ) yes() ; else no() if ( Z1 ^= X ) yes() ; else no() if ( Z1 <<= S ) yes() ; else no() if ( Z1 >>= S ) yes() ; else no() if ( Z1 ++ ) yes() ; else no() if ( Z1 -- ) yes() ; else no() if ( -- Z1 ) yes() ; else no() if ( ++ Z1 ) yes() ; else no() } yes() { printf("yes ") ; } no() { printf("no ") ; }