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 DefiniteLoopStatementMiniNode extends AbstractMiniNode 018 implements StatementMiniNode 019 ////////////////////////////////////////////////////////////////////// 020 ////////////////////////////////////////////////////////////////////// 021 { 022 023 protected ExpressionMiniNode expressionMiniNode; 024 protected StatementSequenceMiniNode statementSequenceMiniNode; 025 026 ////////////////////////////////////////////////////////////////////// 027 // Constructor methods 028 ////////////////////////////////////////////////////////////////////// 029 030 public DefiniteLoopStatementMiniNode ( 031 ExpressionMiniNode expressionMiniNode, 032 StatementSequenceMiniNode statementSequenceMiniNode ) 033 ////////////////////////////////////////////////////////////////////// 034 { 035 this.expressionMiniNode = expressionMiniNode; 036 this.statementSequenceMiniNode = statementSequenceMiniNode; 037 } 038 039 ////////////////////////////////////////////////////////////////////// 040 // Access methods 041 ////////////////////////////////////////////////////////////////////// 042 043 public ExpressionMiniNode getExpressionMiniNode ( ) 044 ////////////////////////////////////////////////////////////////////// 045 { 046 return expressionMiniNode; 047 } 048 049 public StatementSequenceMiniNode getStatementSequenceMiniNode ( ) 050 ////////////////////////////////////////////////////////////////////// 051 { 052 return statementSequenceMiniNode; 053 } 054 055 ////////////////////////////////////////////////////////////////////// 056 // MiniNode interface methods 057 ////////////////////////////////////////////////////////////////////// 058 059 public void generate ( MiniNodeCodeVisitor miniNodeCodeVisitor ) 060 ////////////////////////////////////////////////////////////////////// 061 { 062 miniNodeCodeVisitor.generateDefiniteLoopStatement ( this ); 063 } 064 065 public void checkSemantics ( Stack parentMiniNodeStack ) 066 throws SemanticErrorException 067 ////////////////////////////////////////////////////////////////////// 068 { 069 parentMiniNodeStack.push ( this ); 070 071 expressionMiniNode.checkSemantics ( parentMiniNodeStack ); 072 statementSequenceMiniNode.checkSemantics ( parentMiniNodeStack ); 073 074 parentMiniNodeStack.pop ( ); 075 } 076 077 ////////////////////////////////////////////////////////////////////// 078 ////////////////////////////////////////////////////////////////////// 079 }