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 }