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 }