/* * Leaf.java 1.0 * * This subclass of symbol represents (at least) terminal symbols returned * by the scanner and placed on the parse stack. At present, this * class does nothing more than its super class. * * Jun 11, 1997 * * @see io.devnulllabs.openjava.ptree.ParseTree * @see io.devnulllabs.openjava.ptree.ParseTreeObject * @version 1.0 last updated: Jun 11, 1997 * @author Michiaki Tatsubori */ package io.devnulllabs.openjava.ptree; import io.devnulllabs.openjava.ptree.util.ParseTreeVisitor; /** * The Leaf class is a token-node in the parse tree of OpenJava. * Any object of this class or subclasses must be immutable. * * @see io.devnulllabs.openjava.ptree.ParseTree * @see io.devnulllabs.openjava.ptree.NonLeaf */ public class Leaf extends ParseTreeObject implements ParseTree { protected void replaceChildWith(ParseTree dist, ParseTree replacement) throws ParseTreeException { throw new ParseTreeException("no child"); } /** textString is the text of this token. */ private String textString = null; /** tokenID is the identifer number of this token */ private int tokenID = 0; /** line is the number of the line at which this token is. */ public int line = -1; /** charBegin is the number of the character at which this token is. */ public int charBegin = -1; /** * Allocates a new leaf(token) with its text. * * @param term_num dummy parameter. * @param str its text. */ public Leaf(String str) { this(-1, str, -1, -1); } /** * Allocates a new leaf(token) with its text. * * @param term_num dummy parameter. * @param str its text. */ public Leaf(int term_num, String str) { this(term_num, str, -1, -1); } /** * Allocates a new leaf(token) with its text and where this is. * * @param term_num dummy parameter. * @param str its text. */ public Leaf(int term_num, String str, int line, int charBegin) { tokenID = term_num; textString = str; this.line = line; this.charBegin = charBegin; } /** * Overrides to return its text as the string of this instance. * * @return the text of this token. */ public String toString() { return textString; } /** * Makes a new copy of this leaf-node. * This method equals to makeCopy(). * * @return the copy of this nonleaf-node as a ptree-node. */ public ParseTree makeRecursiveCopy() { return (ParseTree) this.clone(); } /** * Makes a new copy of this leaf-node. * * @return the copy of this nonleaf-node as a ptree-node. */ public ParseTree makeCopy() { return (ParseTree) this.clone(); } /** * Tests if the specified ptree-node equals to this leaf-node. * * @param p the ptree-node to be tested. * @return true if p equals to this leaf-node */ public boolean equals(ParseTree p) { if (p == null || !(p instanceof Leaf)) return false; if (this == p) return true; return this.toString().equals(p.toString()); } /** * Tests if the specified string equals to this leaf-node's text. * * @param p the ptree-node to be tested. * @return true if p equals to this leaf-node */ public boolean equals(String str) { if (str == null) return false; return this.toString().equals(str); } /** * Returns the identifer-number of this token. * * @return the identifer-number of this token. */ public int getTokenID() { return tokenID; } /** * Accepts a ParseTreeVisitor object as the role of a * Visitor in the Visitor pattern, as the role of an Element in the * Visitor pattern.

* * This invoke an appropriate visit() method on each * child ParseTree object with this visitor. * * @param visitor a visitor **/ public void childrenAccept(ParseTreeVisitor visitor) { return; } public void accept(ParseTreeVisitor v) throws ParseTreeException { v.visit(this); } }