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 }