mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
480 lines
9.3 KiB
Markdown
480 lines
9.3 KiB
Markdown
# Swift Syntax Library Implementation Status
|
|
|
|
## Represented Grammar Productions
|
|
|
|
Include the following in each entry:
|
|
|
|
- Grammar production(s)
|
|
- See [Summary of the Swift Grammar](https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/zzSummaryOfTheGrammar.html)
|
|
- 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
|