词法约定#
警告
本页面仍在编写中,内容尚不完整。
本页面规定 MoonBit 的词法形式。运行时表示、API 和字面量重载见基础。
在产生式中,{ symbol } 表示重复零次或多次,{ symbol }+ 表示重复一次或多次,x ... y 表示包含两端的范围。
通用词法类#
hex-digit ::= 09AFaf octal-digit ::= 07 unicode-scalar-value ::= U+0000U+D7FFU+E000U+10FFFF newline ::= LFCRCRLFU+2028U+2029 whitespace ::= U+0009U+000BU+000CU+0020U+00A0U+1680 U+2000U+200AU+202FU+205FU+3000U+FEFF
字符串字面量#
string-literal ::= "string-character" string-character ::= regular-string-character simple-escape-sequence unicode-escape-sequence interpolation regular-string-character ::= unicode-scalar-value"\CRLF simple-escape-sequence ::= \\"'ntbrf/ unicode-escape-sequence ::= \uhex-digithex-digithex-digithex-digit \u{hex-digit}
简单转义序列的含义如下:
序列 |
字符 |
|---|---|
|
反斜杠(U+005C) |
|
双引号(U+0022) |
|
单引号(U+0027) |
|
正斜杠(U+002F) |
|
换行符(U+000A) |
|
回车符(U+000D) |
|
水平制表符(U+0009) |
|
退格符(U+0008) |
|
换页符(U+000C) |
Unicode 转义必须表示 Unicode 标量值。若在右引号之前遇到 CR 或 LF,则报告未终止的字符串字面量。
插值#
interpolation ::= \{whitespaceexpressionwhitespace}
表达式不能为空,并在匹配的 } 处结束。嵌套字面量中的大括号不影响配对;嵌套插值会被递归识别。不允许 CR、LF、// 注释、属性和多行字符串字面量。
多行字符串字面量#
multiline-string-literal ::= raw-multiline-string-literal interpolated-multiline-string-literal raw-multiline-string-literal ::= raw-multiline-string-line newlineraw-multiline-string-line interpolated-multiline-string-literal ::= interpolated-multiline-string-line newlineinterpolated-multiline-string-line raw-multiline-string-line ::= #|multiline-regular-character interpolated-multiline-string-line ::= $|multiline-regular-characterinterpolation multiline-regular-character ::= unicode-scalar-valueCRLF
前缀不计入结果,行之间以 U+000A 连接。最后一个带前缀的空行会添加末尾换行符。#| 行为原样文本;在 $| 行中,只有 \{ 开始插值。插值表达式内不允许多行字符串。
字节序列字面量#
bytes-literal ::= b"bytes-character" bytes-character ::= regular-string-character simple-escape-sequence byte-escape-sequence interpolation byte-escape-sequence ::= \xhex-digithex-digit \o03octal-digitoctal-digit
若在右引号之前遇到 CR 或 LF,则报告未终止的字面量。非 ASCII 源字符写入其 UTF-8 编码;\xHH 和 \oDDD 各写入一个取值为 0 到 255 的字节。插值遵循字符串字面量规则。字节序列字面量没有多行形式。
字符字面量#
character-literal ::= 'regular-character' 'character-escape-sequence' regular-character ::= unicode-scalar-value'\CRLF character-escape-sequence ::= simple-escape-sequence unicode-escape-sequence
字符字面量恰好包含一个 Unicode 标量值或转义序列。
字节字面量#
byte-literal ::= b'regular-byte-character' b'byte-character-escape-sequence' regular-byte-character ::= U+0000U+007F'\CRLF byte-character-escape-sequence ::= simple-escape-sequence byte-escape-sequence
未转义的字节必须是 ASCII。字节字面量中不允许 Unicode 转义。