代码转诗之前,先把小语法树做对

发布时间:2026/10/25 17:39:54

代码转诗之前,先把小语法树做对 1024 想做一个轻一点的礼物输入一小段表达式得到十四行中文短诗。这个点子可以交给 AI 扩写但“看起来像解析器”的代码很容易把人带偏。字符串里出现for不代表程序真的有循环数出几个关键词也得不到抽象语法树。我更愿意先做一个很小、能解释的核心。它只接受变量数字加法例如leaf234。输出确实是一棵树却不冒充 JavaScript 编译器。没有函数、注释、负数和括号遇到这些输入就报错而不是猜一个结果。让结构可检查再谈创意10 月 22 日Anthropic 宣布把 Agent Skills 移交给 AAIF。可携带的流程说明让创作工具更容易组合但说明写得完整不等于生成代码实现了它。对这个小玩具而言最便宜的检查就是打印树并数清输出的非空行。下面先扫描词元再按assignment : name number ( number)*解析。加法从左向右结合所以leaf234的右子树是(23)4。解析完成后还要确认没有残余词元避免把leaf23 garbage的前半段当成成功。诗句只使用树里的变量名和数字个数做模板映射。这是确定性文本生成不调用模型不保证押韵也不宣称符合英语商籁体的音步。中文的十四行只是这里选择的一种排版约束。若后面接模型润色应该把原树、模板和润色结果分别保存让读者知道哪里发生了自由改写。为什么宁可少支持一点边界小失败就容易看见。leaf23应通过漏掉等号、加入乘号、把关键词塞进字符串都应拒绝。生产环境若要处理真实 JavaScript需要完整语法解析器与资源限制不该继续往这段玩具代码里堆正则。将代码保存为sonnet.js后运行node sonnet.js。本地验证覆盖结构、非法输入和十四行数量没有运行浏览器界面或真实模型。最后的文字仍需要人读一遍行数是程序能保证的诗意不是。可独立运行的核心例子function parse(source) { if (source.length 200) throw Error(输入过长); const tokens []; const scan /\s*([A-Za-z_][A-Za-z_0-9]*|\d|[])/y; let p 0; while (p source.length) { if (!source.slice(p).trim()) break; scan.lastIndex p; const m scan.exec(source); if (!m) throw Error(不支持的位置 p); tokens.push(m[1]); p scan.lastIndex; } let i 0; const take () tokens[i]; const name take(); if (!/^[A-Za-z_]\w*$/.test(name || ) || take() ! ) throw Error(需要变量表达式); function number() { const t take(); if (!/^\d$/.test(t || )) throw Error(需要非负整数); const value Number(t); if (!Number.isSafeInteger(value)) throw Error(整数超界); return {type:Number, value}; } let value number(); while (tokens[i] ) { take(); value {type:Add, left:value, right:number()}; } if (i ! tokens.length) throw Error(多余词元); return {type:Assign, name, value}; } function countNumbers(node) { if(node.typeNumber) return 1; if(node.typeAdd) return countNumbers(node.left)countNumbers(node.right); if(node.typeAssign) return countNumbers(node.value); throw Error(未知节点); } function poem(tree) { return [ ${tree.name} 是纸上的一枚落叶, 等号替它留下一处位置, ${countNumbers(tree)}个数字靠近尚未惊动夜色, 加号把两盏灯接在一起, 先读左边的枝条, 再看右边的新芽, 树没有许诺整片森林, 只解释这一个句子, 我把能验证的留下, 把不能保证的写在页边, 窗口亮着猫没有回答, 键盘停在下一行之前, 十四行到这里合上, 剩下的空白交给读者 ]; } const tree parse(leaf234); if (tree.value.left.type ! Add || countNumbers(tree)!3 || poem(tree).length ! 14) throw Error(结构测试失败); for (const bad of [x2*3,x2,x 2,x2 garbage]) { let rejectedfalse; try { parse(bad); } catch { rejectedtrue; } if (!rejected) throw Error(应当拒绝bad); } console.log(JSON.stringify(tree)); console.log(poem(tree).join(\n));
延伸阅读

更多相关文章

2026/10/25 17:39:54

线上英语教学工具怎么选?2026最新避坑清单

【摘要】线上英语教学工具越来越多,选错了不仅浪费预算,还会打乱教学节奏。这篇文章从一线教学场景出发,拆解工具选型的几个核心维度,包括课前备课、课中互动、课后批改和数据反馈,同时整理了一份实操层面的避坑清单&a…

2026/10/25 17:39:54

英语薄弱知识点,2026年最新培优课怎么选?

摘要:英语培优选课的关键不在功能多,而在诊断准。 本文从英语薄弱知识点的真实成因切入,拆解2026年培优课选型的三个硬指标:诊断颗粒度、训练闭环完整度、内容本地化匹配度,并结合天学网英语培优体系的技术逻辑做客观分…

2026/10/25 17:39:54

英语写作批改工具,最新5个避坑挑选要点

上学期期末,我帮一个英语教研组看他们新采购的批改系统。打开后台那一刻我愣住了——三万多字的批改记录里,超过六成标注都是“主谓一致”“拼写错误”这类表层问题。老师们花了钱、花了培训时间,最后拿到手的还是一份高级版语法检查器。这事…

2026/10/25 19:45:02

PL/SQL Developer免装Oracle客户端:Instant Client与OCI配置实战

简介:PLSQL Developer(免Oracle客户端)面向需要轻量级 Oracle 开发环境的数据库程序员、运维与测试人员,重点解决本地未安装完整 Oracle 客户端时编写、调试和管理 PL/SQL 代码的难题。压缩包共 524 个文件,约 50.14MB,含 exe、dl…

2026/10/25 19:45:02

华为FusionCube架构深度解析:确定性交付与硬件级协同优化

简介:本资源是一份面向IT基础设施工程师、云计算架构师及企业数字化转型技术人员的华为FusionCube系统架构深度解析文档,聚焦融合一体机在云数据中心建设中的核心价值与落地实践。文档系统阐述FusionCube的开放架构设计、FusionManager统一云管理、Fusio…

2026/10/25 19:45:02

ESXi 8.0 安装避坑指南:从硬件要求到验证的完整流程

简介:这份PDF文档是VMware官方《VMware ESXi 安装和设置》技术指南,对应vSphere 8.0版本,面向熟悉虚拟机技术与数据中心运维的Windows或Linux系统管理员,以及需要大规模部署ESXi主机的虚拟化工程师。内容覆盖ESXi系统与硬件要求、…

2026/10/25 19:40:01

HoRain云与CrewAI智能体开发实战指南

1. HoRain云与CrewAI智能体开发概述在当今企业数字化转型浪潮中,智能体技术正成为提升业务自动化水平的核心工具。HoRain云作为国内领先的企业级云服务平台,近期集成了CrewAI框架,为开发者提供了构建智能体的完整解决方案。这套组合特别适合需…

2026/10/25 19:35:01

自动驾驶中的语义分割技术:SETR与SegFormer对比与实践

1. 无人驾驶视觉感知中的语义分割技术解析在智能驾驶系统中,语义分割技术正成为环境感知的核心支柱。不同于传统目标检测仅提供边界框,语义分割能对图像中的每个像素进行分类,为自动驾驶车辆提供厘米级的道路理解精度。2023年CVPR会议数据显示…

2026/10/25 19:35:01

激光雷达点云视点偏移校正:几何一致性驱动的分割鲁棒性提升

简介:本资源是一套面向自动驾驶与机器人感知方向的毕设级激光雷达点云分割优化方案,聚焦“场景视点偏移改善”这一关键挑战,旨在提升模型在不同视角下对点云结构的鲁棒分割能力,适用于高校学生开展毕业设计、研究人员复现改进算法…

2026/10/25 0:02:22

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/25 0:02:23

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/25 0:02:23

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/25 0:02:22

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/25 0:02:23

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/25 0:02:23

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑