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 IndefiniteLoopStatementMiniNode extends AbstractMiniNode
018 implements StatementMiniNode
019 //////////////////////////////////////////////////////////////////////
020 //////////////////////////////////////////////////////////////////////
021 {
022
023 protected ComparisonMiniNode comparisonMiniNode;
024 protected StatementSequenceMiniNode statementSequenceMiniNode;
025
026 //////////////////////////////////////////////////////////////////////
027 // Constructor methods
028 //////////////////////////////////////////////////////////////////////
029
030 public IndefiniteLoopStatementMiniNode (
031 ComparisonMiniNode comparisonMiniNode,
032 StatementSequenceMiniNode statementSequenceMiniNode )
033 //////////////////////////////////////////////////////////////////////
034 {
035 this.comparisonMiniNode = comparisonMiniNode;
036 this.statementSequenceMiniNode = statementSequenceMiniNode;
037 }
038
039 //////////////////////////////////////////////////////////////////////
040 // Access methods
041 //////////////////////////////////////////////////////////////////////
042
043 public ComparisonMiniNode getComparisonMiniNode ( )
044 //////////////////////////////////////////////////////////////////////
045 {
046 return comparisonMiniNode;
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.generateIndefiniteLoopStatement ( this );
063 }
064
065 //////////////////////////////////////////////////////////////////////
066 //////////////////////////////////////////////////////////////////////
067
068 public void checkSemantics ( Stack parentMiniNodeStack )
069 throws SemanticErrorException
070 //////////////////////////////////////////////////////////////////////
071 {
072 parentMiniNodeStack.push ( this );
073
074 comparisonMiniNode.checkSemantics ( parentMiniNodeStack );
075 statementSequenceMiniNode.checkSemantics ( parentMiniNodeStack );
076
077 parentMiniNodeStack.pop ( );
078 }
079
080 //////////////////////////////////////////////////////////////////////
081 //////////////////////////////////////////////////////////////////////
082 }