Grammar

Visual grammar reference for STYX. See Parser for normative rules.

Document:

Document

Document ::= Entry*

Entry:

Entry

Entry    ::= DocComment? Atom+

referenced by:

  • CommaSeparated
  • Document
  • NewlineSeparated

DocComment:

DocComment

DocComment
         ::= ( '///' NonNewline* Newline )+

referenced by:

  • Entry

Atom:

Atom

Atom     ::= Scalar
           | Sequence
           | Object
           | '@'
           | Tag
           | Attributes

referenced by:

  • Entry
  • Sequence

Scalar:

Scalar

Scalar   ::= BareScalar
           | QuotedScalar
           | RawScalar
           | HeredocScalar

referenced by:

  • Atom

BareScalar:

BareScalar

BareScalar
         ::= BareChar+

referenced by:

  • Attribute
  • AttributeValue
  • Scalar

BareChar:

BareChar

BareChar ::= [^{}(),"=@#x20#x09#x0A#x0D]

referenced by:

  • BareScalar

QuotedScalar:

QuotedScalar

QuotedScalar
         ::= '"' QuotedChar* '"'

referenced by:

  • AttributeValue
  • Scalar
  • TagPayload

QuotedChar:

QuotedChar

QuotedChar
         ::= EscapeSeq
           | [^"\]

referenced by:

  • QuotedScalar

EscapeSeq:

EscapeSeq

EscapeSeq
         ::= '\' ( [\"nrt0] | 'u' HexDigit HexDigit HexDigit HexDigit | 'u{' HexDigit+ '}' )

referenced by:

  • QuotedChar

HexDigit:

HexDigit

HexDigit ::= [0-9A-Fa-f]

referenced by:

  • EscapeSeq

RawScalar:

RawScalar

RawScalar
         ::= 'r' '#'* '"' RawChar* '"' '#'*

referenced by:

  • Scalar
  • TagPayload

RawChar:

RawChar

RawChar  ::= [^"]+

referenced by:

  • RawScalar

HeredocScalar:

HeredocScalar

HeredocScalar
         ::= '<<' Delimiter Newline HeredocLine* Delimiter

referenced by:

  • Scalar
  • TagPayload

Delimiter:

Delimiter

Delimiter
         ::= [A-Z] [A-Z0-9_]*

referenced by:

  • HeredocScalar

HeredocLine:

HeredocLine

HeredocLine
         ::= NonNewline* Newline

referenced by:

  • HeredocScalar

Tag:

Tag

Tag      ::= '@' TagName TagPayload?

referenced by:

  • Atom

TagName:

TagName

TagName  ::= [A-Za-z_] [A-Za-z0-9_.#x2D]*

referenced by:

  • Tag

TagPayload:

TagPayload

TagPayload
         ::= Object
           | Sequence
           | QuotedScalar
           | RawScalar
           | HeredocScalar
           | '@'

referenced by:

  • Tag

Sequence:

Sequence

Sequence ::= '(' WS* ( Atom ( WS+ Atom )* )? WS* ')'

referenced by:

  • Atom
  • AttributeValue
  • TagPayload

Object:

Object

Object   ::= '{' ObjectBody '}'

referenced by:

  • Atom
  • AttributeValue
  • TagPayload

ObjectBody:

ObjectBody

ObjectBody
         ::= NewlineSeparated
           | CommaSeparated
           | WS*

referenced by:

  • Object

NewlineSeparated:

NewlineSeparated

NewlineSeparated
         ::= WS* Entry ( Newline+ Entry )* WS*

referenced by:

  • ObjectBody

CommaSeparated:

CommaSeparated

CommaSeparated
         ::= WS* Entry ( ',' Entry )* WS*

referenced by:

  • ObjectBody

Attributes:

Attributes

Attributes
         ::= Attribute+

referenced by:

  • Atom

Attribute:

Attribute

Attribute
         ::= BareScalar '=' AttributeValue

referenced by:

  • Attributes

AttributeValue:

AttributeValue

AttributeValue
         ::= BareScalar
           | QuotedScalar
           | Sequence
           | Object

referenced by:

  • Attribute

LineComment:

LineComment

LineComment
         ::= '//' NonNewline*

referenced by:

  • WS

WS:

WS

WS       ::= [#x20#x09#x0A#x0D]
           | LineComment

referenced by:

  • CommaSeparated
  • NewlineSeparated
  • ObjectBody
  • Sequence

Newline:

Newline

Newline  ::= #x0D? #x0A

referenced by:

  • DocComment
  • HeredocLine
  • HeredocScalar
  • NewlineSeparated

NonNewline:

NonNewline

NonNewline
         ::= [^#x0A#x0D]

referenced by:

  • DocComment
  • HeredocLine
  • LineComment

rr-2.6 generated by RR - Railroad Diagram Generator