Rust参考手册学习(1)

第一章. 表义符/符号

表义符

示例释义
CAPITALKW_IF, INTEGER_LITERAL由词法分析生成的单一 token
ItalicCamelCaseLetStatementItem句法产生式(syntactical production)
stringxwhile*确切的字面字符(串)
\x\n, \r, \t, \0转义字符
x?pub?可选项
x*OuterAttribute*x 重复零次或多次
x+MacroMatch+x 重复一次或多次
xa..bHEX_DIGIT1..6x 重复 a 到 b 次
|u8 | u16, Block | Item
[ ][b B]列举的任意字符
[ - ][a-z]a 到 z 范围内的任意字符(包括 a 和 z)
~[ ]~[b B]列举范围外的任意字符(序列)
~string~\n, ~*/此字符序列外的任意字符(序列)
( )(, Parameter)?

程序项分组

 第二章. 词法结构

2.1 输入格式

Rust 输入被解释为用UTF-8编码的Unicode 字符序列;

2.2 关键字

Rust 将关键字分为三类:

2.2.1. 严格关键字

这类关键字只能在正确的上下文中使用。它们不能用作以下名称:

 词法分析:
KW_AS : as //重命名
KW_BREAK : break//终止
KW_CONST : const//设置常量
KW_CONTINUE : continue//继续
KW_CRATE : crate//self 包名
KW_ELSE : else//判断
KW_ENUM : enum//枚举
KW_EXTERN : extern//继承其他语法
KW_FALSE : false//bool
KW_FN : fn//函数
KW_FOR : for//循环
KW_IF : if//判断
KW_IMPL : impl//trait 引入机构
KW_IN : in//
KW_LET : let//定义
KW_LOOP : loop//循环
KW_MATCH : match//匹配
KW_MOD : mod//定义块
KW_MOVE : move//所有权转移
KW_MUT : mut//定义可以修改变量
KW_PUB : pub//快或者函数可以访问
KW_REF : ref //数据类型
KW_RETURN : return//返回
KW_SELFVALUE : self//自己
KW_SELFTYPE : Self//自己类型
KW_STATIC : static//静态
KW_STRUCT : struct//结构
KW_SUPER : super//引入
KW_TRAIT : trait//方法实现
KW_TRUE : true//bool
KW_TYPE : type//引入类型
KW_UNSAFE : unsafe//不安全
KW_USE : use//引入包
KW_WHERE : where//条件
KW_WHILE : while//条件

词法分析 2018+
KW_ASYNC : async//异步
KW_AWAIT : await//异步
KW_DYN : dyn//是trait对象类型 动态分发;

2.2.2 保留关键字

词法分析
KW_ABSTRACT : abstract
KW_BECOME : become
KW_BOX : box
KW_DO : do
KW_FINAL : final
KW_MACRO : macro
KW_OVERRIDE : override
KW_PRIV : priv
KW_TYPEOF : typeof
KW_UNSIZED : unsized
KW_VIRTUAL : virtual
KW_YIELD : yield

词法分析 2018+
KW_TRY : try

2.2.3 弱关键字

这类关键字只有在特定的上下文中才有特殊的意义;

2.3 标识符

词法分析:
IDENTIFIER_OR_KEYWORD :
      XID_start XID_continue*
   | _ XID_continue+

RAW_IDENTIFIER : r# IDENTIFIER_OR_KEYWORD 排除 crateselfsuperSelf

NON_KEYWORD_IDENTIFIER : IDENTIFIER_OR_KEYWORD *排除严格关键字保留关键字 *

IDENTIFIER :
NON_KEYWORD_IDENTIFIER | RAW_IDENTIFIER

https://github.com/rust-lang/reference/blob/master/src/identifiers.md

1. 标识符或关键字:首字母 XID_start(字母), XID_continue*其他(字母或者下划线);或者搜字母下划线 其他XID_continue+

2. RAW_IDENTIFIER:

3. NON_KEYWORD_IDENTIFIER:

4.IDENTIFIER:

2.4 注释

Lexer
LINE_COMMENT : //行注释
      // (~[/ ! \n] | //) ~\n*。
   | //

BLOCK_COMMENT :
      /* (~[* !] | ** | BlockCommentOrDoc) (BlockCommentOrDoc | ~*/)* */
   | /**/
   | /***/

INNER_LINE_DOC :
   //! ~[\n IsolatedCR]*

INNER_BLOCK_DOC :
   /*! ( BlockCommentOrDoc | ~[*/ IsolatedCR] )* */

OUTER_LINE_DOC :
   /// (~/ ~[\n IsolatedCR]*)?

OUTER_BLOCK_DOC :
   /** (~* | BlockCommentOrDoc ) (BlockCommentOrDoc | ~[*/ IsolatedCR])* */

BlockCommentOrDoc :
      BLOCK_COMMENT
   | OUTER_BLOCK_DOC
   | INNER_BLOCK_DOC

IsolatedCR :
   \r not followed by a \n

2.4.1 行注释(LINE_COMMENT)

// (~[/ ! \n] | //) ~\n*      // 开头  结果多个\n或者0个 ,

2.4.2 快注释(BLOCK_COMMENT)

/* (~[* !] | ** | BlockCommentOrDoc) (BlockCommentOrDoc | ~*/)* */
   | /**/
   | /***/       // /* 开头 + 内容 +  */结尾 !起重要程度 /*!!*/

2.4.3 内部行文档型注释(INNER_LINE_DOC)

   //! ~[\n IsolatedCR]*       // ! 开通的  任意个 IsolatedCR;

2.4.4 内部块文档型注释 INNER_BLOCK_DOC

   /*! ( BlockCommentOrDoc | ~[*/ IsolatedCR] )* */

2.4.5 外部行文档型注释 OUTER_LINE_DOC 

   /// (~/ ~[\n IsolatedCR]*)?

2.4.6 外部块文档型注释 OUTER_BLOCK_DOC

   /** (~* | BlockCommentOrDoc ) (BlockCommentOrDoc | ~[*/ IsolatedCR])* */

2.5 空白符

空白符是非空字符串,它里面只包含具有 Pattern_White_Space 属性的 Unicode 字符,即:

  • U+0009 (水平制表符, '\t')
  • U+000A (换行符, '\n')
  • U+000B (垂直制表符)
  • U+000C (分页符)
  • U+000D (回车符, '\r')
  • U+0020 (空格符, ' ')
  • U+0085 (下一行标记符)
  • U+200E (从左到右标记符)
  • U+200F (从右到标左记符)
  • U+2028 (行分隔符)
  • U+2029 (段分隔符)

Rust是一种“格式自由(free-form)”的语言,这意味着所有形式的空白符在文法中仅用于分隔 tokens 的作用,没有语义意义。

2.6 token

token 是采用非递归方式的正则文法(regular languages)定义的基本语法产生式(primitive productions)。Rust 源码输入可以被分解成以下几类 token:

全是细节详情见书中关于token 的说明;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值