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 }