001         package com.croftsoft.apps.compiler.mini.node;
002    
003         import java.util.*;
004    
005         /*********************************************************************
006         * Parse tree node for the Mini programming language.
007         *
008         * @see
009         *   MiniNode
010         *
011         * @author
012         *   <A HREF="http://www.alumni.caltech.edu/~croft/">David W. Croft</A>
013         * @version
014         *   1999-04-25
015         *********************************************************************/
016    
017         public class  BlockMiniNode extends AbstractMiniNode
018         //////////////////////////////////////////////////////////////////////
019         //////////////////////////////////////////////////////////////////////
020         {
021    
022         protected DeclarationSequenceMiniNode  declarationSequenceMiniNode;
023         protected StatementSequenceMiniNode    statementSequenceMiniNode;
024    
025         //////////////////////////////////////////////////////////////////////
026         //////////////////////////////////////////////////////////////////////
027    
028         public  BlockMiniNode (
029           DeclarationSequenceMiniNode  declarationSequenceMiniNode,
030           StatementSequenceMiniNode    statementSequenceMiniNode )
031         //////////////////////////////////////////////////////////////////////
032         {
033           this.declarationSequenceMiniNode = declarationSequenceMiniNode;
034           this.statementSequenceMiniNode   = statementSequenceMiniNode;
035         }
036    
037         public  BlockMiniNode (
038           StatementSequenceMiniNode  statementSequenceMiniNode )
039         //////////////////////////////////////////////////////////////////////
040         {
041           this ( null, statementSequenceMiniNode );
042         }
043    
044         //////////////////////////////////////////////////////////////////////
045         //////////////////////////////////////////////////////////////////////
046    
047         public DeclarationSequenceMiniNode  getDeclarationSequenceMiniNode ( )
048           { return declarationSequenceMiniNode; }
049    
050         public StatementSequenceMiniNode  getStatementSequenceMiniNode ( )
051           { return statementSequenceMiniNode; }
052    
053         //////////////////////////////////////////////////////////////////////
054         // MiniNode interface methods
055         //////////////////////////////////////////////////////////////////////
056    
057         public void  generate ( MiniNodeCodeVisitor  miniNodeCodeVisitor )
058         //////////////////////////////////////////////////////////////////////
059         {
060           miniNodeCodeVisitor.generateBlock ( this );
061         }
062    
063         //////////////////////////////////////////////////////////////////////
064         //////////////////////////////////////////////////////////////////////
065    
066         public void  checkSemantics ( Stack  parentMiniNodeStack )
067           throws SemanticErrorException
068         //////////////////////////////////////////////////////////////////////
069         {
070           parentMiniNodeStack.push ( this );
071    
072           if ( declarationSequenceMiniNode != null )
073           {
074             declarationSequenceMiniNode.checkSemantics (
075               parentMiniNodeStack );
076           }
077    
078           if ( statementSequenceMiniNode != null )
079           {
080             statementSequenceMiniNode.checkSemantics ( parentMiniNodeStack );
081           }
082    
083           parentMiniNodeStack.pop ( );
084         }
085    
086         //////////////////////////////////////////////////////////////////////
087         //////////////////////////////////////////////////////////////////////
088         }