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-22 015 *********************************************************************/ 016 017 public class StatementSequenceMiniNode extends AbstractMiniNode 018 ////////////////////////////////////////////////////////////////////// 019 ////////////////////////////////////////////////////////////////////// 020 { 021 022 protected List statementMiniNodeList; 023 024 ////////////////////////////////////////////////////////////////////// 025 ////////////////////////////////////////////////////////////////////// 026 027 public StatementSequenceMiniNode ( 028 StatementSequenceMiniNode statementSequenceMiniNode, 029 StatementMiniNode statementMiniNode ) 030 ////////////////////////////////////////////////////////////////////// 031 { 032 if ( statementSequenceMiniNode != null ) 033 { 034 statementMiniNodeList 035 = statementSequenceMiniNode.statementMiniNodeList; 036 } 037 else 038 { 039 statementMiniNodeList = new LinkedList ( ); 040 } 041 042 statementMiniNodeList.add ( statementMiniNode ); 043 } 044 045 public StatementSequenceMiniNode ( 046 StatementMiniNode statementMiniNode ) 047 ////////////////////////////////////////////////////////////////////// 048 { 049 this ( null, statementMiniNode ); 050 } 051 052 ////////////////////////////////////////////////////////////////////// 053 ////////////////////////////////////////////////////////////////////// 054 055 public List getStatementMiniNodeList ( ) 056 ////////////////////////////////////////////////////////////////////// 057 { 058 return statementMiniNodeList; 059 } 060 061 ////////////////////////////////////////////////////////////////////// 062 // MiniNode interface methods 063 ////////////////////////////////////////////////////////////////////// 064 065 public void generate ( MiniNodeCodeVisitor miniNodeCodeVisitor ) 066 ////////////////////////////////////////////////////////////////////// 067 { 068 miniNodeCodeVisitor.generateStatementSequence ( this ); 069 } 070 071 ////////////////////////////////////////////////////////////////////// 072 ////////////////////////////////////////////////////////////////////// 073 074 public void checkSemantics ( Stack parentMiniNodeStack ) 075 throws SemanticErrorException 076 ////////////////////////////////////////////////////////////////////// 077 { 078 parentMiniNodeStack.push ( this ); 079 080 Iterator i = statementMiniNodeList.iterator ( ); 081 082 while ( i.hasNext ( ) ) 083 { 084 ( ( StatementMiniNode ) i.next ( ) ).checkSemantics ( 085 parentMiniNodeStack ); 086 } 087 088 parentMiniNodeStack.pop ( ); 089 } 090 091 ////////////////////////////////////////////////////////////////////// 092 ////////////////////////////////////////////////////////////////////// 093 }