第 11 章:实战翻译挑战
第 11 章:实战翻译挑战
光看会忘记,动手才记住。这一章不给标准答案——给你原始配置,要你手写等价的 SML,再点「验证」让解析器实时判分。
这些挑战刻意选了工程里常见的格式(Caddyfile / docker-compose / nginx),它们和 SML 的「块 + 键值」思维高度相通。翻译时记住三条:
- 块 = 块:
name { }两边通用; - 键值对:
key value(Caddy/nginx)或key: value(YAML)都对应 SML 的key: value; - 数组:SML 用
[ a b c ](逗号可省),YAML 用[a, b, c]。
下面是三个难度递增的挑战。每题右侧白底编辑器里直接写 SML,写错或漏字段都会即时提示。
挑战 1:Caddyfile → SML
下面是一段 Caddyfile。请用 SML 表达等价配置:把站点块变成嵌套块,把
key value 变成 key: value。完成后点「验证」,系统会检查关键字段是否都正确翻译。验证逻辑是 JS 直接解析你的 SML 并断言结果。原始材料(待翻译)
example.com {
reverse_proxy localhost:8080
tls internal
encode gzip
}
你的 SML 答案(可编辑)
💡 提示:Caddyfile 的 `example.com { }` 块 == SML 的 `example.com { }` 嵌套块;`tls internal` == `tls: internal`。
挑战 2:docker-compose → SML(高难度)
把下面 docker-compose 片段翻译成 SML。注意:YAML 的数组
[a, b] 在 SML 里写成 [ a b ];带连字符的键名(如 container_name)直接当裸词键即可。验证会检查 services.web 与 services.db 的关键字段。原始材料(待翻译)
services:
web:
image: nginx:1.27
ports:
- "80:80"
depends_on:
- db
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: secret
你的 SML 答案(可编辑)
💡 提示:SML 裸词里连字符 `-`、下划线 `_` 都是合法的键字符,所以 container_name / POSTGRES_PASSWORD 不用引号。
挑战 3:nginx.conf → SML(高难度)
把下面 nginx server 块翻译成 SML。nginx 的
listen 80; == SML listen: 80;location / { } 是嵌套块;proxy_pass http://app; 是带空格的值,需要引号。验证检查 server 块的关键指令。原始材料(待翻译)
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://app:3000;
}
location /api {
proxy_pass http://api:4000;
}
}
你的 SML 答案(可编辑)
💡 提示:proxy_pass 的值含空格和冒号,必须加引号:`proxy_pass: "http://app:3000"`。但 `server_name example.com` 的 example.com 是裸词即可。
为什么这么做
把别的格式翻译成 SML,最能考验你有没有真正理解「SML 就是一棵树」。当你能凭直觉把任意配置映射成 块 / 键值 / 数组 三件套,你就已经掌握 SML 的精髓了。
→ 附录:对照与排查