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