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  ComparisonMiniNode extends AbstractMiniNode
018         //////////////////////////////////////////////////////////////////////
019         //////////////////////////////////////////////////////////////////////
020         {
021    
022         protected ExpressionMiniNode  leftExpressionMiniNode;
023         protected RelationMiniNode    relationMiniNode;
024         protected ExpressionMiniNode  rightExpressionMiniNode;
025    
026         //////////////////////////////////////////////////////////////////////
027         //////////////////////////////////////////////////////////////////////
028    
029         public  ComparisonMiniNode (
030           ExpressionMiniNode  leftExpressionMiniNode,
031           RelationMiniNode    relationMiniNode,
032           ExpressionMiniNode  rightExpressionMiniNode )
033         //////////////////////////////////////////////////////////////////////
034         {
035           this.leftExpressionMiniNode  = leftExpressionMiniNode;
036           this.relationMiniNode        = relationMiniNode;
037           this.rightExpressionMiniNode = rightExpressionMiniNode;
038         }
039    
040         //////////////////////////////////////////////////////////////////////
041         //////////////////////////////////////////////////////////////////////
042    
043         public ExpressionMiniNode  getLeftExpressionMiniNode ( )
044         //////////////////////////////////////////////////////////////////////
045         {
046           return leftExpressionMiniNode;
047         }
048    
049         public RelationMiniNode  getRelationMiniNode ( )
050         //////////////////////////////////////////////////////////////////////
051         {
052           return relationMiniNode;
053         }
054    
055         public ExpressionMiniNode  getRightExpressionMiniNode ( )
056         //////////////////////////////////////////////////////////////////////
057         {
058           return rightExpressionMiniNode;
059         }
060    
061         //////////////////////////////////////////////////////////////////////
062         // MiniNode interface methods
063         //////////////////////////////////////////////////////////////////////
064    
065         public void  generate ( MiniNodeCodeVisitor  miniNodeCodeVisitor )
066         //////////////////////////////////////////////////////////////////////
067         {
068           miniNodeCodeVisitor.generateComparison ( this );
069         }
070         
071         public void  checkSemantics ( Stack  parentMiniNodeStack )
072           throws SemanticErrorException
073         //////////////////////////////////////////////////////////////////////
074         {
075           parentMiniNodeStack.push ( this );
076    
077           leftExpressionMiniNode.checkSemantics ( parentMiniNodeStack );
078           relationMiniNode.checkSemantics ( parentMiniNodeStack );
079           rightExpressionMiniNode.checkSemantics ( parentMiniNodeStack );
080    
081           parentMiniNodeStack.pop ( );
082         }
083    
084         //////////////////////////////////////////////////////////////////////
085         //////////////////////////////////////////////////////////////////////
086         }