Hierarchy

Index

Constructors

constructor

Properties

Protected adaptor

adaptor: ITreeAdaptor

Protected cursor

cursor: number = 0

Cursor 0..n-1. If singleElement!=null, cursor is 0 until you next(), which bumps it to 1 meaning no more elements.

Protected dirty

dirty: boolean = false

Once a node / subtree has been used in a stream, it must be dup'd from then on. Streams are reset after subrules so that the streams can be reused in future subrules. So, reset must set a dirty bit. If dirty, then next() always returns a dup.

Protected elementDescription

elementDescription: string

The element or stream description; usually has name of the token or rule reference that this list tracks. Can include rulename too, but the exception would track that info.

Protected elements

elements: List<any>

The list of tokens or subtrees we are tracking

Protected singleElement

singleElement: any

Track single elements w/o creating a list. Upon 2nd add, alloc list

Accessors

count

  • get count(): number

description

  • get description(): string

hasNext

  • get hasNext(): boolean

Methods

add

  • add(el: any): void

Protected dup

  • dup(el: any): any

nextCore

  • nextCore(): any
  • Do the work of getting the next element, making sure that it's a tree node or subtree. Deal with the optimization of single- element list versus list of size > 1. Throw an exception if the stream is empty or we're out of elements and size>1. protected so you can override in a subclass if necessary.

    Returns any

nextNode

  • nextNode(): any
  • Treat next element as a single node even if it's a subtree. This is used instead of next() when the result has to be a tree root node. Also prevents us from duplicating recently-added children; e.g., ^(type ID)+ adds ID to type and then 2nd iteration must dup the type node, but ID has been added.

    Referencing a rule result twice is ok; dup entire tree as we can't be adding trees as root; e.g., expr expr.

    Hideous code duplication here with super.next(). Can't think of a proper way to refactor. This needs to always call dup node and super.next() doesn't know which to call: dup node or dup tree.

    Returns any

nextTree

  • nextTree(): any
  • Return the next element in the stream. If out of elements, throw an exception unless size()==1. If size is 1, then return elements[0]. Return a duplicate node/subtree if stream is out of elements and size==1. If we've already used the element, dup (dirty bit set).

    Returns any

reset

  • reset(): void
  • Reset the condition of this stream so that it appears we have not consumed any of its elements. Elements themselves are untouched. Once we reset the stream, any future use will need duplicates. Set the dirty bit.

    Returns void

Protected toTree

  • toTree(el: any): any
  • Ensure stream emits trees; tokens must be converted to AST nodes. AST nodes can be passed through unmolested.

    Parameters

    • el: any

    Returns any

Generated using TypeDoc