Class AssemblyParseBranch

java.lang.Object
ghidra.app.plugin.assembler.sleigh.tree.AssemblyParseTreeNode
ghidra.app.plugin.assembler.sleigh.tree.AssemblyParseBranch
All Implemented Interfaces:
Iterable<AssemblyParseTreeNode>

public class AssemblyParseBranch extends AssemblyParseTreeNode implements Iterable<AssemblyParseTreeNode>
A branch in a parse tree, corresponding to the application of a production
  • Constructor Details

    • AssemblyParseBranch

      public AssemblyParseBranch(AssemblyGrammar grammar, AssemblyProduction prod)
      Construct a branch from the given grammar and production
      Parameters:
      grammar - the grammar containing the production
      prod - the production applied to create this branch
  • Method Details

    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • equals

      public boolean equals(Object obj)
      Overrides:
      equals in class Object
    • addChild

      public void addChild(AssemblyParseTreeNode child)
      Prepend a child to this branch

      Because LR parsers produce rightmost derivations, they necessarily populate the branches right to left. During reduction, each child is popped from the stack, traversing them in reverse order. This method prepends children so that when reduction is complete, the children are aligned to the corresponding symbols from the RHS of the production.

      Parameters:
      child - the child
    • expects

      protected AssemblySymbol expects()
      See what symbol is expected next

      The child added next must be associated with the token expected next.

      Returns:
      the symbol
    • isComplete

      protected boolean isComplete()
      Check if the branch is full
      Returns:
      true if every symbol on the RHS has a corresponding child
    • getSym

      public AssemblyNonTerminal getSym()
      Description copied from class: AssemblyParseTreeNode
      Get the symbol for which this node is substituted

      For a branch, this is the LHS of the corresponding production. For a token, this is the terminal whose tokenizer matched it.

      Specified by:
      getSym in class AssemblyParseTreeNode
      Returns:
      the symbol
    • print

      protected void print(PrintStream out, String indent)
      Description copied from class: AssemblyParseTreeNode
      For debugging: Display the tree with the given indent
      Specified by:
      print in class AssemblyParseTreeNode
      Parameters:
      out - the stream
      indent - the indent
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • getProduction

      public AssemblyProduction getProduction()
      Get the production applied to create this branch
      Returns:
    • getSubstitutions

      public List<AssemblyParseTreeNode> getSubstitutions()
      Get the list of children, indexed by corresponding symbol from the RHS
      Returns:
    • iterator

      public Iterator<AssemblyParseTreeNode> iterator()
      Specified by:
      iterator in interface Iterable<AssemblyParseTreeNode>
    • getSubstitution

      public AssemblyParseTreeNode getSubstitution(int i)
      Get the ith child, corresponding to the ith symbol from the RHS
      Parameters:
      i - the position
      Returns:
      the child
    • isConstructor

      public boolean isConstructor()
    • generateString

      public String generateString()
      Description copied from class: AssemblyParseTreeNode
      Generate the string that this node parsed
      Specified by:
      generateString in class AssemblyParseTreeNode
      Returns:
      the string