 Nim 2.0.2 中文手册处理缩进的实现⽅式如下,词法分析器⽤前导空格数来解释随后的 Token,缩进不是独⽴的 Token,这个技巧使得 Nim 解析时只 需要预先检查 1 个 Token。 语法分析器使⽤⼀个缩进级别的堆栈:该堆栈由计算空格的整数组成,语法分析器在对应的策略位置查询缩进信息,⽽忽略其他 位置。 伪终结符 IND{>} 表示缩进相⽐堆栈顶部的条⽬包含更多的空格, IND{=} 表示缩进有相同的空格数, DED 具有相同的优先级 ` ( ) { } [ ] , ; [. .] {. .} (. .) [: 词法 本节列出了 Nim 的标准语法。语法分析器如何处理缩进问题,在词法分析⼀节有说明。 Nim 允许⽤户定义运算符。⼆元运算符有 11 个不同的优先级。 结合律 第⼀个字符为 ^ 的⼆元运算符是右结合,所有其他⼆元运算符是左结合。 只有合法的 Nim 标识 符才能作为模块名(所以对应的⽂件名是 identifier.nim )。 编译模块的算法如下: 递归地追随导⼊语句正常编译整个模块。 如果发现成环,只导⼊已经完成语法分析的(且被导出的)符号;如果遇到未知标识符就中⽌。 最好⽤⼀个例⼦来演示(译者注:代码⾥的注释描述了编译模块 A 时编译器的⾏为): Import 语句 在 import 关键字之后,可以有0 码力 | 127 页 | 7.05 MB | 1 年前3 Nim 2.0.2 中文手册处理缩进的实现⽅式如下,词法分析器⽤前导空格数来解释随后的 Token,缩进不是独⽴的 Token,这个技巧使得 Nim 解析时只 需要预先检查 1 个 Token。 语法分析器使⽤⼀个缩进级别的堆栈:该堆栈由计算空格的整数组成,语法分析器在对应的策略位置查询缩进信息,⽽忽略其他 位置。 伪终结符 IND{>} 表示缩进相⽐堆栈顶部的条⽬包含更多的空格, IND{=} 表示缩进有相同的空格数, DED 具有相同的优先级 ` ( ) { } [ ] , ; [. .] {. .} (. .) [: 词法 本节列出了 Nim 的标准语法。语法分析器如何处理缩进问题,在词法分析⼀节有说明。 Nim 允许⽤户定义运算符。⼆元运算符有 11 个不同的优先级。 结合律 第⼀个字符为 ^ 的⼆元运算符是右结合,所有其他⼆元运算符是左结合。 只有合法的 Nim 标识 符才能作为模块名(所以对应的⽂件名是 identifier.nim )。 编译模块的算法如下: 递归地追随导⼊语句正常编译整个模块。 如果发现成环,只导⼊已经完成语法分析的(且被导出的)符号;如果遇到未知标识符就中⽌。 最好⽤⼀个例⼦来演示(译者注:代码⾥的注释描述了编译模块 A 时编译器的⾏为): Import 语句 在 import 关键字之后,可以有0 码力 | 127 页 | 7.05 MB | 1 年前3
共 1 条
- 1













