COSC4307                     PROGRAM-5		Due:8/11/2004
                             QUADRUPLE GENERATOR(2)
 
	Task:
	This is to complete a quadruple generator which you started in 
	the Program-5. The following language constructs are additionally
	included:

	1. If-statements with matching "Else"
	2. For-loop statements.
	3. Array element references for which an additional quadruple 
	   "INDIRECT" is needed.
	4. Boolean expressions.

	Conventions:
	Use the following convention:
  
	1. QUADRUPLE OPERATOR NUMBERS, if you use integers:

	   1: READ
	   2: PRINT
	   3: =
	   4: +
	   5: *
	   6: -
	   7: NEG (NEGATING A VALUE)
	   8: INC (INCREMENTING A VALUE BY ONE)
	   9: DEC (DECREMENTING A VALUE BY ONE)
	  10: BR  (Unconditional branch)
	  11: BEQ  (BRANCH IF the first operand equals the second)
	  12: BNEQ (BRANCH IF the first operand is not equal to second) 
	  13: BGTR (BRANCH IF the first operand is greater than the second)
	  14: INDIRECT (Indirect addressing)
	  15: BB  (Boolean Branch)
	  16: RETURN (Returning to O/S)
    
	2. QUADRUPLE OPERANDS:
	   A. THE SYMBOL TABLE LOCATION OCCUPIED BY THE OPERAND.
	   B. OR A QUADRUPLE SEQUENCE NUMBER, IN THE CASE OF A BRANCH OPERATION.
    
	3. SYMBOL TABLE ORGANIZATION:
	   THE SYMBOL TABLE WILL HAVE THREE COLUMNS AS FOLLOWS:

	   A. FIRST COLUMN:	CONTAINS SYMBOLS THEMSELVES SUCH AS 
				IDENTIFIERS,CONSTANTS,TEMPORARY LOCATIONS, ETC.

	   B. SECOND COLUMN:	CONTAINS THE CLASS OF THE SYMBOLS AS FOLLOWS:
		1:	CONSTANTS.
		2:	SIMPLE VARIABLES.
		3:	ARRAY VARIABLES.
		4:	ARRAY ELEMENT REFERENCES.
		5:	TEMPORARY LOCATIONS.
		6:	OTHERS.
 
	   C. THIRD COLUMN:    IS A POINTER POINTING TO THE 
              ADDRESS IN THE LOCAL Data area THAT IS TO CONTAIN
              THE VALUE or values OF THE SYMBOL.
   
	OUTPUTS: 1. INPUT PROGRAM.
		 2. ALL QUADRUPLES either in numbers or in character strings
		    with sequence numbers preceding.

	Input Source Program: 
	
    	BEGIN
      	  INTEGER A(4,5), XXX(4,5,30), YYY(5,10)
          INTEGER X, Y, T; 
	  BOOLEAN A, B, C, D, E;
      	  FOR X=1 TO 4 DO
        	BEGIN	
        	FOR Y=1 TO 5 DO
         	  BEGIN
          	  T = 10*X + Y;
          	  A (X,Y) = T; 
          	  IF (Y-1) THEN
             		A(X,1) = A(X,1)+A(X,Y)
          	  FI;
          	  FOR Z = 1 TO 30 DO
            		XXX (X,Y,Z) = 10000*Z + 100*Y + X
          	  END;
        	PRINT A(X,1)
        	END;
	  IF (A OR NOT(B AND C AND NOT D OR E)) THEN
		PRINT A(4,1)
	  ELSE  PRINT A(4,5)
	    FI
      	  END .