001    package org.objectweb.jac.core.parsers.acc;
002    
003    /**
004     * Base class for Terminal and NonTerminal.
005     */
006    public class SyntaxElement {
007       /** Element's name */
008       String name;
009       /** Left position of element in stream */
010       int left;
011       /** Right position of element in stream */
012       int right;
013    
014       SyntaxElement parent;
015    
016       public SyntaxElement(String name, int left, int right) {
017          this.name = name;
018          this.left = left;
019          this.right = right;
020       }
021       public String getName() {
022          return name;
023       }
024       public int getLeft() {
025          return left;
026       }
027       public int getRight() {
028          return right;
029       }
030       public void setParent(SyntaxElement parent) {
031          this.parent = parent;
032       }
033    
034       public SyntaxElement getParent() {
035          return parent;
036       }
037    
038       /**
039        * Find a parent element of this element with a given name
040        * @param searchedName the name to find
041        * @return a SyntaxElement who is a parent of this (or this)
042        */
043       public SyntaxElement findParent(String searchedName) {
044          if (name.equals(searchedName))
045             return this;
046          else if (parent==null)
047             return null;
048          else
049             return parent.findParent(searchedName);
050       }
051    
052       public String toString() {
053          return name+":"+left+"-"+right;
054       }
055    }