143 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			143 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
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 ") ; }
 |