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 TermMiniNode extends AbstractMiniNode
018 //////////////////////////////////////////////////////////////////////
019 //////////////////////////////////////////////////////////////////////
020 {
021
022 protected TermMiniNode termMiniNode;
023 protected OperatorMiniNode operatorMiniNode;
024 protected ElementMiniNode elementMiniNode;
025
026 //////////////////////////////////////////////////////////////////////
027 //////////////////////////////////////////////////////////////////////
028
029 public TermMiniNode (
030 TermMiniNode termMiniNode,
031 OperatorMiniNode operatorMiniNode,
032 ElementMiniNode elementMiniNode )
033 //////////////////////////////////////////////////////////////////////
034 {
035 this.termMiniNode = termMiniNode;
036 this.operatorMiniNode = operatorMiniNode;
037 this.elementMiniNode = elementMiniNode;
038 }
039
040 public TermMiniNode ( ElementMiniNode elementMiniNode )
041 //////////////////////////////////////////////////////////////////////
042 {
043 this ( null, null, elementMiniNode );
044 }
045
046 //////////////////////////////////////////////////////////////////////
047 //////////////////////////////////////////////////////////////////////
048
049 public TermMiniNode getTermMiniNode ( )
050 //////////////////////////////////////////////////////////////////////
051 {
052 return termMiniNode;
053 }
054
055 public OperatorMiniNode getOperatorMiniNode ( )
056 //////////////////////////////////////////////////////////////////////
057 {
058 return operatorMiniNode;
059 }
060
061 public ElementMiniNode getElementMiniNode ( )
062 //////////////////////////////////////////////////////////////////////
063 {
064 return elementMiniNode;
065 }
066
067 //////////////////////////////////////////////////////////////////////
068 // MiniNode interface methods
069 //////////////////////////////////////////////////////////////////////
070
071 public void generate ( MiniNodeCodeVisitor miniNodeCodeVisitor )
072 //////////////////////////////////////////////////////////////////////
073 {
074 miniNodeCodeVisitor.generateTerm ( this );
075 }
076
077 public void checkSemantics ( Stack parentMiniNodeStack )
078 throws SemanticErrorException
079 //////////////////////////////////////////////////////////////////////
080 {
081 parentMiniNodeStack.push ( this );
082
083 if ( termMiniNode != null )
084 {
085 termMiniNode.checkSemantics ( parentMiniNodeStack );
086 }
087
088 if ( operatorMiniNode != null )
089 {
090 operatorMiniNode.checkSemantics ( parentMiniNodeStack );
091 }
092
093 elementMiniNode.checkSemantics ( parentMiniNodeStack );
094
095 parentMiniNodeStack.pop ( );
096 }
097
098 //////////////////////////////////////////////////////////////////////
099 //////////////////////////////////////////////////////////////////////
100 }