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  TermMiniNode extends AbstractMiniNode
018         //////////////////////////////////////////////////////////////////////
019         //////////////////////////////////////////////////////////////////////
020         {
021    
022         protected TermMiniNode      termMiniNode;
023         protected OperatorMiniNode  operatorMiniNode;
024         protected ElementMiniNode   elementMiniNode;
025    
026         //////////////////////////////////////////////////////////////////////
027         //////////////////////////////////////////////////////////////////////
028    
029         public  TermMiniNode (
030           TermMiniNode      termMiniNode,
031           OperatorMiniNode  operatorMiniNode,
032           ElementMiniNode   elementMiniNode )
033         //////////////////////////////////////////////////////////////////////
034         {
035           this.termMiniNode     = termMiniNode;
036           this.operatorMiniNode = operatorMiniNode;
037           this.elementMiniNode  = elementMiniNode;
038         }
039    
040         public  TermMiniNode ( ElementMiniNode  elementMiniNode )
041         //////////////////////////////////////////////////////////////////////
042         {
043           this ( null, null, elementMiniNode );
044         }
045    
046         //////////////////////////////////////////////////////////////////////
047         //////////////////////////////////////////////////////////////////////
048    
049         public TermMiniNode  getTermMiniNode ( )
050         //////////////////////////////////////////////////////////////////////
051         {
052           return termMiniNode;
053         }
054    
055         public OperatorMiniNode  getOperatorMiniNode ( )
056         //////////////////////////////////////////////////////////////////////
057         {
058           return operatorMiniNode;
059         }
060    
061         public ElementMiniNode  getElementMiniNode ( )
062         //////////////////////////////////////////////////////////////////////
063         {
064           return elementMiniNode;
065         }
066    
067         //////////////////////////////////////////////////////////////////////
068         // MiniNode interface methods
069         //////////////////////////////////////////////////////////////////////
070    
071         public void  generate ( MiniNodeCodeVisitor  miniNodeCodeVisitor )
072         //////////////////////////////////////////////////////////////////////
073         {
074           miniNodeCodeVisitor.generateTerm ( this );
075         }
076         
077         public void  checkSemantics ( Stack  parentMiniNodeStack )
078           throws SemanticErrorException
079         //////////////////////////////////////////////////////////////////////
080         {
081           parentMiniNodeStack.push ( this );
082    
083           if ( termMiniNode != null )
084           {
085             termMiniNode.checkSemantics ( parentMiniNodeStack );
086           }
087    
088           if ( operatorMiniNode != null )
089           {
090             operatorMiniNode.checkSemantics ( parentMiniNodeStack );
091           }
092    
093           elementMiniNode.checkSemantics ( parentMiniNodeStack );
094    
095           parentMiniNodeStack.pop ( );
096         }
097    
098         //////////////////////////////////////////////////////////////////////
099         //////////////////////////////////////////////////////////////////////
100         }