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