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 ProgramMiniNode extends AbstractMiniNode
018 //////////////////////////////////////////////////////////////////////
019 //////////////////////////////////////////////////////////////////////
020 {
021
022 protected BlockMiniNode blockMiniNode;
023
024 //////////////////////////////////////////////////////////////////////
025 //////////////////////////////////////////////////////////////////////
026
027 public ProgramMiniNode ( BlockMiniNode blockMiniNode )
028 throws SemanticErrorException
029 //////////////////////////////////////////////////////////////////////
030 {
031 this.blockMiniNode = blockMiniNode;
032
033 checkSemantics ( new Stack ( ) );
034 }
035
036 //////////////////////////////////////////////////////////////////////
037 //////////////////////////////////////////////////////////////////////
038
039 public BlockMiniNode getBlockMiniNode ( ) { return blockMiniNode; }
040
041 //////////////////////////////////////////////////////////////////////
042 // MiniNode interface methods
043 //////////////////////////////////////////////////////////////////////
044
045 public void generate ( MiniNodeCodeVisitor miniNodeCodeVisitor )
046 //////////////////////////////////////////////////////////////////////
047 {
048 miniNodeCodeVisitor.generateProgram ( this );
049 }
050
051 public void checkSemantics ( Stack parentMiniNodeStack )
052 throws SemanticErrorException
053 //////////////////////////////////////////////////////////////////////
054 {
055 parentMiniNodeStack.push ( this );
056
057 blockMiniNode.checkSemantics ( parentMiniNodeStack );
058
059 parentMiniNodeStack.pop ( );
060 }
061
062 //////////////////////////////////////////////////////////////////////
063 //////////////////////////////////////////////////////////////////////
064 }