File tree Expand file tree Collapse file tree 2 files changed +69
-0
lines changed
Expand file tree Collapse file tree 2 files changed +69
-0
lines changed Original file line number Diff line number Diff line change 66 - algorithm
77 - compile
88 - programming language theory
9+ - Shriram Krishnamurthi
10+ - scheme
911---
1012
1113## Preface
Original file line number Diff line number Diff line change 1+ ---
2+ title : " Automata via Macros"
3+ date : 2025-10-15
4+ url : https://cs.brown.edu/~sk/Publications/Papers/Published/sk-automata-macros/
5+ tags :
6+ - compile
7+ - scheme
8+ - programming language theory
9+ - Shriram Krishnamurthi
10+ ---
11+
12+ ## Introduction
13+
14+ 使用领域特定的结构拓展语言,近期的例子是轻量化的程序生成技术,最著名的就是C++的模板。
15+
16+ Lisp社区对宏的研究是比较深刻的。对Scheme来说,关键不是在特性的基础上增加特性,而是增加哪些移除弱点和限制所必需的特性。
17+
18+ Scheme添加了少量的特性和强大的宏系统,使得创建高阶的特定领域原语和通用原语成为可能。
19+
20+ 宏常见的用法:
21+
22+ - 提供装饰
23+ - 引入绑定结构
24+ - 实现控制运算符,可以改变运算的顺序
25+ - 定义数据语言
26+
27+ 宏可以控制将一份数据描述用函数还是用结构体表示。
28+
29+ 宏缺乏合适复杂度的例子。
30+
31+ Scheme成功的原因:
32+
33+ - 一组非常强大的核心特性
34+ - 对表达式极少的限制
35+ - 核心特性相对高角度的正交性
36+
37+ ## About the Code in This Paper
38+
39+ Scheme和它的宏系统教程参见:
40+
41+ ref: [ The Scheme Programming Language Second Edition] ( https://www.scheme.com/tspl2d/ )
42+
43+ ## Automata as Macros
44+
45+ 将自动机用数据结构表示。并通过基于当前状态查找可能的变化并在变换中查找下一个状态来完成状态机的运作。
46+
47+ 自动机的实现本质:
48+
49+ - 基于当前状态快速的条件分配来决定下一个状态
50+ - 每一个状态都应该能快速的访问
51+ - 状态转换的代价应该低
52+
53+ 对应的,` fast conditional dispatch ` 意味着条件表达式,` rapid state access ` 意味着指针,` quick state transition ` 意味着函数调用。
54+
55+ 对应的状态是函数,状态跳转通过函数调用来实现。
56+
57+ 第一种方式实现了一个interpreter。对应的特点是:
58+
59+ - 输出是一个结果,而不是另一个程序
60+ - 通过数据结构处理程序的源码,处理了所有输入
61+ - 它消费程序和特定的输入
62+
63+ 第二种方式是编译的结果。
64+
65+ 第二种方式有两个未解决的问题,效率和准确性,前者和函数调用的成本有关,而后者在自动机变得愈发复杂时变得难以保证。这是需要的是一个真正的编译器生成编译结果,这就是宏的表现。
66+
67+ ### Concision
You can’t perform that action at this time.
0 commit comments