
如何用 design-grammar 的 Makefile 从 grammar.yml 重新生成 primitive catalog 并运行 validate 校验【免费下载链接】cs249r_bookMachine Learning Systems项目地址: https://gitcode.com/GitHub_Trending/cs/cs249r_bookcs249r_book 仓库的design-grammar/目录存放 ML Systems Design Grammar设计语法的 primitive catalog部件目录。grammar.yml是唯一数据源index.html是从它生成的独立可分享页面。当你手改过grammar.yml里的 primitive、assembly 或 collision 声明后需要重新生成 HTML 并跑校验确认数据自洽。本文覆盖这条完整操作路径在design-grammar/下用 Makefile 的html目标重建index.html再用validate目标做模式与交叉引用校验。先理解数据流grammar.yml 是唯一来源Makefile 顶部注释说明了整个构建关系grammar.yml → index.html make html由 scripts/build-html.mjs 生成 grammar.yml → designGrammar.ts make sync同步给 StaffML React 数据文件 grammar.yml → 校验结果 make validategrammar.yml 头部注释明确写着Edit this file directly. Runmake all(in design-grammar/) to regenerate。数据内容包括roles5 个角色R/C/X/K/M各带cols列范围layers8 个抽象层Data → Productionprimitives90 个 primitive每个含id、sym、name、role、layer、col、composition_links、rationale等字段assemblies7 个 section、共 51 条 assembly如 Transformer、Mamba、RAG每条带expressionknown_collisions文档化声明的故意符号冲突如Sm、En、Sp、Ro。生成物 index.html 开头标注AUTO-GENERATED — DO NOT EDIT THIS FILE DIRECTLY下次构建会覆盖手动改动所以一切修改都应回到grammar.yml。准备条件在 Makefile 所在目录操作即design-grammar/本机有make和nodeMakefile 的html目标只调用node安装依赖js-yaml。package.json 的dependencies只有一项{ dependencies: { js-yaml: ^4.3.1 } }在design-grammar/下执行npm install即可。若目录里已有node_modules如仓库自带或已装过可跳过。重新生成 index.html进入design-grammar/目录只重建 HTML 时用单目标htmlcd design-grammar npm install # 仅首次或 node_modules 缺失时需要 make htmlhtml目标执行的命令是node scripts/build-html.mjs。build-html.mjs 的工作方式读取grammar.yml并先做一遍内部校验单元格冲突、composition_links解析、assembly 表达式符号解析、未声明的符号冲突然后把index.html中哨兵注释gen:roles、gen:primitives、gen:assemblies之间的区块替换为从 YAML 渲染出的新内容CSS、渲染 JS 和其余文案保持不变。执行成功后脚本输出实际写入结果格式如下数值随当前grammar.yml内容变化Wrote /path/to/design-grammar/index.html 90 primitives 51 assemblies across 7 sections 4 documented symbol collisions如果grammar.yml有内部校验问题脚本会打印VALIDATION FAILED:加逐条问题并以退出码 1 结束此时index.html不会被更新——先修 YAML 再重跑。可选完整构建 make allmake all等价于依次执行html和sync额外会运行node ../interviews/staffml/scripts/sync-design-grammar.mjs它把grammar.yml同步生成仓库另一处的 React 数据文件interviews/staffml/src/data/designGrammar.ts。如果你的改动会影响 StaffML 站点消费的数据或者两个文件已出现漂移就用make all只关心 standalone 页面时用make html就够。运行 make validate 校验重建后运行校验目标make validatevalidate目标执行node scripts/validate.mjs。validate.mjs 检查两类内容成功退出码 0失败退出码 1grammar.yml 的交叉引用不变量对 90 个 primitive 逐项检查字段形状id是数字sym匹配[A-Z][a-z]大写字母加一个小写字母layer在 1–8 之间col在 1–18 之间role属于R/C/X/K/M单元格冲突同一(layer, col)坐标只能有一个 primitivecomposition_links解析链接目标必须指向已存在的 primitive 符号符号冲突必须文档化同一sym出现多次时必须列在known_collisions里且note里引用的 row/col 必须与真实数据一致这是校验脚本专门补上的检查防止note自由文本随数据漂移assembly 表达式解析每条expression中的双字母[A-Z][a-z]记号必须解析到已知 primitive 符号。rewrite-rules.yml 的约束词表一致性rewrite-rules.yml 中每条 rule 的relieves条目必须取自该文件自己声明的constraints词表文件缺失本身也会报问题。全部通过时输出✓ grammar.yml is valid 90 primitives, 51 assemblies 4 documented intentional symbol collisions 0 cell collisions, 0 unresolved composition links, 0 unresolved assembly references失败时输出✗ grammar.yml VALIDATION FAILED — N issue(s):加逐条问题退出码 1。每条问题都带定位信息primitive id/sym、section 名或 rule key照单修grammar.yml或rewrite-rules.yml后重跑即可。编辑 grammar.yml 时容易触发校验失败的几类改动按校验脚本的检查逻辑以下改动最容易让make validate或make html失败新增 primitive 占用了已有坐标——报Cell collision at (layer,col)。把新 primitive 放到空列。composition_links写了不存在的符号——报composition link XX references unknown primitive。符号必须是已定义的sym。新增的符号与旧符号重名但没有登记——报Undocumented symbol collision: XX appears N times。此时把该符号加进known_collisions含sym、ids、note三个字段note需按#id row X col Y的格式引用每个 id 的真实行列。assembly 表达式里出现未定义的双字母记号——报Assembly name references unknown symbol XX。边界说明index.html是生成物不要手改改grammar.yml后重新构建。make clean会删除生成文件Makefile 注释标注为DESTRUCTIVE且明确要求only run after committing先提交再生成物。除非你要重置生成产物否则不需要跑它。make sync/make all会写interviews/staffml/下的文件影响范围超出design-grammar/目录只用make html时不会碰那里。校验是纯本地检查读两个 YAML 文件、写日志到终端不会访问网络或改动数据文件。完成一次改grammar.yml→make html→make validate之后index.html已反映最新数据校验确认了 0 单元格冲突、0 未解析 composition link、0 未解析 assembly 引用这条再生成路径即告完成。【免费下载链接】cs249r_bookMachine Learning Systems项目地址: https://gitcode.com/GitHub_Trending/cs/cs249r_book创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考