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 }