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 BlockMiniNode extends AbstractMiniNode
018 //////////////////////////////////////////////////////////////////////
019 //////////////////////////////////////////////////////////////////////
020 {
021
022 protected DeclarationSequenceMiniNode declarationSequenceMiniNode;
023 protected StatementSequenceMiniNode statementSequenceMiniNode;
024
025 //////////////////////////////////////////////////////////////////////
026 //////////////////////////////////////////////////////////////////////
027
028 public BlockMiniNode (
029 DeclarationSequenceMiniNode declarationSequenceMiniNode,
030 StatementSequenceMiniNode statementSequenceMiniNode )
031 //////////////////////////////////////////////////////////////////////
032 {
033 this.declarationSequenceMiniNode = declarationSequenceMiniNode;
034 this.statementSequenceMiniNode = statementSequenceMiniNode;
035 }
036
037 public BlockMiniNode (
038 StatementSequenceMiniNode statementSequenceMiniNode )
039 //////////////////////////////////////////////////////////////////////
040 {
041 this ( null, statementSequenceMiniNode );
042 }
043
044 //////////////////////////////////////////////////////////////////////
045 //////////////////////////////////////////////////////////////////////
046
047 public DeclarationSequenceMiniNode getDeclarationSequenceMiniNode ( )
048 { return declarationSequenceMiniNode; }
049
050 public StatementSequenceMiniNode getStatementSequenceMiniNode ( )
051 { return statementSequenceMiniNode; }
052
053 //////////////////////////////////////////////////////////////////////
054 // MiniNode interface methods
055 //////////////////////////////////////////////////////////////////////
056
057 public void generate ( MiniNodeCodeVisitor miniNodeCodeVisitor )
058 //////////////////////////////////////////////////////////////////////
059 {
060 miniNodeCodeVisitor.generateBlock ( this );
061 }
062
063 //////////////////////////////////////////////////////////////////////
064 //////////////////////////////////////////////////////////////////////
065
066 public void checkSemantics ( Stack parentMiniNodeStack )
067 throws SemanticErrorException
068 //////////////////////////////////////////////////////////////////////
069 {
070 parentMiniNodeStack.push ( this );
071
072 if ( declarationSequenceMiniNode != null )
073 {
074 declarationSequenceMiniNode.checkSemantics (
075 parentMiniNodeStack );
076 }
077
078 if ( statementSequenceMiniNode != null )
079 {
080 statementSequenceMiniNode.checkSemantics ( parentMiniNodeStack );
081 }
082
083 parentMiniNodeStack.pop ( );
084 }
085
086 //////////////////////////////////////////////////////////////////////
087 //////////////////////////////////////////////////////////////////////
088 }