All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.org.antlr.v4.kotlinruntime.tree.ParseTree.kt Maven / Gradle / Ivy

// Copyright 2017-present Strumenta and contributors, licensed under Apache 2.0.
// Copyright 2024-present Strumenta and contributors, licensed under BSD 3-Clause.

package org.antlr.v4.kotlinruntime.tree

import org.antlr.v4.kotlinruntime.Parser
import org.antlr.v4.kotlinruntime.RuleContext
import org.antlr.v4.kotlinruntime.Token

/**
 * An interface to access the tree of [RuleContext] objects created
 * during a parse that makes the data structure look like a simple parse tree.
 * This node represents both internal nodes, rule invocations,
 * and leaf nodes, token matches.
 *
 * The payload is either a [Token] or a [RuleContext] object.
 */
public interface ParseTree : SyntaxTree {
  /**
   * Return the combined text of all leaf nodes. Does not get any
   * off-channel tokens (if any) so won't return whitespace and
   * comments if they are sent to parser on hidden channel.
   */
  public val text: String

  /**
   * Set the parent for this node.
   *
   * This is not backward compatible as it changes
   * the interface but no one was able to create custom
   * nodes anyway, so I'm adding as it improves internal
   * code quality.
   *
   * One could argue for a restructuring of
   * the class/interface hierarchy so that
   * `assignParent`, `addChild` are moved up to [Tree]
   * but that's a major change. So I'll do the
   * minimal change, which is to add this method.
   *
   * @since 4.7
   */
  public fun assignParent(value: RuleContext?)

  /**
   * The [ParseTreeVisitor] needs a double dispatch method.
   */
  public fun  accept(visitor: ParseTreeVisitor): T

  /**
   * Specialize [toStringTree] so that it can print out more information
   * based upon the parser.
   */
  public fun toStringTree(parser: Parser): String

  // Narrows down the return type to ParseTree
  override fun readParent(): ParseTree?

  // Narrows down the return type to ParseTree
  override fun getChild(i: Int): ParseTree?
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy