GRAMMAR OF WHITESPACE whitespace → whitespace-item whitespacewhitespace-item → line-break whitespace-item → inline-space whitespace-item → comment whitespace-item → multiline-comment whitespace-item → U+0000, U+000B, 또는 U+000C line-break → U+000A line-break → U+000D line-break → U+000D 다음에 U+000A inline-spaces → inline-space inline-spacesinline-space → U+0009 또는 U+0020 comment →//
comment-text line-break multiline-comment →/*
multiline-comment-text*/
comment-text → comment-text-item comment-textcomment-text-item → U+000A 또는 U+000D 을 제외한 모든 유니코드 스칼라 값 multiline-comment-text → multiline-comment-text-item multiline-comment-textmultiline-comment-text-item → multiline-comment multiline-comment-text-item → comment-text-item multiline-comment-text-item →/*
또는*/
을 제외한 모든 유니코드 스칼라 값GRAMMAR OF AN IDENTIFIER identifier → identifier-head identifier-charactersidentifier → ` identifier-head identifier-characters` identifier → implicit-parameter-name identifier → property-wrapper-projection identifier-list → identifier | identifier,
identifier-list identifier-head → A 부터 Z 까지 대문자 또는 소문자 identifier-head →_
identifier-head → U+00A8, U+00AA, U+00AD, U+00AF, U+00B2–U+00B5, 또는 U+00B7–U+00BA identifier-head → U+00BC–U+00BE, U+00C0–U+00D6, U+00D8–U+00F6, 또는 U+00F8–U+00FF identifier-head → U+0100–U+02FF, U+0370–U+167F, U+1681–U+180D, 또는 U+180F–U+1DBF identifier-head → U+1E00–U+1FFF identifier-head → U+200B–U+200D, U+202A–U+202E, U+203F–U+2040, U+2054, 또는 U+2060–U+206F identifier-head → U+2070–U+20CF, U+2100–U+218F, U+2460–U+24FF, 또는 U+2776–U+2793 identifier-head → U+2C00–U+2DFF 또는 U+2E80–U+2FFF identifier-head → U+3004–U+3007, U+3021–U+302F, U+3031–U+303F, 또는 U+3040–U+D7FF identifier-head → U+F900–U+FD3D, U+FD40–U+FDCF, U+FDF0–U+FE1F, 또는 U+FE30–U+FE44 identifier-head → U+FE47–U+FFFD identifier-head → U+10000–U+1FFFD, U+20000–U+2FFFD, U+30000–U+3FFFD, 또는 U+40000–U+4FFFD identifier-head → U+50000–U+5FFFD, U+60000–U+6FFFD, U+70000–U+7FFFD, 또는 U+80000–U+8FFFD identifier-head → U+90000–U+9FFFD, U+A0000–U+AFFFD, U+B0000–U+BFFFD, 또는 U+C0000–U+CFFFD identifier-head → U+D0000–U+DFFFD 또는 U+E0000–U+EFFFD identifier-character → 0에서 9까지의 숫자 identifier-character → U+0300–U+036F, U+1DC0–U+1DFF, U+20D0–U+20FF, 또는 U+FE20–U+FE2F identifier-character → identifier-head identifier-characters → identifier-character identifier-charactersimplicit-parameter-name →$
decimal-digits property-wrapper-projection →$
identifier-charactersGRAMMAR OF A LITERAL literal → numeric-literal | string-literal | regular-expression-literal | boolean-literal | nil-literal numeric-literal →-
integer-literal |-
floating-point-literal boolean-literal →true
|false
nil-literal →nil
GRAMMAR OF AN INTEGER LITERAL integer-literal → binary-literal integer-literal → octal-literal integer-literal → decimal-literal integer-literal → hexadecimal-literal binary-literal →0b
binary-digit binary-literal-charactersbinary-digit → 0 또는 1 숫자 binary-literal-character → binary-digit |_
binary-literal-characters → binary-literal-character binary-literal-charactersoctal-literal →0o
octal-digit octal-literal-charactersoctal-digit → 0에서 7까지의 숫자 octal-literal-character → octal-digit |_
octal-literal-characters → octal-literal-character octal-literal-charactersdecimal-literal → decimal-digit decimal-literal-charactersdecimal-digit → 0에서 9까지의 숫자 decimal-digits → decimal-digit decimal-digitsdecimal-literal-character → decimal-digit |_
decimal-literal-characters → decimal-literal-character decimal-literal-charactershexadecimal-literal →0x
hexadecimal-digit hexadecimal-literal-charactershexadecimal-digit → 0에서 9까지의 숫자, a 에서 f, 또는 A 에서 F hexadecimal-literal-character → hexadecimal-digit |_
hexadecimal-literal-characters → hexadecimal-literal-character hexadecimal-literal-charactersGRAMMAR OF A FLOATING-POINT LITERAL floating-point-literal → decimal-literal decimal-fractiondecimal-exponentfloating-point-literal → hexadecimal-literal hexadecimal-fractionhexadecimal-exponent decimal-fraction →.
decimal-literal decimal-exponent → floating-point-e signdecimal-literal hexadecimal-fraction →.
hexadecimal-digit hexadecimal-literal-charactershexadecimal-exponent → floating-point-p signdecimal-literal floating-point-e →e
|E
floating-point-p →p
|P
sign →+
|-
GRAMMAR OF A STRING LITERAL string-literal → static-string-literal | interpolated-string-literal string-literal-opening-delimiter → extended-string-literal-delimiter"
string-literal-closing-delimiter →"
extended-string-literal-delimiterstatic-string-literal → string-literal-opening-delimiter quoted-textstring-literal-closing-delimiter static-string-literal → multiline-string-literal-opening-delimiter multiline-quoted-textmultiline-string-literal-closing-delimiter multiline-string-literal-opening-delimiter → extended-string-literal-delimiter"""
multiline-string-literal-closing-delimiter →"""
extended-string-literal-delimiterextended-string-literal-delimiter →#
extended-string-literal-delimiterquoted-text → quoted-text-item quoted-textquoted-text-item → escaped-character quoted-text-item →"
,\
, U+000A, 또는 U+000D 을 제외한 모든 유니코드 스칼라 값 multiline-quoted-text → multiline-quoted-text-item multiline-quoted-textmultiline-quoted-text-item → escaped-character multiline-quoted-text-item →\
을 제외한 모든 유니코드 스칼라 값 multiline-quoted-text-item → escaped-newline interpolated-string-literal → string-literal-opening-delimiter interpolated-textstring-literal-closing-delimiter interpolated-string-literal → multiline-string-literal-opening-delimiter multiline-interpolated-textmultiline-string-literal-closing-delimiter interpolated-text → interpolated-text-item interpolated-textinterpolated-text-item →\(
expression)
| quoted-text-item multiline-interpolated-text → multiline-interpolated-text-item multiline-interpolated-textmultiline-interpolated-text-item →\(
expression)
| multiline-quoted-text-item escape-sequence →\
extended-string-literal-delimiter escaped-character → escape-sequence0
| escape-sequence\
| escape-sequencet
| escape-sequencen
| escape-sequencer
| escape-sequence"
| escape-sequence'
escaped-character → escape-sequenceu
{
unicode-scalar-digits}
unicode-scalar-digits → 1 에서 8 자리의 16진수 escaped-newline → escape-sequence inline-spacesline-breakGRAMMAR OF A REGULAR EXPRESSION LITERAL regular-expression-literal → regular-expression-literal-opening-delimiter regular-expression regular-expression-literal-closing-delimiter regular-expression → 모든 정규 표현식 regular-expression-literal-opening-delimiter → extended-regular-expression-literal-delimiter/
regular-expression-literal-closing-delimiter →/
extended-regular-expression-literal-delimiterextended-regular-expression-literal-delimiter →#
extended-regular-expression-literal-delimiterGRAMMAR OF OPERATORS operator → operator-head operator-charactersoperator → dot-operator-head dot-operator-characters operator-head →/
|=
|-
|+
|!
|*
|%
|<
|>
|&
||
|^
|~
|?
operator-head → U+00A1–U+00A7 operator-head → U+00A9 또는 U+00AB operator-head → U+00AC 또는 U+00AE operator-head → U+00B0–U+00B1 operator-head → U+00B6, U+00BB, U+00BF, U+00D7, 또는 U+00F7 operator-head → U+2016–U+2017 operator-head → U+2020–U+2027 operator-head → U+2030–U+203E operator-head → U+2041–U+2053 operator-head → U+2055–U+205E operator-head → U+2190–U+23FF operator-head → U+2500–U+2775 operator-head → U+2794–U+2BFF operator-head → U+2E00–U+2E7F operator-head → U+3001–U+3003 operator-head → U+3008–U+3020 operator-head → U+3030 operator-character → operator-head operator-character → U+0300–U+036F operator-character → U+1DC0–U+1DFF operator-character → U+20D0–U+20FF operator-character → U+FE00–U+FE0F operator-character → U+FE20–U+FE2F operator-character → U+E0100–U+E01EF operator-characters → operator-character operator-charactersdot-operator-head →.
dot-operator-character →.
| operator-character dot-operator-characters → dot-operator-character dot-operator-charactersbinary-operator → operator prefix-operator → operator postfix-operator → operator
GRAMMAR OF A TYPE type → function-type type → array-type type → dictionary-type type → type-identifier type → tuple-type type → optional-type type → implicitly-unwrapped-optional-type type → protocol-composition-type type → opaque-type type → metatype-type type → any-type type → self-type type →(
type)
GRAMMAR OF A TYPE IDENTIFIER type-identifier → type-name generic-argument-clause| type-name generic-argument-clause.
type-identifier type-name → identifierGRAMMAR OF A TUPLE TYPE tuple-type →(
)
|(
tuple-type-element,
tuple-type-element-list)
tuple-type-element-list → tuple-type-element | tuple-type-element,
tuple-type-element-list tuple-type-element → element-name type-annotation | type element-name → identifierGRAMMAR OF A FUNCTION TYPE function-type → attributesfunction-type-argument-clauseasync
throws
->
type function-type-argument-clause →(
)
function-type-argument-clause →(
function-type-argument-list...
)
function-type-argument-list → function-type-argument | function-type-argument,
function-type-argument-list function-type-argument → attributesinout
type | argument-label type-annotation argument-label → identifierGRAMMAR OF A PROTOCOL COMPOSITION TYPE protocol-composition-type → type-identifier&
protocol-composition-continuation protocol-composition-continuation → type-identifier | protocol-composition-typeGRAMMAR OF AN ANY TYPE any-type →Any
GRAMMAR OF A SELF TYPE self-type →Self
GRAMMAR OF A TYPE INHERITANCE CLAUSE type-inheritance-clause →:
type-inheritance-list type-inheritance-list → attributestype-identifier | attributestype-identifier,
type-inheritance-list
GRAMMAR OF AN EXPRESSION expression → try-operatorawait-operatorprefix-expression infix-expressionsexpression-list → expression | expression,
expression-listGRAMMAR OF A PREFIX EXPRESSION prefix-expression → prefix-operatorpostfix-expression prefix-expression → in-out-expressionGRAMMAR OF A TRY EXPRESSION try-operator →try
|try
?
|try
!
GRAMMAR OF AN AWAIT EXPRESSION await-operator →await
GRAMMAR OF A INFIX EXPRESSION infix-expression → infix-operator prefix-expression infix-expression → assignment-operator try-operatorprefix-expression infix-expression → conditional-operator try-operatorprefix-expression infix-expression → type-casting-operator infix-expressions → infix-expression infix-expressionsGRAMMAR OF AN ASSIGNMENT OPERATOR assignment-operator →=
GRAMMAR OF A PRIMARY EXPRESSION primary-expression → identifier generic-argument-clauseprimary-expression → literal-expression primary-expression → self-expression primary-expression → superclass-expression primary-expression → closure-expression primary-expression → parenthesized-expression primary-expression → tuple-expression primary-expression → implicit-member-expression primary-expression → wildcard-expression primary-expression → key-path-expression primary-expression → selector-expression primary-expression → key-path-string-expressionGRAMMAR OF A LITERAL EXPRESSION literal-expression → literal literal-expression → array-literal | dictionary-literal | playground-literal literal-expression →#file
|#fileID
|#filePath
literal-expression →#line
|#column
|#function
|#dsohandle
array-literal →[
array-literal-items]
array-literal-items → array-literal-item,
| array-literal-item,
array-literal-items array-literal-item → expression dictionary-literal →[
dictionary-literal-items]
|[
:
]
dictionary-literal-items → dictionary-literal-item,
| dictionary-literal-item,
dictionary-literal-items dictionary-literal-item → expression:
expression playground-literal →#colorLiteral
(
red
:
expression,
green
:
expression,
blue
:
expression,
alpha
:
expression)
playground-literal →#fileLiteral
(
resourceName
:
expression)
playground-literal →#imageLiteral
(
resourceName
:
expression)
GRAMMAR OF A SELF EXPRESSION self-expression →self
| self-method-expression | self-subscript-expression | self-initializer-expression self-method-expression →self
.
identifier self-subscript-expression →self
[
function-call-argument-list]
self-initializer-expression →self
.
init
GRAMMAR OF A SUPERCLASS EXPRESSION superclass-expression → superclass-method-expression | superclass-subscript-expression | superclass-initializer-expression superclass-method-expression →super
.
identifier superclass-subscript-expression →super
[
function-call-argument-list]
superclass-initializer-expression →super
.
init
GRAMMAR OF A CLOSURE EXPRESSION closure-expression →{
attributesclosure-signaturestatements}
closure-signature → capture-listclosure-parameter-clausethrows
function-resultin
closure-signature → capture-listin
closure-parameter-clause →(
)
|(
closure-parameter-list)
| identifier-list closure-parameter-list → closure-parameter | closure-parameter,
closure-parameter-list closure-parameter → closure-parameter-name type-annotationclosure-parameter → closure-parameter-name type-annotation...
closure-parameter-name → identifier capture-list →[
capture-list-items]
capture-list-items → capture-list-item | capture-list-item,
capture-list-items capture-list-item → capture-specifieridentifier capture-list-item → capture-specifieridentifier=
expression capture-list-item → capture-specifierself-expression capture-specifier →weak
|unowned
|unowned(safe)
|unowned(unsafe)
GRAMMAR OF A IMPLICIT MEMBER EXPRESSION implicit-member-expression →.
identifier implicit-member-expression →.
identifier.
postfix-expressionGRAMMAR OF A TUPLE EXPRESSION tuple-expression →(
)
|(
tuple-element,
tuple-element-list)
tuple-element-list → tuple-element | tuple-element,
tuple-element-list tuple-element → expression | identifier:
expressionGRAMMAR OF A WILDCARD EXPRESSION wildcard-expression →_
GRAMMAR OF A KEY-PATH EXPRESSION key-path-expression →\
type.
key-path-components key-path-components → key-path-component | key-path-component.
key-path-components key-path-component → identifier key-path-postfixes| key-path-postfixes key-path-postfixes → key-path-postfix key-path-postfixeskey-path-postfix →?
|!
|self
|[
function-call-argument-list]
GRAMMAR OF A SELECTOR EXPRESSION selector-expression →#selector
(
expression)
selector-expression →#selector
(
getter:
expression)
selector-expression →#selector
(
setter:
expression)
GRAMMAR OF A POSTFIX EXPRESSION postfix-expression → primary-expression postfix-expression → postfix-expression postfix-operator postfix-expression → function-call-expression postfix-expression → initializer-expression postfix-expression → explicit-member-expression postfix-expression → postfix-self-expression postfix-expression → subscript-expression postfix-expression → forced-value-expression postfix-expression → optional-chaining-expressionGRAMMAR OF A FUNCTION CALL EXPRESSION function-call-expression → postfix-expression function-call-argument-clause function-call-expression → postfix-expression function-call-argument-clausetrailing-closures function-call-argument-clause →(
)
|(
function-call-argument-list)
function-call-argument-list → function-call-argument | function-call-argument,
function-call-argument-list function-call-argument → expression | identifier:
expression function-call-argument → operator | identifier:
operator trailing-closures → closure-expression labeled-trailing-closureslabeled-trailing-closures → labeled-trailing-closure labeled-trailing-closureslabeled-trailing-closure → identifier:
closure-expressionGRAMMAR OF AN INITIALIZER EXPRESSION initializer-expression → postfix-expression.
init
initializer-expression → postfix-expression.
init
(
argument-names)
GRAMMAR OF AN EXPLICIT MEMBER EXPRESSION explicit-member-expression → postfix-expression.
decimal-digits explicit-member-expression → postfix-expression.
identifier generic-argument-clauseexplicit-member-expression → postfix-expression.
identifier(
argument-names)
explicit-member-expression → postfix-expression conditional-compilation-block argument-names → argument-name argument-namesargument-name → identifier:
GRAMMAR OF A SUBSCRIPT EXPRESSION subscript-expression → postfix-expression[
function-call-argument-list]
GRAMMAR OF A STATEMENT statement → expression;
statement → declaration;
statement → loop-statement;
statement → branch-statement;
statement → labeled-statement;
statement → control-transfer-statement;
statement → defer-statement;
statement → do-statement;
statement → compiler-control-statement statements → statement statementsGRAMMAR OF A LOOP STATEMENT loop-statement → for-in-statement loop-statement → while-statement loop-statement → repeat-while-statementGRAMMAR OF A FOR-IN STATEMENT for-in-statement →for
case
patternin
expression where-clausecode-blockGRAMMAR OF A WHILE STATEMENT while-statement →while
condition-list code-block condition-list → condition | condition,
condition-list condition → expression | availability-condition | case-condition | optional-binding-condition case-condition →case
pattern initializer optional-binding-condition →let
pattern initializer|var
pattern initializerGRAMMAR OF A BRANCH STATEMENT branch-statement → if-statement branch-statement → guard-statement branch-statement → switch-statementGRAMMAR OF AN IF STATEMENT if-statement →if
condition-list code-block else-clauseelse-clause →else
code-block |else
if-statementGRAMMAR OF A SWITCH STATEMENT switch-statement →switch
expression{
switch-cases}
switch-cases → switch-case switch-casesswitch-case → case-label statements switch-case → default-label statements switch-case → conditional-switch-case case-label → attributescase
case-item-list:
case-item-list → pattern where-clause| pattern where-clause,
case-item-list default-label → attributesdefault
:
where-clause →where
where-expression where-expression → expression conditional-switch-case → switch-if-directive-clause switch-elseif-directive-clausesswitch-else-directive-clauseendif-directive switch-if-directive-clause → if-directive compilation-condition switch-casesswitch-elseif-directive-clauses → elseif-directive-clause switch-elseif-directive-clausesswitch-elseif-directive-clause → elseif-directive compilation-condition switch-casesswitch-else-directive-clause → else-directive switch-casesGRAMMAR OF A LABELED STATEMENT labeled-statement → statement-label loop-statement labeled-statement → statement-label if-statement labeled-statement → statement-label switch-statement labeled-statement → statement-label do-statement statement-label → label-name:
label-name → identifierGRAMMAR OF A CONTROL TRANSFER STATEMENT control-transfer-statement → break-statement control-transfer-statement → continue-statement control-transfer-statement → fallthrough-statement control-transfer-statement → return-statement control-transfer-statement → throw-statementGRAMMAR OF A FALLTHROUGH STATEMENT fallthrough-statement →fallthrough
GRAMMAR OF A DO STATEMENT do-statement →do
code-block catch-clausescatch-clauses → catch-clause catch-clausescatch-clause →catch
catch-pattern-listcode-block catch-pattern-list → catch-pattern | catch-pattern,
catch-pattern-list catch-pattern → pattern where-clauseGRAMMAR OF A COMPILER CONTROL STATEMENT compiler-control-statement → conditional-compilation-block compiler-control-statement → line-control-statement compiler-control-statement → diagnostic-statementGRAMMAR OF A CONDITIONAL COMPILATION BLOCK conditional-compilation-block → if-directive-clause elseif-directive-clauseselse-directive-clauseendif-directive if-directive-clause → if-directive compilation-condition statementselseif-directive-clauses → elseif-directive-clause elseif-directive-clauseselseif-directive-clause → elseif-directive compilation-condition statementselse-directive-clause → else-directive statementsif-directive →#if
elseif-directive →#elseif
else-directive →#else
endif-directive →#endif
compilation-condition → platform-condition compilation-condition → identifier compilation-condition → boolean-literal compilation-condition →(
compilation-condition)
compilation-condition →!
compilation-condition compilation-condition → compilation-condition&&
compilation-condition compilation-condition → compilation-condition||
compilation-condition platform-condition →os
(
operating-system)
platform-condition →arch
(
architecture)
platform-condition →swift
(
>=
swift-version)
|swift
(
<
swift-version)
platform-condition →compiler
(
>=
swift-version)
|compiler
(
<
swift-version)
platform-condition →canImport
(
module-name)
platform-condition →targetEnvironment
(
environment)
operating-system →macOS
|iOS
|watchOS
|tvOS
|Linux
|Windows
architecture →i386
|x86_64
|arm
|arm64
swift-version → decimal-digits swift-version-continuationswift-version-continuation →.
decimal-digits swift-version-continuationenvironment →simulator
|macCatalyst
GRAMMAR OF A LINE CONTROL STATEMENT line-control-statement →#sourceLocation
(
file:
file-path,
line:
line-number)
line-control-statement →#sourceLocation
(
)
line-number → 0 보다 큰 10진수 정수 file-path → static-string-literalGRAMMAR OF A COMPILE-TIME DIAGNOSTIC STATEMENT diagnostic-statement →#error
(
diagnostic-message)
diagnostic-statement →#warning
(
diagnostic-message)
diagnostic-message → static-string-literalGRAMMAR OF AN AVAILABILITY CONDITION availability-condition →#available
(
availability-arguments)
availability-condition →#unavailable
(
availability-arguments)
availability-arguments → availability-argument | availability-argument,
availability-arguments availability-argument → platform-name platform-version availability-argument →*
platform-name →iOS
|iOSApplicationExtension
platform-name →macOS
|macOSApplicationExtension
platform-name →macCatalyst
|macCatalystApplicationExtension
platform-name →watchOS
platform-name →tvOS
platform-version → decimal-digits platform-version → decimal-digits.
decimal-digits platform-version → decimal-digits.
decimal-digits.
decimal-digits
GRAMMAR OF A DECLARATION declaration → import-declaration declaration → constant-declaration declaration → variable-declaration declaration → typealias-declaration declaration → function-declaration declaration → enum-declaration declaration → struct-declaration declaration → class-declaration declaration → actor-declaration declaration → protocol-declaration declaration → initializer-declaration declaration → deinitializer-declaration declaration → extension-declaration declaration → subscript-declaration declaration → operator-declaration declaration → precedence-group-declaration declarations → declaration declarationsGRAMMAR OF AN IMPORT DECLARATION import-declaration → attributesimport
import-kindimport-path import-kind →typealias
|struct
|class
|enum
|protocol
|let
|var
|func
import-path → identifier | identifier.
import-pathGRAMMAR OF A CONSTANT DECLARATION constant-declaration → attributesdeclaration-modifierslet
pattern-initializer-list pattern-initializer-list → pattern-initializer | pattern-initializer,
pattern-initializer-list pattern-initializer → pattern initializerinitializer →=
expressionGRAMMAR OF A VARIABLE DECLARATION variable-declaration → variable-declaration-head pattern-initializer-list variable-declaration → variable-declaration-head variable-name type-annotation code-block variable-declaration → variable-declaration-head variable-name type-annotation getter-setter-block variable-declaration → variable-declaration-head variable-name type-annotation getter-setter-keyword-block variable-declaration → variable-declaration-head variable-name initializer willSet-didSet-block variable-declaration → variable-declaration-head variable-name type-annotation initializerwillSet-didSet-block variable-declaration-head → attributesdeclaration-modifiersvar
variable-name → identifier getter-setter-block → code-block getter-setter-block →{
getter-clause setter-clause}
getter-setter-block →{
setter-clause getter-clause}
getter-clause → attributesmutation-modifierget
code-block setter-clause → attributesmutation-modifierset
setter-namecode-block setter-name →(
identifier)
getter-setter-keyword-block →{
getter-keyword-clause setter-keyword-clause}
getter-setter-keyword-block →{
setter-keyword-clause getter-keyword-clause}
getter-keyword-clause → attributesmutation-modifierget
setter-keyword-clause → attributesmutation-modifierset
willSet-didSet-block →{
willSet-clause didSet-clause}
willSet-didSet-block →{
didSet-clause willSet-clause}
willSet-clause → attributeswillSet
setter-namecode-block didSet-clause → attributesdidSet
setter-namecode-blockGRAMMAR OF A TYPE ALIAS DECLARATION typealias-declaration → attributesaccess-level-modifiertypealias
typealias-name generic-parameter-clausetypealias-assignment typealias-name → identifier typealias-assignment →=
typeGRAMMAR OF A FUNCTION DECLARATION function-declaration → function-head function-name generic-parameter-clausefunction-signaturegeneric-where-clausefunction-bodyfunction-head → attributesdeclaration-modifiersfunc
function-name → identifier | operator function-signature → parameter-clausethrows
function-resultfunction-signature → parameter-clauserethrows
function-resultfunction-result →->
attributestype function-body → code-block parameter-clause →(
)
|(
parameter-list)
parameter-list → parameter | parameter,
parameter-list parameter → external-parameter-namelocal-parameter-name type-annotation default-argument-clauseparameter → external-parameter-namelocal-parameter-name type-annotation parameter → external-parameter-namelocal-parameter-name type-annotation...
external-parameter-name → identifier local-parameter-name → identifier default-argument-clause →=
expressionGRAMMAR OF AN ENUMERATION DECLARATION enum-declaration → attributesaccess-level-modifierunion-style-enum enum-declaration → attributesaccess-level-modifierraw-value-style-enum union-style-enum →indirect
enum
enum-name generic-parameter-clausetype-inheritance-clausegeneric-where-clause{
union-style-enum-members}
union-style-enum-members → union-style-enum-member union-style-enum-membersunion-style-enum-member → declaration | union-style-enum-case-clause | compiler-control-statement union-style-enum-case-clause → attributesindirect
case
union-style-enum-case-list union-style-enum-case-list → union-style-enum-case | union-style-enum-case,
union-style-enum-case-list union-style-enum-case → enum-case-name tuple-typeenum-name → identifier enum-case-name → identifier raw-value-style-enum →enum
enum-name generic-parameter-clausetype-inheritance-clausegeneric-where-clause{
raw-value-style-enum-members}
raw-value-style-enum-members → raw-value-style-enum-member raw-value-style-enum-membersraw-value-style-enum-member → declaration | raw-value-style-enum-case-clause | compiler-control-statement raw-value-style-enum-case-clause → attributescase
raw-value-style-enum-case-list raw-value-style-enum-case-list → raw-value-style-enum-case | raw-value-style-enum-case,
raw-value-style-enum-case-list raw-value-style-enum-case → enum-case-name raw-value-assignmentraw-value-assignment →=
raw-value-literal raw-value-literal → numeric-literal | static-string-literal | boolean-literalGRAMMAR OF A STRUCTURE DECLARATION struct-declaration → attributesaccess-level-modifierstruct
struct-name generic-parameter-clausetype-inheritance-clausegeneric-where-clausestruct-body struct-name → identifier struct-body →{
struct-members}
struct-members → struct-member struct-membersstruct-member → declaration | compiler-control-statementGRAMMAR OF A CLASS DECLARATION class-declaration → attributesaccess-level-modifierfinal
class
class-name generic-parameter-clausetype-inheritance-clausegeneric-where-clauseclass-body class-declaration → attributesfinal
access-level-modifierclass
class-name generic-parameter-clausetype-inheritance-clausegeneric-where-clauseclass-body class-name → identifier class-body →{
class-members