Swift Syntax Library Implementation Status

Represented Grammar Productions

Include the following in each entry:

  • Grammar production(s)
  • C++ types representing the productions
  • Testing status
    • With APIs
    • Make APIs
    • Builder APIs (if applicable)
  • SR links
    • Related lib/AST changes

Declarations

  • declaration-modifiers

    • DeclModifierListSyntax
  • declaration-modifier

    • DeclModifierSyntax
  • struct-declaration

    • StructDeclSyntax
  • typealias-assignment
    typealias-declaration

    • TypeAliasDeclSyntax
  • class-body
    class-members

    • DeclMembersSyntax
    • ClassDeclSyntax used for the { } braces.
  • extension-body

    • DeclMembersSyntax
  • protocol-body

    • DeclMembersSyntax
  • struct-body
    struct-members

    • DeclMembersSyntax
    • StructDeclSyntax used for the { } braces.
  • function-declaration

    • FunctionDeclSyntax
  • function-body

    • CodeBlockSyntax
  • function-result

    • TypeSyntax
  • function-signature

    • FunctionSignatureSyntax
  • parameter-clause

    • FunctionParameterClauseSyntax
  • parameter-list

    • FunctionParameterListSyntax
  • parameter

    • FunctionParameterSyntax

Statements

  • statement

    • StmtSyntax (Abstract base class)
  • statements

    • StmtListSyntax
  • code-block

    • CodeBlockSyntax
  • fallthrough-statement

    • FallthroughStmtSyntax
  • break-statement

    • BreakStmtSyntax
  • continue-statement

    • ContinueStmtSyntax
  • return-statement

    • ReturnStmtSyntax

Expressions

  • binary-literal

  • decimal-literal

  • hexadecimal-literal

  • integer-literal

  • octal-literal

    • IntegerLiteralExprSyntax
  • function-call-argument

    • FunctionCallArgumentSyntax
  • function-call-argument-list

    • FunctionCallArgumentListSyntax
  • function-call-expression

  • function-call-argument-clause

    • FunctionCallExprSyntax

Types

  • type

  • type-annotation

    • TypeSyntax (Abstract base class)
  • protocol-identifier

  • type-identifier

    • TypeIdentifierSyntax
  • optional-type

    • OptionalTypeSyntax
  • implicitly-unwrapped-optional-type

    • ImplicitlyUnwrappedOptionalTypeSyntax
  • array-type

    • ArrayTypeSyntax
  • dictionary-type

    • DictionaryTypeSyntax
  • function-type

  • function-type-argument

  • function-type-argument-clause

    • FunctionTypeSyntax
  • function-type-argument-list

    • TypeArgumentListSyntax
  • metatype-type

    • MetatypeTypeSyntax
  • tuple-type

    • TupleTypeSyntax
  • tuple-type-element

    • TupleTypeElementSyntax
  • tuple-type-element-list

    • TupleTypeElementListSyntax

Type Attributes

  • attribute

  • attribute-argument-clause

    • TypeAttributeSyntax
  • attributes

    • TypeAttributesSyntax
  • balanced-token

    • BalancedTokenSyntax
  • balanced-tokens

    • BalancedTokensSyntax

Generics

  • generic-argument-clause

    • GenericArgumentClauseSyntax
  • generic-argument-list

    • GenericArgumentListSyntax
  • generic-parameter-clause

    • GenericParameterClauseSyntax
  • generic-parameter

    • GenericParameterSyntax
  • generic-parameter-list

    • GenericParameterListSyntax
  • conformance-requirement

    • ConformanceRequirementSyntax
  • same-type-requirement

    • SameTypeRequirementSyntax
  • generic-where-clause

    • GenericWhereClauseSyntax
  • requirement-list

    • GenericRequirementListSyntax

Identifiers and Terminal Tokens

  • access-level-modifier
  • argument-label
  • attribute-name
  • boolean-literal
  • class-name
  • closure-parameter-name
  • element-name
  • enum-case-name
  • enum-name
  • external-parameter-name
  • function-name
  • identifier-pattern
  • import-kind
  • import-path-identifier
  • label-name
  • local-parameter-name
  • mutation-modifier
  • platform-name
  • precedence-group-name
  • protocol-name
  • sign
  • struct-name
  • type-name
  • typealias-name
  • variable-name
    • identifier
      • TokenSyntax

Unrepresented Grammar Productions

These are categorized somewhat by difficulty and priority.

Easy

  • array-literal
  • array-literal-items
  • as-pattern
  • case-condition
  • case-label
  • dynamic-type-expression
  • floating-point-literal
  • forced-value-expression
  • identifier-list
  • implicit-member-expression
  • import-path
  • in-out-expression
  • interpolated-text
  • interpolated-text-item
  • is-pattern
  • key-path-expression
  • line-control-statement
  • optional-chaining-expression
  • optional-pattern
  • parenthesized-expression
  • platform-condition
  • platform-version
  • postfix-operator-declaration
  • precedence-group-assignment
  • precedence-group-associativity
  • precedence-group-names
  • statement-label
  • static-string-literal
  • swift-version
  • throw-statement
  • value-binding-pattern
  • where-clause
  • dictionary-literal
    • dictionary-literal-items
      • dictionary-literal-item
  • capture-list
    • capture-list-items
      • capture-list-item
  • defer-statement

Medium

  • else-directive-clause
  • elseif-directive-clauses
    • elseif-directive-clause
  • precedence-group-declaration
  • precedence-group-relation
  • expression-list
  • availability-condition
    • availability-arguments
      • availability-argument
  • switch-cases
    • switch-case
  • constant-declaration
  • catch-clauses
    • catch-clause
  • variable-declaration
  • do-statement
  • for-in-statement
  • guard-statement
  • case-item-list
  • import-declaration
  • if-directive-clause
  • if-statement
    • else-clause
  • protocol-associated-type-declaration
  • repeat-while-statement
  • while-statement
  • tuple-expression
    • tuple-element-list
      • tuple-element
  • tuple-pattern
    • tuple-pattern-element-list
      • tuple-pattern-element
  • switch-statement
  • explicit-member-expression
  • optional-binding-condition
  • operator-declaration
  • selector-expression
  • protocol-composition-type
  • conditional-operator
  • deinitializer-declaration
  • didSet-clause
  • willSet-clause
  • pattern-initializer-list
    • pattern-initializer
  • prefix-expression
  • prefix-operator-declaration
  • infix-operator-declaration
    • infix-operator-group
  • binary-expression

Hard

  • protocol-declaration
  • closure-expression
    • closure-signature
      • closure-parameter-clause
        • closure-parameter-list
          • closure-parameter
  • extension-declaration
  • enum-declaration
  • class-declaration
  • getter-setter-block
    • getter-setter-keyword-block
    • getter-keyword-clause
      • getter-clause
    • setter-keyword-clause
      • setter-clause
        • setter-name
  • subscript-declaration
  • enum-case-pattern
  • initializer-declaration
    • initializer-head
  • interpolated-string-literal
  • conditional-compilation-block

Trivial and Intermediate Grammar Productions

  • binary-expressions
  • binary-operator
  • compilation-condition
  • capture-specifier
  • precedence-group-attributes
  • precedence-group-attribute
  • prefix-operator
  • type-casting-operator
  • willSet-didSet-block
  • architecture
  • string-literal
  • argument-names
  • array-literal-item
  • type-casting-pattern
  • assignment-operator
  • expression-pattern
  • binary-digit
  • binary-literal-character
  • binary-literal-characters
  • branch-statement
  • class-member
  • class-requirement
  • condition
  • condition-list
  • compiler-control-statement
  • control-transfer-statement
  • decimal-digit
  • decimal-digits
  • decimal-exponent
  • decimal-fraction
  • decimal-literal-character
  • decimal-literal-characters
  • default-argument-clause
  • default-label
  • dot-operator-character
  • dot-operator-characters
  • dot-operator-head
  • else-directive
  • elseif-directive
  • endif-directive
  • escaped-character
  • expression
  • extension-member
  • file-name
  • floating-point-e
  • floating-point-p
  • function-head
  • hexadecimal-digit
  • hexadecimal-exponent
  • hexadecimal-fraction
  • identifier-character
  • identifier-characters
  • identifier-head
  • if-directive
  • where-expression
  • implicit-parameter-name
  • initializer
  • initializer-body
  • initializer-expression
  • labeled-statement (TODO: Put in loop-, if-, switch-, do-statement layout)
  • line-number
  • literal
  • literal-expression
  • loop-statement
  • nil-literal
  • numeric-literal
  • octal-digit
  • octal-literal-character
  • octal-literal-characters
  • operating-system
  • operator
  • operator-character
  • operator-characters
  • operator-head
  • pattern
  • postfix-expression
  • postfix-operator
  • postfix-self-expression
  • protocol-composition-continuation
  • protocol-initializer-declaration
  • protocol-member
  • protocol-member-declaration
  • protocol-members
  • extension-members
  • protocol-method-declaration
  • protocol-property-declaration
  • protocol-subscript-declaration
  • quoted-text
  • quoted-text-item
  • raw-value-assignment
  • raw-value-literal
  • raw-value-style-enum
  • raw-value-style-enum-case
  • raw-value-style-enum-case-clause
  • raw-value-style-enum-case-list
  • playground-literal
  • raw-value-style-enum-member
  • raw-value-style-enum-members
  • requirement
  • self-expression
  • self-initializer-expression
  • self-method-expression
  • self-subscript-expression
  • struct-member
  • subscript-expression
  • subscript-head
  • subscript-result
  • superclass-expression
  • superclass-initializer-expression
  • superclass-method-expression
  • superclass-subscript-expression
  • top-level-declaration
  • try-operator
  • type-inheritance-clause
  • type-inheritance-list
  • unicode-scalar-digits
  • union-style-enum
  • union-style-enum-case
  • union-style-enum-case-clause
  • union-style-enum-case-list
  • union-style-enum-member
  • union-style-enum-members
  • variable-declaration-head
  • wildcard-expression
  • wildcard-pattern
  • primary-expression
  • generic-argument