Packages

  • package root
    Definition Classes
    root
  • package io
    Definition Classes
    root
  • package dylemma
    Definition Classes
    io
  • package spac

    SPaC (short for "Streaming Parser Combinators") is a library for building stream consumers in a declarative style, specialized for tree-like data types like XML and JSON.

    SPaC (short for "Streaming Parser Combinators") is a library for building stream consumers in a declarative style, specialized for tree-like data types like XML and JSON.

    Many utilities for handling XML and JSON data involve parsing the entire "document" to some DOM model, then inspecting and transforming that model to extract information. The downside to these utilities is that when the document is very large, the DOM may not fit in memory. The workaround for this type of problem is to treat the document as a stream of "events", e.g. "StartElement" and "EndElement" for XML, or "StartObject" and "EndObject" for JSON. The downside to this workaround is that writing code to handle these streams can be complicated and error-prone, especially when the DOM is complicated.

    SPaC's goal is to drastically simplify the process of creating code to handle these streams.

    This package contains the "core" SPaC traits; Parser, Transformer, Splitter, and ContextMatcher.

    See the xml and json subpackages (provided by the xml-spac and json-spac libraries respectively) for specific utilities related to handling XML and JSON event streams.

    Definition Classes
    dylemma
  • package interop
    Definition Classes
    spac
  • package json

    This package provides extensions to the core "spac" library which allow for the handling of JSON data.

    This package provides extensions to the core "spac" library which allow for the handling of JSON data.

    Rather than creating explicit classes that extend Parser, Transformer, and Splitter, this package provides type aliases and implicit extensions. For example, JsonParser[A] is just a type alias for Parser[JsonEvent, A], and JsonParser is just a call to Parser[JsonEvent].

    Implicit JsonParsers are available for each of the JSON primitive types:

    • string
    • number (expressed as Int, Long, Float, or Double)
    • boolean
    • null (expressed as None.type)

    Helpers are available for parsing JSON arrays and objects:

    • JsonParser.listOf[A] to parse an array where each value is an A
    • JsonParser.objectOf[A] to parse an object where the value for each field an A
    • JsonParser.objectOfNullable[A] to parse an object where the value for each field is either null or an A, filtering out the nulls
    • JsonParser.fieldOf[A](fieldName) to parse a specific field from an object

    A DSL for creating json-specific ContextMatchers is provided to make it more convenient to call Splitter.json. For example:

    Splitter.json("foo" \ "bar").as[String].parseFirst

    Can be used to capture rootJson.foo.bar as a String in

    {
      "foo": {
        "bar": "hello"
      }
    }

    To "split" values inside arrays, index-related context matchers are available, e.g.

    Splitter.json("foo" \ anyIndex).as[Int].parseToList

    Can be used to capture each of the numbers in the "foo" array in

    {
      "foo": [1, 2, 3]
    }

    A note about JsonEvents in spac: JSON doesn't have any explicit markers for when a field ends, or when an array index starts or ends; those context changes are essentially inferred by the presence of some other event. For example, instead of a "field end" event, typically there will be either a new "field start" or a token representing the end of the current object. With spac, splitters and context matchers generally operate under the assumption that a "stack push" event (like a field start) will eventually be followed by a corresponding "stack pop" event (i.e. field end).

    To allow for this, these "inferred" events (FieldEnd, IndexStart, IndexEnd) are explicitly represented as JsonEvents in the stream being parsed. Keep this in mind when creating JSON ContextMatchers:

    • field-related matchers will match a stack like case ObjectStart :: FieldStart(_) :: _
    • index-related matchers will match a stack like case ArrayStart :: IndexStart(_) :: _
    Definition Classes
    spac
  • package xml

    This package provides extensions to the core "spac" library which allow for the handling of XML data.

    This package provides extensions to the core "spac" library which allow for the handling of XML data.

    Rather than creating explicit classes that extend Parser, Transformer, and Splitter, this package provides type aliases and implicit extensions. For example, XmlParser[A] is just a type alias for Parser[XmlEvent, A], and XmlParser is just a call to Parser[XmlEvent].

    Three main Parser methods are added to Parser[XmlEvent] via the XmlParserApplyOps implicit class:

    • XmlParser.forText - for capturing raw text
    • XmlParser.attr - for capturing mandatory attributes from elements
    • XmlParser.attrOpt - for capturing optional attributes from elements

    One main Splitter constructor method is added to Splitter via the XmlSplitterApplyOps implicit class:

    • Splitter.xml - for creating splitters based on an inspection of an "element stack"

    Three main Splitter member methods are added to Splitter[XmlEvent, C] via the XmlSplitterOps implicit class:

    • .attr - alias for .joinBy(XmlParser.attr(...))
    • .attrOpt - alias for .joinBy(XmlParser.attrOpt(...))
    • .text - alias for .joinBy(XmlParser.forText)

    A DSL for creating xml-specific ContextMatchers is provided to make it more convenient to call Splitter.xml. For example:

    Splitter.xml("things" \ "thing").attr("foo").parseToList

    Can be used to capture a list of the "foo" attributes in the <thing> elements in

    <things>
       <thing foo="hello" />
       <thing foo="Goodbye">
          <extra>junk</extra>
       </thing>
    </thing>
    Definition Classes
    spac
  • CallerPos
  • ContextChange
  • ContextLocation
  • ContextMatcher
  • ContextPop
  • ContextPush
  • ContextTrace
  • HasLocation
  • LowPriorityTypeReduceImplicits
  • Parser
  • ParserApplyWithBoundInput
  • Signal
  • SingleItemContextMatcher
  • Source
  • SpacException
  • SpacTraceElement
  • Splitter
  • SplitterApplyWithBoundInput
  • StackInterpretation
  • StackLike
  • Transformer
  • TransformerApplyWithBoundInput
  • TypeReduce
  • Unconsable

object Parser

Source
Parser.scala
Linear Supertypes
AnyRef, Any
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. Parser
  2. AnyRef
  3. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Type Members

  1. trait FollowedBy[In, +A, M[-_, +_]] extends AnyRef

    An intermediate object for creating sequence-based combination methods for a Parser or Consumer.

    An intermediate object for creating sequence-based combination methods for a Parser or Consumer.

    A

    Output type for the "first" parser/consumer; using the combination methods in this trait will result in an instance of T1 being used to create a "second" parser/consumer/transformer to be run sequentially after the first.

    M

    Type constructor for the parser/consumer of a given output type

  2. trait Handler[-In, +Out] extends AnyRef

    An internally-mutable representation of a Parser, which reacts to inputs from a data stream and eventually produces a result.

  3. implicit final class ParserFlatten[In, A, F[_]] extends AnyVal
  4. implicit class ParserFollowedByOps[In, A] extends AnyRef

    Adds followedBy and followedByStream to Parser (they aren't defined in the Parser trait due to the In type needing to be invariant here)

  5. trait Stateless[-In, +Out] extends Parser[In, Out] with Handler[In, Out]

    Specialization for Parsers which require no mutable state.

    Specialization for Parsers which require no mutable state. A "stateless" parser acts as its own handler.

Value Members

  1. final def !=(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  2. final def ##(): Int
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  4. def apply[In]: ParserApplyWithBoundInput[In]

    Convenience for creating parsers whose input type is bound to In.

    Convenience for creating parsers whose input type is bound to In.

    This is particularly nice when the Out type can be inferred by the compiler, e.g.

    Parser[Int].fold(1)(_ + _)
    // versus
    Parser.fold[Int, Int](1)(_ + _)
  5. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  6. implicit def catsApplicativeForParser[In](implicit callerPos: CallerPos): Applicative[[A]Parser[In, A]]

    Applicative for Parser with a fixed In type.

  7. def clone(): AnyRef
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.CloneNotSupportedException]) @native()
  8. def defer[In, Out](p: => Parser[In, Out]): Parser[In, Out]

    Creates a parser which delegates to the given call-by-name p parser.

    Creates a parser which delegates to the given call-by-name p parser. The p expression isn't evaluated until a handler created by this parser is created - that handler will be p's handler. The underlying parser is not memoized, so if a new handler is constructed, the p expression will be re-evaluated.

    In

    The parser's input type

    Out

    The parser's output type

    p

    A call-by-name expression which returns a Parser

  9. def deferHandler[In, Out](h: => Handler[In, Out]): Parser[In, Out]

    Creates a parser from a call-by-name handler construction expression.

    Creates a parser from a call-by-name handler construction expression. This is effectively doing

    new Parser[In, Out] {
      def newHandler = h
    }
  10. def delay[Out](value: => Out): Parser[Any, Out]

    Creates a parser which evaluates the call-by-name value expression.

    Creates a parser which evaluates the call-by-name value expression. The value expression won't be evaluated until a handler created by this parser is asked to step or finish. The value is not memoized, so if a new handler is created, that handler will re-evaluate the value.

    Out

    the result type

    value

    A call-by-name expression which will be evaluated by the returned parser's Handler

  11. def drain: Parser[Any, Unit]

    Create a parser which will consume the entire input stream, ignoring each value, yielding a Unit result when the stream ends.

  12. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  13. def equals(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef → Any
  14. def finalize(): Unit
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.Throwable])
  15. def find[In](predicate: (In) => Boolean): Parser[In, Option[In]]

    Creates a parser which returns the first input for which the predicate function returns true.

  16. def first[In](implicit arg0: TypeName[In]): Parser[In, In]

    Creates a parser which returns the first input it receives, or throws a SpacException.MissingFirstException when handling an empty stream.

  17. def firstOpt[In]: Parser[In, Option[In]]

    Creates a parser which returns the first input it receives, or None when handling an empty stream.

  18. def fold[In, Out](init: Out)(op: (Out, In) => Out): Parser[In, Out]

    Creates a parser which folds inputs into its state according to the op function, returning its final state when the input stream ends.

    Creates a parser which folds inputs into its state according to the op function, returning its final state when the input stream ends.

    init

    The initial state

    op

    state update function

  19. def fromBuilder[In, Out](b: => Builder[In, Out]): Parser[In, Out]

    Creates a parser whose handlers which will construct a new builder via the call-by-name b expression.

    Creates a parser whose handlers which will construct a new builder via the call-by-name b expression. The builder's result will be used as the result of the handler.

  20. final def getClass(): Class[_ <: AnyRef]
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  21. def hashCode(): Int
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  22. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  23. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  24. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  25. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  26. def oneOf[In, Out](parsers: Parser[In, Out]*): Parser[In, Out]

    Create a single parser which will attempt to run each of the given parsers in parallel, yielding the result from the first of the parsers that successfully completes.

    Create a single parser which will attempt to run each of the given parsers in parallel, yielding the result from the first of the parsers that successfully completes. If multiple parsers return a result for the same input, priority is determined by their order when given to this method. If all of the parsers fail by throwing exceptions, all but the latest exception will be swallowed, and the last exception will be rethrown.

    parsers

    A collection of Parsers which will be run in parallel.

  27. def pure[Out](value: Out): Parser[Any, Out]

    Creates a parser which always results in value.

    Creates a parser which always results in value.

    value

    the result of the parser

  28. final def synchronized[T0](arg0: => T0): T0
    Definition Classes
    AnyRef
  29. def tap[In](f: (In) => Unit): Parser[In, Unit]

    Create a parser which runs the side-effecting function f for each input it receives, yielding a Unit result.

  30. def toChain[In]: Parser[In, Chain[In]]

    Creates a parser that builds a cats.data.Chain from the inputs it receives.

  31. def toList[In]: Parser[In, List[In]]

    Creates a parser that builds a List from the inputs it receives.

  32. def toMap[K, V]: Parser[(K, V), Map[K, V]]

    Creates a parser that builds a Map from the (key, value) tuple inputs it receives.

  33. def toString(): String
    Definition Classes
    AnyRef → Any
  34. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  35. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  36. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException]) @native()

Deprecated Value Members

  1. def constant[Out](value: Out): Parser[Any, Out]
    Annotations
    @deprecated
    Deprecated

    (Since version v0.9) use .pure instead

  2. def firstOption[In]: Parser[In, Option[In]]
    Annotations
    @deprecated
    Deprecated

    (Since version v0.9) Use firstOpt instead

  3. def foreach[In](f: (In) => Any): Parser[In, Unit]
    Annotations
    @deprecated
    Deprecated

    (Since version v0.9) Use tap instead

Inherited from AnyRef

Inherited from Any

Ungrouped