简单记录一下 rust 的词法结构及相关文档。

Rust 的词法分析就是将 Rust 源码分解成一个个 Token,这些 Token 之后会被用于构建抽象语法树(AST)。Rust 的词法结构包含六大部分:

  • 关键字(Keywords)
  • 标识符(Identifiers)
  • 注释(Comments)
  • 空白(Whitespace)
  • 词条(Tokens)
  • 路径(Path)

关键字(Keywords)

Rust 提供三种类型的关键字:

  • 严格关键字(Strict)
  • 保留字(Reserved)
  • 弱关键字(Weak)

严格关键字

as/async/await/break/const/continue/crate/dyn/if/else/struct/enum/false/fn/for/impl/in/let/loop/match/mod/move/mut/pub/ref/return/self/Self/static/super/trait/true/type/unsafe/use/where/while

保留字

abstract/become/box/do/final/macro/override/priv/typeof/unsized/virtual/yield/try

弱关键字

macro_rules/union/'static/dyn

标识符(Identifiers)

Rust 目前只支持 ASCII 字符作为标识符,不能以数字开头,只能字母或下划线开头。

原始标志符(Raw identifiers)

原始标识符类似于普通标识符,但以 r# 为前缀。 (请注意,r# 前缀不包含在实际标识符中。)与普通标识符不同,原始标识符可以是除上面为 RAW_IDENTIFIER 列出的关键字之外的任何严格或保留关键字。

注释(Comments)

注释分为文档注释和非文档注释。文档注释就是这部分注释可以通过 cargo doc 命令生成文档。

空白(Whitespace)

空白字符包括空格、制表符、换行符、回车符和垂直制表符。任何形式的空白在 Rust 中只用于分隔标记,没有语义意义。

词条(Tokens)

词条包括:

  • 语言项(item)
  • 块(block)
  • 语句(Stmt)
  • 表达式(Expr)
  • 模式(Pattern)
  • 关键字(Keyword)
  • 标识符(Ident)
  • 字面量(Literal)
  • 生命周期(Lifetime)
  • 可见性(Vis)
  • 标点符号(Punctuation)
  • 分隔符(Delimiter)
  • 词条树(TokenTree)
  • 属性(Attribute)

路径(Path)

路径是由名称空间限定符(也就是 ::),它在逻辑上分隔的一个或多个路径段组成的序列。路径有多种应用场景。

  • 模块路径
  • 方法调用
    • 完全限定无歧义调用
  • 泛型函数-turbofish操作符

参考