Swift语言词法结构.docx

上传人:b****3 文档编号:11779096 上传时间:2023-06-02 格式:DOCX 页数:9 大小:19.75KB
下载 相关 举报
Swift语言词法结构.docx_第1页
第1页 / 共9页
Swift语言词法结构.docx_第2页
第2页 / 共9页
Swift语言词法结构.docx_第3页
第3页 / 共9页
Swift语言词法结构.docx_第4页
第4页 / 共9页
Swift语言词法结构.docx_第5页
第5页 / 共9页
Swift语言词法结构.docx_第6页
第6页 / 共9页
Swift语言词法结构.docx_第7页
第7页 / 共9页
Swift语言词法结构.docx_第8页
第8页 / 共9页
Swift语言词法结构.docx_第9页
第9页 / 共9页
亲,该文档总共9页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Swift语言词法结构.docx

《Swift语言词法结构.docx》由会员分享,可在线阅读,更多相关《Swift语言词法结构.docx(9页珍藏版)》请在冰点文库上搜索。

Swift语言词法结构.docx

Swift语言词法结构

Swift语言词法结构

Swift的“词法结构(lexicalstructure)”描述了如何在该语言中用字符序列构建合法标记,组成该语言中最底层的代码块,并在之后的章节中用于描述语言的其他部分。

通常,标记在随后介绍的语法约束下,由Swift源文件的输入文本中提取可能的最长子串生成。

这种方法称为“最长匹配项(longestmatch)”,或者“最大适合”(maximalmunch)。

1、空白与注释

空白(whitespace)有两个用途:

分隔源文件中的标记和区分运算符属于前缀还是后缀,(参见运算符)在其他情况下则会被忽略。

以下的字符会被当作空白:

空格(space)(U+0020)、换行符(linefeed)(U+000A)、回车符(carriagereturn)(U+000D)、水平tab(horizontaltab)(U+0009)、垂直tab(verticaltab)(U+000B)、换页符(formfeed)(U+000C)以及空(null)(U+0000)。

注释(comments)被编译器当作空白处理。

单行注释由//开始直到该行结束。

多行注释由/*开始,以*/结束。

可以嵌套注释,但注意注释标记必须匹配。

2、标识符

标识符(identifiers)可以由以下的字符开始:

大写或小写的字母A到Z、下划线_、基本多语言面(BasicMultilingualPlane)中的Unicode非组合字符以及基本多语言面以外的非专用区(PrivateUseArea)字符。

首字符之后,标识符允许使用数字和Unicode字符组合。

使用保留字(reservedword)作为标识符,需要在其前后增加反引号 。

例如,class不是合法的标识符,但可以使用class。

反引号不属于标识符的一部分,x和x表示同一标识符。

闭包(closure)中如果没有明确指定参数名称,参数将被隐式命名为$0、$1、$2...这些命名在闭包作用域内是合法的标识符。

标识符语法

identifier→identifier-head­identifier-characters­opt

identifier→identifier-headidentifier-charactersopt`

identifier→implicit-parameter-name

identifier-list→identifier|identifier,identifier-list

identifier-head→A到Z大写或小写字母

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,orU+FE20–U+FE2F

identifier-character→identifier-head

identifier-characters→identifier-characteridentifier-charactersopt

implicit-parameter-name→$decimal-digits

3、关键字

被保留的关键字(keywords)不允许用作标识符,除非被反引号转义,参见标识符。

用作声明的关键字:

class、deinit、enum、extension、func、import、init、let、protocol、static、struct、subscript、typealias、var

用作语句的关键字:

break、case、continue、default、do、else、fallthrough、if、in、for、return、switch、where、while

用作表达和类型的关键字:

as、dynamicType、is、new、super、self、Self、Type、COLUMN、FILE、FUNCTION、LINE

特定上下文中被保留的关键字:

associativity、didSet、get、infix、inout、left、mutating、none、nonmutating、operator、override、postfix、precedence、prefix、right、set、unowned、unowned(safe)、unowned(unsafe)、weak、willSet,这些关键字在特定上下文之外可以被用于标识符。

4、字面量

字面值表示整型、浮点型数字或文本类型的值,举例如下:

42                //整型字面量

3.14159           //浮点型字面量

“Hello,world!

”   //文本型字面量

字面量语法

literal→integer-literal|floating-point-literal|string-literal

整型字面量

整型字面量(integerliterals)表示未指定精度整型数的值。

整型字面量默认用十进制表示,可以加前缀来指定其他的进制,二进制字面量加0b,八进制字面量加0o,十六进制字面量加0x。

十进制字面量包含数字0至9。

二进制字面量只包含0或1,八进制字面量包含数字0至7,十六进制字面量包含数字0至9以及字母A至F(大小写均可)。

负整数的字面量在数字前加减号-,比如-42。

允许使用下划线_来增加数字的可读性,下划线不会影响字面量的值。

整型字面量也可以在数字前加0,同样不会影响字面量的值。

1000_000    //等于1000000

005         //等于5

除非特殊指定,整型字面量的默认类型为Swift标准库类型中的Int。

Swift标准库还定义了其他不同长度以及是否带符号的整数类型,请参考整数类型。

整型字面量语法

integer-literal→binary-literal

integer-literal→octal-literal

integer-literal→decimal-literal

integer-literal→hexadecimal-literal

binary-literal→0bbinary-digitbinary-literal-charactersopt

binary-digit→数字0或1

binary-literal-character→binary-digit|_

binary-literal-characters→binary-literal-characterbinary-literal-charactersopt

octal-literal→0ooctal-digitoctal-literal-charactersopt

octal-digit→数字0至7

octal-literal-character→octal-digit|_

octal-literal-characters→octal-literal-characteroctal-literal-charactersopt

decimal-literal→decimal-digitdecimal-literal-charactersopt

decimal-digit→数字0至9

decimal-digits→decimal-digitdecimal-digitsopt

decimal-literal-character→decimal-digit|_

decimal-literal-characters→decimal-literal-characterdecimal-literal-charactersopt

hexadecimal-literal→0xhexadecimal-digithexadecimal-literal-charactersopt

hexadecimal-digit→数字0到9,a到f,或A到F

hexadecimal-literal-character→hexadecimal-digit|_

hexadecimal-literal-characters→hexadecimal-literal-characterhexadecimal-literal-charactersopt

浮点型字面量

浮点型字面量(floating-pointliterals)表示未指定精度浮点数的值。

浮点型字面量默认用十进制表示(无前缀),也可以用十六进制表示(加前缀0x)。

十进制浮点型字面量(decimalfloating-pointliterals)由十进制数字串后跟小数部分或指数部分(或两者皆有)组成。

十进制小数部分由小数点.后跟十进制数字串组成。

指数部分由大写或小写字母e后跟十进制数字串组成,这串数字表示e之前的数量乘以10的几次方。

例如:

1.25e2表示1.25⨉10^2,也就是125.0;同样,1.25e-2表示1.25⨉10^-2,也就是0.0125。

十六进制浮点型字面量(hexadecimalfloating-pointliterals)由前缀0x后跟可选的十六进制小数部分以及十六进制指数部分组成。

十六进制小数部分由小数点后跟十六进制数字串组成。

指数部分由大写或小写字母p后跟十进制数字串组成,这串数字表示p之前的数量乘以2的几次方。

例如:

0xFp2表示15⨉2^2,也就是60;同样,0xFp-2表示15⨉2^-2,也就是3.75。

与整型字面量不同,负的浮点型字面量由一元运算符减号–和浮点型字面量组成,例如-42.0。

这代表一个表达式,而不是一个浮点整型字面量。

允许使用下划线_来增强可读性,下划线不会影响字面量的值。

浮点型字面量也可以在数字前加0,同样不会影响字面量的值。

10_000.56    //等于10000.56

005000.76    //等于5000.76

除非特殊指定,浮点型字面量的默认类型为Swift标准库类型中的Double,表示64位浮点数。

Swift标准库也定义Float类型,表示32位浮点数。

浮点型字面量语法

floating-point-literal→decimal-literaldecimal-fractionoptdecimal-exponentopt

floating-point-literal→hexadecimal-literalhexadecimal-fractionopthexadecimal-exponent

decimal-fraction→.decimal-literal

decimal-exponent→floating-point-esignoptdecimal-literal

hexadecimal-fraction→.hexadecimal-literalopt

hexadecimal-exponent→floating-point-psignopthexadecimal-literal

floating-point-e→e|E

floating-point-p→p|P

sign→+|-

文本型字面量

文本型字面量(stringliteral)由双引号中的字符串组成,形式如下:

“characters”

文本型字面量中不能包含未转义的双引号“、未转义的反斜线\、回车符(carriagereturn)或换行符(linefeed)。

可以在文本型字面量中使用的转义特殊符号如下:

空字符(NullCharacter)\0

反斜线(Backslash)\

水平Tab(HorizontalTab)\t

换行符(LineFeed)\n

回车符(CarriageReturn)\r

双引号(DoubleQuote)\”

单引号(SingleQuote)\’

字符也可以用以下方式表示:

\x后跟两位十六进制数字

\u后跟四位十六进制数字

\U后跟八位十六进制数字

后跟的数字表示一个Unicode码点。

文本型字面量允许在反斜线小括号()中插入表达式的值。

插入表达式(interpolatedexpression)不能包含未转义的双引号“、反斜线\、回车符或者换行符。

表达式值的类型必须在String类中有对应的初始化方法。

例如,以下所有文本型字面量的值相同:

“123″

“12(3)”

“12(1+2)”

varx=3;“12(x)”

文本型字面量的默认类型为String。

组成字符串的字符类型为Character。

更多有关String和Character的信息请参照字符串和字符。

文本型字面量语法

string-literal→“quoted-text”

quoted-text→quoted-text-itemquoted-textopt

quoted-text-item→escaped-character

quoted-text-item→(expression)

quoted-text-item→除“、\、U+000A或U+000D以外的任何Unicode扩展字符集

escaped-character→\0|\|\t|\n|\r|\”|\’

escaped-character→\xhexadecimal-digithexadecimal-digit

escaped-character→\uhexadecimal-digithexadecimal-digithexadecimal-digithexadecimal-digit

escaped-character→\Uhexadecimal-digithexadecimal-digithexadecimal-digithexadecimal-digithexadecimal-digithexadecimal-digithexadecimal-digithexadecimal-digit

5、运算符

Swift标准库定义了许多可供使用的运算符,其中大部分在基础运算符和高级运算符中进行了阐述。

这里将描述哪些字符能用作运算符。

运算符由一个或多个以下字符组成:

/、=、-、+、!

、、%、<、>、&、|、^、~、.。

也就是说,标记=,->、//、/、*/、.以及一元前缀运算符&属于保留字,这些标记不能被重写或用于自定义运算符。

运算符两侧的空白被用来区分该运算符是否为前缀运算符(prefixoperator)、后缀运算符(postfixoperator)或二元运算符(binaryoperator)。

规则总结如下:

如果运算符两侧都有空白或两侧都无空白,将被看作二元运算符。

例如:

a+b和a+b中的运算符+被看作二元运算符。

如果运算符只有左侧空白,将被看作前缀一元运算符。

例如a++b中的++被看作前缀一元运算符。

如果运算符只有右侧空白,将被看作后缀一元运算符。

例如a++b中的++被看作后缀一元运算符。

如果运算符左侧没有空白并紧跟.,将被看作后缀一元运算符。

例如a++.b中的++被看作后缀一元运算符(同理,a++.b中的++是后缀一元运算符而a++.b中的++不是).

鉴于这些规则,运算符前的字符(、[和{;运算符后的字符)、]和}以及字符,、;和:

都将用于空白检测。

以上规则需注意一点,如果运算符!

或?

左侧没有空白,则不管右侧是否有空白都将被看作后缀运算符。

如果将?

用作可选类型(optionaltype)修饰,左侧必须无空白。

如果用于条件运算符?

:

,必须两侧都有空白。

在特定构成中,以<或>开头的运算符会被分离成两个或多个标记,剩余部分以同样的方式会被再次分离。

因此,在Dictionary>中没有必要添加空白来消除闭合字符>的歧义。

在这个例子中,闭合字符>被看作单字符标记,而不会被误解为移位运算符>>。

要学习如何自定义新的运算符,请参考自定义操作符和运算符声明。

学习如何重写现有运算符,请参考运算符方法。

运算符语法

operator→operator-characteroperatoropt

operator-character→/|=|-|+|!

|*|%|<|>|&|||^|~|.

binary-operator→operator

prefix-operator→operator

postfix-operator→operator

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2