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 }