Skip to content

词法结构

在移除空白和注释(见源文件)之后, 剩余的输入是词法单元的序列。 词法单元种类按固定顺序尝试,取当前位置匹配的第一个, 因此既可读作数字也可读作标识符的输入会被读作数字。 {#sls.lex.tokens}

数字以十进制数字(U+0030–U+0039)开头, 由一个或多个十进制数字、由 U+002E(FULL STOP,.)引入的可选小数部分, 以及可选后缀组成;后缀要么是 ASCII 字母序列(单位), 要么是单个 U+0025(PERCENT SIGN,%)。 {#sls.lex.number}

标识符是不是数字的词法单元。 其字符具有 Unicode Standard Annex #31 所定义的 Unicode 标识符属性: {#sls.lex.identifier.classes}

  • 第一个字符应具有 XID_Start 属性,或者是 U+005F(LOW LINE,_)。
  • 每个后续字符应具有 XID_Continue 属性,或者是 U+002D(HYPHEN-MINUS,-)。
  • 两种属性都不具备的字符不是标识符的一部分。

十进制数字具有 XID_Continue 属性但不具有 XID_Start, 因此它可以出现在标识符中,但不能作为其第一个字符; 以数字开头的词法单元是数字。 {#sls.lex.identifier.no-leading-digit}

U+002D(-)不得作为标识符的第一个字符出现。 {#sls.lex.identifier.no-leading-hyphen}

当且仅当两个标识符的规范化形式相等时,它们才被视为相同。 标识符的规范化形式是通过对源标识符的字符应用以下替换得到的: {#sls.lex.identifier.normalization}

  • 除作为第一个字符外,每个 U+005F(_)都替换为 U+002D(-)。
  • 所有其他字符保持不变。

例如,foo_bar 和 foo-bar 是同一个标识符,_foo_bar 和 _foo-bar 也是。 {#sls.lex.identifier.normalization-example}

kebab-case 形式(使用 U+002D)是规范书写形式。 {#sls.lex.identifier.canonical-form}

Slint 没有全局保留字。 每种语言构造都由上下文关键字引入:一个仅当出现在语法期望该构造的位置时才具有特殊含义的标识符。 {#sls.lex.contextual-keywords}


© 2026 SixtyFPS GmbH