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 }