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 }