Racket Libraries
5.1 
5.2 双 and 􏿴
5.3 􏻿
5.4 􏿰
5.5 
5.6 􏷂
5.7 􏶿
5.8 􏷁
5.9 
5.10 􏺃
5.11 Conditionals
5.12 
5.13 
5.14 未分类
On this page:
5.10.1 􏺃,卩?,􏺃?
5.10.2 位置信息:􏹷,􏹸、􏹹,􏹾,􏹵
5.10.3 转化:􏹲,􏹩,􏹴、􏹳
5.10.4 基础例程
􏺃
􏺃?
卩?
􏹷
􏹸
􏹹
􏹾
􏹵
?syntax-original?
?􏺃司
􏹲
􏹩
􏹴
􏹳
?syntax-binding-set?
?syntax-binding-set
?syntax-binding-set->syntax
?syntax-binding-set-extend
?datum-intern-literal
?syntax-shift-phase-level
?generate-temporaries
?identifier-prune-lexical-context
?identifier-prune-to-source-module
?syntax-recertify
?syntax-debug-info
8.15

5.10 􏺃🔗

“􏺃”(syntax object)是Racket编程语言构建其语言的基石。

5.10.1 􏺃,卩?,􏺃?🔗


“􏺃”其实就是通俗意义上的“代码”,而“代码”究其本质而言是封装了“词法信息”和“位置信息”的“数据”。“卩”(identifier)可以看作是“􏺃”的极简单特例。

为古活字
􏺃为新造字
  • 的古字,本意是“瑞信,古代出使等用作凭证之物”,引申为“语法,包含了上下文信息的数据”;

  • :工厂,容器,内容。

Examples:
> (􏺃? #'(+ 1 2))

#t

> (􏺃? #'(+ 1 2))

#t

> (􏺃? #'1)

#t

> (卩? #'1)

#f

5.10.2 位置信息:􏹷,􏹸、􏹹,􏹾,􏹵🔗


“􏺃”中的“位置信息”我们用单字“元”来表示,“元”包括:“􏹷”(地址)、“􏹾”(位置)、“􏹹”(经度(第几行))、“􏹸”(纬度(第几列))、“􏹵”(所占用的空间(长度))。

􏹷为新造字
􏹹为新造字
􏹸为新造字
􏹾为新造字
􏹵为新造字
  • :本意是“足”,在此为“地址”的意思;

  • 􏹹:第几列,仿字得造;

  • 􏹸:第几行,仿字得造;

  • 􏹾:第几位;

Examples:
> (􏹷 #'a)

'eval

> (􏹹 #'a)

0

> (􏹸 #'a)

3

> (􏹾 #'a)

4

> (􏹵 #'a)

1

5.10.3 转化:􏹲,􏹩,􏹴、􏹳🔗


“数据”我们用单字“文”来表示,此如􏿴?􏻿?􏿰?􏷁?勺?等数据结构所构造出的数据都是“文”。 “文”添加上“词法信息”和“位置信息”就组成了“􏺃”,而“􏺃”剥离掉“词法信息”和“位置信息”就余下“文”了。

􏹲为新造字
􏹩为新造字
􏹴为新造字
􏹳为新造字
  • 􏹲􏺃+各取偏旁得造;

  • 􏹩􏺃+􏿴各取偏旁得造;

  • 􏹴􏺃+各取偏旁得造;

  • 􏹴+􏺃各取偏旁得造;

另见:􏼩􏼳􏼪􏼲

Examples:
> (􏹲 #'a)

'a

> (􏹲 #'(a b c))

'(#<syntax:eval:2:0 a> #<syntax:eval:2:0 b> #<syntax:eval:2:0 c>)

> (􏹩 #'(a b c))

'(#<syntax:eval:3:0 a> #<syntax:eval:3:0 b> #<syntax:eval:3:0 c>)

> (􏹴 #'(a b c))

'(a b c)

> (􏹳 #f '(a b c))

#<syntax (a b c)>

5.10.4 基础例程🔗

word

􏺃 : elem + 生成代码 = syntax

word

􏺃? : elem + 代码(包含了词法信息和位置信息的数据) = syntax?

word

卩? :  + ? = identifier?

word

􏹷 : elem + 地址,比如是文件路径 = syntax-source

word

􏹸 : elem + 所在文件的具体哪一行(纬是横向的,参见“纬线”一词) = syntax-line

word

􏹹 : elem + 所在文件的具体哪一列(经是竖向的,参见“经线”一词) = syntax-column

word

􏹾 : elem + 所在文件的第几位 = syntax-position

word

􏹵 : elem + 所占用的长度(从0算起) = syntax-span

word

?syntax-original?

 : ? + s + y + n + t + a + x + - + o + r + i + g + i + n + a + l + ?
 = syntax-original?

word

?􏺃司 : ? + 􏺃 +  = syntax-source-module

word

􏹲 : elem + 以解开􏺃的方式转化成文((原料数据)) = syntax-e

word

􏹩 : elem + 􏺃化􏿴 = syntax->list

word

􏹴 : elem + 􏺃化文(将􏺃转化成文(原料数据)) = syntax->datum

word

􏹳 : elem + 文化􏺃 = datum->syntax

word

?syntax-binding-set?

 : ? + s + y + n + t + a + x + - + b + i + n + d + i + n + g + - + s + e + t + ?
 = syntax-binding-set?

word

?syntax-binding-set

 : ? + s + y + n + t + a + x + - + b + i + n + d + i + n + g + - + s + e + t
 = syntax-binding-set

word

?syntax-binding-set->syntax

 : ? + s + y + n + t + a + x + - + b + i + n + d + i + n + g + - + s + e + t + - + > + s + y + n + t + a + x
 = syntax-binding-set->syntax

word

?syntax-binding-set-extend

 : ? + s + y + n + t + a + x + - + b + i + n + d + i + n + g + - + s + e + t + - + e + x + t + e + n + d
 = syntax-binding-set-extend

word

?datum-intern-literal

 : ? + d + a + t + u + m + - + i + n + t + e + r + n + - + l + i + t + e + r + a + l
 = datum-intern-literal

word

?syntax-shift-phase-level

 : ? + s + y + n + t + a + x + - + s + h + i + f + t + - + p + h + a + s + e + - + l + e + v + e + l
 = syntax-shift-phase-level

word

?generate-temporaries

 : ? + g + e + n + e + r + a + t + e + - + t + e + m + p + o + r + a + r + i + e + s
 = generate-temporaries

word

?identifier-prune-lexical-context

 : ? + i + d + e + n + t + i + f + i + e + r + - + p + r + u + n + e + - + l + e + x + i + c + a + l + - + c + o + n + t + e + x + t
 = identifier-prune-lexical-context

word

?identifier-prune-to-source-module

 : ? + i + d + e + n + t + i + f + i + e + r + - + p + r + u + n + e + - + t + o + - + s + o + u + r + c + e + - + m + o + d + u + l + e
 = identifier-prune-to-source-module

word

?syntax-recertify

 : ? + s + y + n + t + a + x + - + r + e + c + e + r + t + i + f + y
 = syntax-recertify

word

?syntax-debug-info

 : ? + s + y + n + t + a + x + - + d + e + b + u + g + - + i + n + f + o
 = syntax-debug-info