Summary of the Grammar¶ 文法の概要¶
Lexical Structure¶ 語彙の構造¶
Grammar of whitespace 空白の文法
whitespace → whitespace-item whitespace opt
whitespace-item → line-break
whitespace-item → inline-space
whitespace-item → comment
whitespace-item → multiline-comment
inline-spaces → inline-space inline-spaces opt
comment → //
comment-text line-break
multiline-comment → /*
multiline-comment-text */
comment-text → comment-text-item comment-text opt
comment-text-item → Any Unicode scalar value except U+000A or U+000D 任意のユニコードスカラー値、 しかし U+000A または U+000D を除く
multiline-comment-text → multiline-comment-text-item multiline-comment-text opt
multiline-comment-text-item → multiline-comment
multiline-comment-text-item → comment-text-item
multiline-comment-text-item → Any Unicode scalar value except /*
or */
任意のユニコードスカラー値、 しかし/*
または */
を除く
Grammar of an identifier 識別子の文法
identifier → identifier-head identifier-characters opt
identifier → `
identifier-head identifier-characters opt `
identifier → implicit-parameter-name
identifier → property-wrapper-projection
identifier-list → identifier | identifier ,
identifier-list
identifier-head → Upper- or lowercase letter A through Z 大文字または小文字のAからZ
identifier-head → U+00A8, U+00AA, U+00AD, U+00AF, U+00B2–U+00B5, or U+00B7–U+00BA 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, or U+00F8–U+00FF 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, or U+180F–U+1DBF 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, or U+2060–U+206F 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, or U+2776–U+2793 U+2070–U+20CF, U+2100–U+218F, U+2460–U+24FF, または U+2776–U+2793
identifier-head → U+2C00–U+2DFF or U+2E80–U+2FFF
identifier-head → U+3004–U+3007, U+3021–U+302F, U+3031–U+303F, or U+3040–U+D7FF 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, or U+FE30–U+FE44 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, or U+40000–U+4FFFD 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, or U+80000–U+8FFFD 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, or U+C0000–U+CFFFD U+90000–U+9FFFD, U+A0000–U+AFFFD, U+B0000–U+BFFFD, または U+C0000–U+CFFFD
identifier-head → U+D0000–U+DFFFD or U+E0000–U+EFFFD U+D0000–U+DFFFD または U+E0000–U+EFFFD
identifier-character → Digit 0 through 9 アラビア数字の0から9
identifier-character → U+0300–U+036F, U+1DC0–U+1DFF, U+20D0–U+20FF, or U+FE20–U+FE2F 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-characters opt
implicit-parameter-name → $
decimal-digits
property-wrapper-projection → $
identifier-characters
Grammar of a literal リテラルの文法
literal → numeric-literal | string-literal | boolean-literal | nil-literal
numeric-literal → -
opt integer-literal | -
opt floating-point-literal
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-characters opt
binary-digit → Digit 0 or 1 アラビア数字の0または1
binary-literal-character → binary-digit | _
binary-literal-characters → binary-literal-character binary-literal-characters opt
octal-literal → 0o
octal-digit octal-literal-characters opt
octal-digit → Digit 0 through 7 アラビア数字の0から7
octal-literal-character → octal-digit | _
octal-literal-characters → octal-literal-character octal-literal-characters opt
decimal-literal → decimal-digit decimal-literal-characters opt
decimal-digit → Digit 0 through 9 アラビア数字の0から9
decimal-digits → decimal-digit decimal-digits opt
decimal-literal-character → decimal-digit | _
decimal-literal-characters → decimal-literal-character decimal-literal-characters opt
hexadecimal-literal → 0x
hexadecimal-digit hexadecimal-literal-characters opt
hexadecimal-digit → Digit 0 through 9, a through f, or A through F アラビア数字の0から9、aからf、またはAからF
hexadecimal-literal-character → hexadecimal-digit | _
hexadecimal-literal-characters → hexadecimal-literal-character hexadecimal-literal-characters opt
Grammar of a floating-point literal 浮動小数点リテラルの文法
floating-point-literal → decimal-literal decimal-fraction opt decimal-exponent opt
floating-point-literal → hexadecimal-literal hexadecimal-fraction opt hexadecimal-exponent
decimal-fraction → .
decimal-literal
decimal-exponent → floating-point-e sign opt decimal-literal
hexadecimal-fraction → .
hexadecimal-digit hexadecimal-literal-characters opt
hexadecimal-exponent → floating-point-p sign opt decimal-literal
Grammar of a string literal 文字列リテラルの文法
string-literal → static-string-literal | interpolated-string-literal
string-literal-opening-delimiter → extended-string-literal-delimiter opt "
string-literal-closing-delimiter → "
extended-string-literal-delimiter opt
static-string-literal → string-literal-opening-delimiter quoted-text opt string-literal-closing-delimiter
static-string-literal → multiline-string-literal-opening-delimiter multiline-quoted-text opt multiline-string-literal-closing-delimiter
multiline-string-literal-opening-delimiter → extended-string-literal-delimiter opt """
multiline-string-literal-closing-delimiter → """
extended-string-literal-delimiter opt
extended-string-literal-delimiter → #
extended-string-literal-delimiter opt
quoted-text → quoted-text-item quoted-text opt
quoted-text-item → escaped-character
quoted-text-item → Any Unicode scalar value except "
, \
, U+000A, or U+000D
何らかのユニコードスカラー値、しかし"
, \
、U+000A、またはU+000Dを除く
multiline-quoted-text → multiline-quoted-text-item multiline-quoted-text opt
multiline-quoted-text-item → escaped-character
multiline-quoted-text-item → Any Unicode scalar value except \
任意のユニコードスカラー値、しかし\
を除く
multiline-quoted-text-item → escaped-newline
interpolated-string-literal → string-literal-opening-delimiter interpolated-text opt string-literal-closing-delimiter
interpolated-string-literal → multiline-string-literal-opening-delimiter multiline-interpolated-text opt multiline-string-literal-closing-delimiter
interpolated-text → interpolated-text-item interpolated-text opt
interpolated-text-item → \(
expression )
| quoted-text-item
multiline-interpolated-text → multiline-interpolated-text-item multiline-interpolated-text opt
multiline-interpolated-text-item → \(
expression )
| multiline-quoted-text-item
escape-sequence → \
extended-string-literal-delimiter
escaped-character → escape-sequence 0
| escape-sequence \
| escape-sequence t
| escape-sequence n
| escape-sequence r
| escape-sequence "
| escape-sequence '
escaped-character → escape-sequence u
{
unicode-scalar-digits }
unicode-scalar-digits → Between one and eight hexadecimal digits 1から8桁の16進数
escaped-newline → escape-sequence inline-spaces opt line-break
Grammar of operators 演算子の文法
operator → operator-head operator-characters opt
operator → dot-operator-head dot-operator-characters
operator-head → /
| =
| -
| +
| !
| *
| %
| <
| >
| &
| |
| ^
| ~
| ?
operator-head → U+00A9 or U+00AB
operator-head → U+00AC or U+00AE
operator-head → U+00B6, U+00BB, U+00BF, U+00D7, or U+00F7 U+00B6, U+00BB, U+00BF, U+00D7, または U+00F7
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-characters opt
dot-operator-character → .
| operator-character
dot-operator-characters → dot-operator-character dot-operator-characters opt
Types¶ 型¶
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 annotation 型注釈の文法
type-annotation → :
attributes opt inout
opt type
Grammar of a type identifier 型識別子の文法
type-identifier → type-name generic-argument-clause opt | type-name generic-argument-clause opt .
type-identifier
type-name → identifier
Grammar 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 → identifier
Grammar of a function type 関数型の文法
function-type → attributes opt function-type-argument-clause throws
opt ->
type
function-type-argument-clause → (
)
function-type-argument-clause → (
function-type-argument-list ...
opt )
function-type-argument-list → function-type-argument | function-type-argument ,
function-type-argument-list
function-type-argument → attributes opt inout
opt type | argument-label type-annotation
argument-label → identifier
Grammar of an array type 配列型の文法
array-type → [
type ]
Grammar of an optional type オプショナル型の文法
optional-type → type ?
Grammar of an implicitly unwrapped optional type 暗黙的にアンラップされるオプショナル型の文法
implicitly-unwrapped-optional-type → type !
Grammar of a protocol composition type プロトコル合成型の文法
protocol-composition-type → type-identifier &
protocol-composition-continuation
protocol-composition-continuation → type-identifier | protocol-composition-type
Grammar of an opaque type 不透明型の構文
opaque-type → some
type
Grammar of a type inheritance clause 型継承節の文法
type-inheritance-clause → :
type-inheritance-list
type-inheritance-list → type-identifier | type-identifier ,
type-inheritance-list
Expressions¶ 式¶
Grammar of an expression 式の文法
expression → try-operator opt await-operator opt prefix-expression infix-expressions opt
expression-list → expression | expression ,
expression-list
Grammar of a prefix expression 接頭辞式の文法
prefix-expression → prefix-operator opt postfix-expression
prefix-expression → in-out-expression
Grammar of an in-out expression in-out式の文法
in-out-expression → &
identifier
Grammar of an infix expression 接中辞式の文法
infix-expression → infix-operator prefix-expression
infix-expression → assignment-operator try-operator opt prefix-expression
infix-expression → conditional-operator try-operator opt prefix-expression
infix-expression → type-casting-operator
infix-expressions → infix-expression infix-expressions opt
Grammar of a conditional operator 条件演算子の文法
conditional-operator → ?
expression :
Grammar of a type-casting operator 型キャスト演算子の文法
Grammar of a primary expression 基本式の文法
primary-expression → identifier generic-argument-clause opt
primary-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-expression
Grammar 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 opt ]
array-literal-items → array-literal-item ,
opt | array-literal-item ,
array-literal-items
array-literal-item → expression
dictionary-literal → [
dictionary-literal-items ]
| [
:
]
dictionary-literal-items → dictionary-literal-item ,
opt | 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式の文法
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 ]
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 ]
Grammar of a closure expression クロージャ式の文法
closure-expression → {
closure-signature opt statements opt }
closure-signature → capture-list opt closure-parameter-clause throws
opt function-result opt in
closure-signature → capture-list in
closure-parameter-clause → (
)
| (
closure-parameter-list )
| identifier-list
closure-parameter-list → closure-parameter | closure-parameter ,
closure-parameter-list
closure-parameter → closure-parameter-name type-annotation opt
closure-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-specifier opt identifier
capture-list-item → capture-specifier opt identifier =
expression
capture-list-item → capture-specifier opt self-expression
capture-specifier → weak
| unowned
| unowned(safe)
| unowned(unsafe)
Grammar of a implicit member expression 暗黙的メンバー式の文法
implicit-member-expression → .
identifier
implicit-member-expression → .
identifier .
postfix-expression
Grammar of a parenthesized expression 丸括弧に入れられた式の文法
parenthesized-expression → (
expression )
Grammar 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 :
expression
Grammar of a key-path expression キーパス式の文法
key-path-expression → \
type opt .
key-path-components
key-path-components → key-path-component | key-path-component .
key-path-components
key-path-component → identifier key-path-postfixes opt | key-path-postfixes
key-path-postfixes → key-path-postfix key-path-postfixes opt
key-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 key-path string expression キーパス文字列式の文法
key-path-string-expression → #keyPath
(
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-expression
Grammar of a function call expression 関数呼び出し式の文法
function-call-expression → postfix-expression function-call-argument-clause
function-call-expression → postfix-expression function-call-argument-clause opt trailing-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-closures opt
labeled-trailing-closures → labeled-trailing-closure labeled-trailing-closures opt
labeled-trailing-closure → identifier :
closure-expression
Grammar 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-clause opt
explicit-member-expression → postfix-expression .
identifier (
argument-names )
explicit-member-expression → postfix-expression conditional-compilation-block
argument-names → argument-name argument-names opt
argument-name → identifier :
Grammar of a postfix self expression 接尾辞self式の文法
postfix-self-expression → postfix-expression .
self
Grammar of a subscript expression 添え字式の文法
subscript-expression → postfix-expression [
function-call-argument-list ]
Grammar of a forced-value expression 強制された値の式の文法
forced-value-expression → postfix-expression !
Grammar of an optional-chaining expression オプショナル連鎖式の文法
optional-chaining-expression → postfix-expression ?
Statements¶ 文¶
Grammar of a statement 文の文法
statement → expression ;
opt
statement → declaration ;
opt
statement → loop-statement ;
opt
statement → branch-statement ;
opt
statement → labeled-statement ;
opt
statement → control-transfer-statement ;
opt
statement → defer-statement ;
opt
statement → do-statement ;
opt
statement → compiler-control-statement
statements → statement statements opt
Grammar of a loop statement ループ文の文法
loop-statement → for-in-statement
loop-statement → while-statement
loop-statement → repeat-while-statement
Grammar of a for-in statement for-in文の文法
for-in-statement → for
case
opt pattern in
expression where-clause opt code-block
Grammar of a while statement while文の文法
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 initializer
Grammar of a repeat-while statement repeat-while文の文法
repeat-while-statement → repeat
code-block while
expression
Grammar of a branch statement 分岐文の文法
branch-statement → if-statement
branch-statement → guard-statement
branch-statement → switch-statement
Grammar of an if statement if文の文法
if-statement → if
condition-list code-block else-clause opt
else-clause → else
code-block | else
if-statement
Grammar of a guard statement guard文の文法
guard-statement → guard
condition-list else
code-block
Grammar of a switch statement switch文の文法
switch-statement → switch
expression {
switch-cases opt }
switch-cases → switch-case switch-cases opt
switch-case → case-label statements
switch-case → default-label statements
switch-case → conditional-switch-case
case-label → attributes opt case
case-item-list :
case-item-list → pattern where-clause opt | pattern where-clause opt ,
case-item-list
default-label → attributes opt default
:
where-clause → where
where-expression
where-expression → expression
conditional-switch-case → switch-if-directive-clause switch-elseif-directive-clauses opt switch-else-directive-clause opt endif-directive
switch-if-directive-clause → if-directive compilation-condition switch-cases opt
switch-elseif-directive-clauses → elseif-directive-clause switch-elseif-directive-clauses opt
switch-elseif-directive-clause → elseif-directive compilation-condition switch-cases opt
switch-else-directive-clause → else-directive switch-cases opt
Grammar 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 → identifier
Grammar 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-statement
Grammar of a break statement ブレーク文の文法
break-statement → break
label-name opt
Grammar of a continue statement 継続文の文法
continue-statement → continue
label-name opt
Grammar of a return statement return文の文法
return-statement → return
expression opt
Grammar of a throw statement スロー文の文法
throw-statement → throw
expression
Grammar of a defer statement defer文の文法
defer-statement → defer
code-block
Grammar of a do statement do文の文法
do-statement → do
code-block catch-clauses opt
catch-clauses → catch-clause catch-clauses opt
catch-clause → catch
catch-pattern-list opt code-block
catch-pattern-list → catch-pattern | catch-pattern ,
catch-pattern-list
catch-pattern → pattern where-clause opt
Grammar of a compiler control statement コンパイラ制御文の文法
compiler-control-statement → conditional-compilation-block
compiler-control-statement → line-control-statement
compiler-control-statement → diagnostic-statement
Grammar of a conditional compilation block 条件コンパイルブロックの文法
conditional-compilation-block → if-directive-clause elseif-directive-clauses opt else-directive-clause opt endif-directive
if-directive-clause → if-directive compilation-condition statements opt
elseif-directive-clauses → elseif-directive-clause elseif-directive-clauses opt
elseif-directive-clause → elseif-directive compilation-condition statements opt
else-directive-clause → else-directive statements opt
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-continuation opt
swift-version-continuation → .
decimal-digits swift-version-continuation opt
module-name → identifier
Grammar of a line control statement 行制御文の文法
line-control-statement → #sourceLocation
(
file:
file-path ,
line:
line-number )
line-control-statement → #sourceLocation
(
)
line-number → A decimal integer greater than zero 0より大きい10進法整数
file-path → static-string-literal
Grammar of a compile-time diagnostic statement コンパイル時診断文の文法
diagnostic-statement → #error
(
diagnostic-message )
diagnostic-statement → #warning
(
diagnostic-message )
diagnostic-message → static-string-literal
Grammar of an availability condition 有効性条件の文法
availability-condition → #available
(
availability-arguments )
availability-arguments → availability-argument | availability-argument ,
availability-arguments
availability-argument → platform-name platform-version
platform-name → iOS
| iOSApplicationExtension
platform-name → macOS
| macOSApplicationExtension
platform-name → macCatalyst
| macCatalystApplicationExtension
platform-version → decimal-digits
platform-version → decimal-digits .
decimal-digits
platform-version → decimal-digits .
decimal-digits .
decimal-digits
Declarations¶ 宣言¶
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 declarations opt
Grammar of a top-level declaration トップレベル宣言の文法
top-level-declaration → statements opt
Grammar of a code block コードブロックの文法
code-block → {
statements opt }
Grammar of an import declaration インポート宣言の文法
import-declaration → attributes opt import
import-kind opt import-path
import-kind → typealias
| struct
| class
| enum
| protocol
| let
| var
| func
import-path → import-path-identifier | import-path-identifier .
import-path
import-path-identifier → identifier | operator
Grammar of a constant declaration 定数宣言の文法
constant-declaration → attributes opt declaration-modifiers opt let
pattern-initializer-list
pattern-initializer-list → pattern-initializer | pattern-initializer ,
pattern-initializer-list
pattern-initializer → pattern initializer opt
initializer → =
expression
Grammar 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 initializer opt willSet-didSet-block
variable-declaration-head → attributes opt declaration-modifiers opt var
variable-name → identifier
getter-setter-block → code-block
getter-setter-block → {
getter-clause setter-clause opt }
getter-setter-block → {
setter-clause getter-clause }
getter-clause → attributes opt mutation-modifier opt get
code-block
setter-clause → attributes opt mutation-modifier opt set
setter-name opt code-block
setter-name → (
identifier )
getter-setter-keyword-block → {
getter-keyword-clause setter-keyword-clause opt }
getter-setter-keyword-block → {
setter-keyword-clause getter-keyword-clause }
getter-keyword-clause → attributes opt mutation-modifier opt get
setter-keyword-clause → attributes opt mutation-modifier opt set
willSet-didSet-block → {
willSet-clause didSet-clause opt }
willSet-didSet-block → {
didSet-clause willSet-clause opt }
willSet-clause → attributes opt willSet
setter-name opt code-block
didSet-clause → attributes opt didSet
setter-name opt code-block
Grammar of a type alias declaration 型エイリアス宣言の文法
typealias-declaration → attributes opt access-level-modifier opt typealias
typealias-name generic-parameter-clause opt typealias-assignment
typealias-name → identifier
typealias-assignment → =
type
Grammar of a function declaration 関数宣言の文法
function-declaration → function-head function-name generic-parameter-clause opt function-signature generic-where-clause opt function-body opt
function-head → attributes opt declaration-modifiers opt func
function-name → identifier | operator
function-signature → parameter-clause async
opt throws
opt function-result opt
function-signature → parameter-clause async
opt rethrows
function-result opt
function-result → ->
attributes opt type
function-body → code-block
parameter-clause → (
)
| (
parameter-list )
parameter-list → parameter | parameter ,
parameter-list
parameter → external-parameter-name opt local-parameter-name type-annotation default-argument-clause opt
parameter → external-parameter-name opt local-parameter-name type-annotation
parameter → external-parameter-name opt local-parameter-name type-annotation ...
external-parameter-name → identifier
local-parameter-name → identifier
default-argument-clause → =
expression
Grammar of an enumeration declaration 列挙宣言の文法
enum-declaration → attributes opt access-level-modifier opt union-style-enum
enum-declaration → attributes opt access-level-modifier opt raw-value-style-enum
union-style-enum → indirect
opt enum
enum-name generic-parameter-clause opt type-inheritance-clause opt generic-where-clause opt {
union-style-enum-members opt }
union-style-enum-members → union-style-enum-member union-style-enum-members opt
union-style-enum-member → declaration | union-style-enum-case-clause | compiler-control-statement
union-style-enum-case-clause → attributes opt indirect
opt 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-type opt
enum-name → identifier
enum-case-name → identifier
raw-value-style-enum → enum
enum-name generic-parameter-clause opt type-inheritance-clause generic-where-clause opt {
raw-value-style-enum-members }
raw-value-style-enum-members → raw-value-style-enum-member raw-value-style-enum-members opt
raw-value-style-enum-member → declaration | raw-value-style-enum-case-clause | compiler-control-statement
raw-value-style-enum-case-clause → attributes opt case
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-assignment opt
raw-value-assignment → =
raw-value-literal
raw-value-literal → numeric-literal | static-string-literal | boolean-literal
Grammar of a structure declaration 構造体宣言の文法
struct-declaration → attributes opt access-level-modifier opt struct
struct-name generic-parameter-clause opt type-inheritance-clause opt generic-where-clause opt struct-body
struct-name → identifier
struct-body → {
struct-members opt }
struct-members → struct-member struct-members opt
struct-member → declaration | compiler-control-statement
Grammar of a class declaration クラス宣言の文法
class-declaration → attributes opt access-level-modifier opt final
opt class
class-name generic-parameter-clause opt type-inheritance-clause opt generic-where-clause opt class-body
class-declaration → attributes opt final
access-level-modifier opt class
class-name generic-parameter-clause opt type-inheritance-clause opt generic-where-clause opt class-body
class-name → identifier
class-body → {
class-members opt }
class-members → class-member class-members opt
class-member → declaration | compiler-control-statement
Grammar of an actor declaration アクター宣言の文法
actor-declaration → attributes opt access-level-modifier opt actor
actor-name generic-parameter-clause opt type-inheritance-clause opt generic-where-clause opt actor-body
actor-name → identifier
actor-body → {
actor-members opt }
actor-members → actor-member actor-members opt
actor-member → declaration | compiler-control-statement
Grammar of a protocol declaration プロトコル宣言の文法
protocol-declaration → attributes opt access-level-modifier opt protocol
protocol-name type-inheritance-clause opt generic-where-clause opt protocol-body
protocol-name → identifier
protocol-body → {
protocol-members opt }
protocol-members → protocol-member protocol-members opt
protocol-member → protocol-member-declaration | compiler-control-statement
protocol-member-declaration → protocol-property-declaration
protocol-member-declaration → protocol-method-declaration
protocol-member-declaration → protocol-initializer-declaration
protocol-member-declaration → protocol-subscript-declaration
protocol-member-declaration → protocol-associated-type-declaration
protocol-member-declaration → typealias-declaration
Grammar of a protocol property declaration プロトコルプロパティ宣言の文法
protocol-property-declaration → variable-declaration-head variable-name type-annotation getter-setter-keyword-block
Grammar of a protocol method declaration プロトコルメソッド宣言の文法
protocol-method-declaration → function-head function-name generic-parameter-clause opt function-signature generic-where-clause opt
Grammar of a protocol initializer declaration プロトコル・イニシャライザ宣言の文法
protocol-initializer-declaration → initializer-head generic-parameter-clause opt parameter-clause throws
opt generic-where-clause opt
protocol-initializer-declaration → initializer-head generic-parameter-clause opt parameter-clause rethrows
generic-where-clause opt
Grammar of a protocol subscript declaration プロトコル添え字宣言の文法
protocol-subscript-declaration → subscript-head subscript-result generic-where-clause opt getter-setter-keyword-block
Grammar of a protocol associated type declaration プロトコル関連型宣言の文法
protocol-associated-type-declaration → attributes opt access-level-modifier opt associatedtype
typealias-name type-inheritance-clause opt typealias-assignment opt generic-where-clause opt
Grammar of an initializer declaration イニシャライザ宣言の文法
initializer-declaration → initializer-head generic-parameter-clause opt parameter-clause throws
opt generic-where-clause opt initializer-body
initializer-declaration → initializer-head generic-parameter-clause opt parameter-clause rethrows
generic-where-clause opt initializer-body
initializer-head → attributes opt declaration-modifiers opt init
initializer-head → attributes opt declaration-modifiers opt init
?
initializer-head → attributes opt declaration-modifiers opt init
!
initializer-body → code-block
Grammar of a deinitializer declaration デイニシャライザ宣言の文法
deinitializer-declaration → attributes opt deinit
code-block
Grammar of an extension declaration 拡張宣言の文法
extension-declaration → attributes opt access-level-modifier opt extension
type-identifier type-inheritance-clause opt generic-where-clause opt extension-body
extension-body → {
extension-members opt }
extension-members → extension-member extension-members opt
extension-member → declaration | compiler-control-statement
Grammar of a subscript declaration 添え字宣言の文法
subscript-declaration → subscript-head subscript-result generic-where-clause opt code-block
subscript-declaration → subscript-head subscript-result generic-where-clause opt getter-setter-block
subscript-declaration → subscript-head subscript-result generic-where-clause opt getter-setter-keyword-block
subscript-head → attributes opt declaration-modifiers opt subscript
generic-parameter-clause opt parameter-clause
subscript-result → ->
attributes opt type
Grammar of an operator declaration 演算子宣言の文法
operator-declaration → prefix-operator-declaration | postfix-operator-declaration | infix-operator-declaration
prefix-operator-declaration → prefix
operator
operator
postfix-operator-declaration → postfix
operator
operator
infix-operator-declaration → infix
operator
operator infix-operator-group opt
infix-operator-group → :
precedence-group-name
Grammar of a precedence group declaration 優先順位グループ宣言の文法
precedence-group-declaration → precedencegroup
precedence-group-name {
precedence-group-attributes opt }
precedence-group-attributes → precedence-group-attribute precedence-group-attributes opt
precedence-group-attribute → precedence-group-relation
precedence-group-attribute → precedence-group-assignment
precedence-group-attribute → precedence-group-associativity
precedence-group-relation → higherThan
:
precedence-group-names
precedence-group-relation → lowerThan
:
precedence-group-names
precedence-group-assignment → assignment
:
boolean-literal
precedence-group-associativity → associativity
:
left
precedence-group-names → precedence-group-name | precedence-group-name ,
precedence-group-names
precedence-group-name → identifier
Grammar of a declaration modifier 宣言修飾子の文法
declaration-modifier → class
| convenience
| dynamic
| final
| infix
| lazy
| optional
| override
| postfix
| prefix
| required
| static
| unowned
| unowned
(
safe
)
| unowned
(
unsafe
)
| weak
declaration-modifier → access-level-modifier
declaration-modifier → mutation-modifier
declaration-modifier → actor-isolation-modifier
declaration-modifiers → declaration-modifier declaration-modifiers opt
Attributes¶ 属性¶
Grammar of an attribute 属性の文法
attribute → @
attribute-name attribute-argument-clause opt
attribute-name → identifier
attribute-argument-clause → (
balanced-tokens opt )
attributes → attribute attributes opt
balanced-tokens → balanced-token balanced-tokens opt
balanced-token → (
balanced-tokens opt )
balanced-token → [
balanced-tokens opt ]
balanced-token → {
balanced-tokens opt }
balanced-token → Any identifier, keyword, literal, or operator 任意の識別子、キーワード、リテラル、または演算子
balanced-token → Any punctuation except (
, )
, [
, ]
, {
, or }
任意の句読点、しかし(
, )
, [
, ]
, {
, または }
を除く
Patterns¶ パターン¶
Grammar of a pattern パターンの文法
pattern → wildcard-pattern type-annotation opt
pattern → identifier-pattern type-annotation opt
pattern → value-binding-pattern
pattern → tuple-pattern type-annotation opt
pattern → enum-case-pattern
pattern → optional-pattern
pattern → type-casting-pattern
pattern → expression-pattern
Grammar of an identifier pattern 識別子パターンの文法
identifier-pattern → identifier
Grammar of a tuple pattern タプル・パターンの文法
tuple-pattern → (
tuple-pattern-element-list opt )
tuple-pattern-element-list → tuple-pattern-element | tuple-pattern-element ,
tuple-pattern-element-list
tuple-pattern-element → pattern | identifier :
pattern
Grammar of an enumeration case pattern 列挙ケース節パターンの文法
enum-case-pattern → type-identifier opt .
enum-case-name tuple-pattern opt
Grammar of an optional pattern オプショナルパターンの文法
optional-pattern → identifier-pattern ?
Grammar of a type casting pattern 型キャスト・パターンの文法
Grammar of an expression pattern 式パターンの文法
expression-pattern → expression
Generic Parameters and Arguments¶ 総称体パラメータと引数¶
Grammar of a generic parameter clause 総称体パラメータ節の文法
generic-parameter-clause → <
generic-parameter-list >
generic-parameter-list → generic-parameter | generic-parameter ,
generic-parameter-list
generic-parameter → type-name
generic-parameter → type-name :
type-identifier
generic-parameter → type-name :
protocol-composition-type
generic-where-clause → where
requirement-list
requirement-list → requirement | requirement ,
requirement-list
requirement → conformance-requirement | same-type-requirement
conformance-requirement → type-identifier :
type-identifier
conformance-requirement → type-identifier :
protocol-composition-type
same-type-requirement → type-identifier ==
type
Grammar of a generic argument clause 総称体引数節の文法
generic-argument-clause → <
generic-argument-list >
generic-argument-list → generic-argument | generic-argument ,
generic-argument-list
generic-argument → type