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  DefiniteLoopStatementMiniNode extends AbstractMiniNode
018           implements StatementMiniNode
019         //////////////////////////////////////////////////////////////////////
020         //////////////////////////////////////////////////////////////////////
021         {
022    
023         protected ExpressionMiniNode         expressionMiniNode;
024         protected StatementSequenceMiniNode  statementSequenceMiniNode;
025    
026         //////////////////////////////////////////////////////////////////////
027         // Constructor methods
028         //////////////////////////////////////////////////////////////////////
029    
030         public  DefiniteLoopStatementMiniNode (
031           ExpressionMiniNode         expressionMiniNode,
032           StatementSequenceMiniNode  statementSequenceMiniNode )
033         //////////////////////////////////////////////////////////////////////
034         {
035           this.expressionMiniNode        = expressionMiniNode;
036           this.statementSequenceMiniNode = statementSequenceMiniNode;
037         }
038    
039         //////////////////////////////////////////////////////////////////////
040         // Access methods
041         //////////////////////////////////////////////////////////////////////
042    
043         public ExpressionMiniNode  getExpressionMiniNode ( )
044         //////////////////////////////////////////////////////////////////////
045         {
046           return expressionMiniNode;
047         }
048    
049         public StatementSequenceMiniNode  getStatementSequenceMiniNode ( )
050         //////////////////////////////////////////////////////////////////////
051         {
052           return statementSequenceMiniNode;
053         }
054    
055         //////////////////////////////////////////////////////////////////////
056         // MiniNode interface methods
057         //////////////////////////////////////////////////////////////////////
058    
059         public void  generate ( MiniNodeCodeVisitor  miniNodeCodeVisitor )
060         //////////////////////////////////////////////////////////////////////
061         {
062           miniNodeCodeVisitor.generateDefiniteLoopStatement ( this );
063         }
064         
065         public void  checkSemantics ( Stack  parentMiniNodeStack )
066           throws SemanticErrorException
067         //////////////////////////////////////////////////////////////////////
068         {
069           parentMiniNodeStack.push ( this );
070    
071           expressionMiniNode.checkSemantics ( parentMiniNodeStack );
072           statementSequenceMiniNode.checkSemantics ( parentMiniNodeStack );
073    
074           parentMiniNodeStack.pop ( );
075         }
076    
077         //////////////////////////////////////////////////////////////////////
078         //////////////////////////////////////////////////////////////////////
079         }