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  ProgramMiniNode extends AbstractMiniNode
018         //////////////////////////////////////////////////////////////////////
019         //////////////////////////////////////////////////////////////////////
020         {
021    
022         protected BlockMiniNode  blockMiniNode;
023    
024         //////////////////////////////////////////////////////////////////////
025         //////////////////////////////////////////////////////////////////////
026    
027         public  ProgramMiniNode ( BlockMiniNode  blockMiniNode )
028           throws SemanticErrorException
029         //////////////////////////////////////////////////////////////////////
030         {
031           this.blockMiniNode = blockMiniNode;
032    
033           checkSemantics ( new Stack ( ) );
034         }
035    
036         //////////////////////////////////////////////////////////////////////
037         //////////////////////////////////////////////////////////////////////
038    
039         public BlockMiniNode  getBlockMiniNode ( ) { return blockMiniNode; }
040    
041         //////////////////////////////////////////////////////////////////////
042         // MiniNode interface methods
043         //////////////////////////////////////////////////////////////////////
044    
045         public void  generate ( MiniNodeCodeVisitor  miniNodeCodeVisitor )
046         //////////////////////////////////////////////////////////////////////
047         {
048           miniNodeCodeVisitor.generateProgram ( this );
049         }
050    
051         public void  checkSemantics ( Stack  parentMiniNodeStack )
052           throws SemanticErrorException
053         //////////////////////////////////////////////////////////////////////
054         {
055           parentMiniNodeStack.push ( this );
056    
057           blockMiniNode.checkSemantics ( parentMiniNodeStack );
058    
059           parentMiniNodeStack.pop ( );
060         }
061    
062         //////////////////////////////////////////////////////////////////////
063         //////////////////////////////////////////////////////////////////////
064         }