You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义语言转JavaScript脚本适配多行输入输出的修改方案

自定义语言转JS脚本的多行输入输出支持修改方案

1. 输入分割与逐行处理逻辑

首先要将输入文本按换行符分割为独立行,兼容Windows(\r\n)和Unix(\n)的换行格式。在入口函数(比如update)中,将原有的整体文本处理改为遍历每行单独处理:

function update(input) {
  // 分割输入为行数组
  const inputLines = input.split(/\r?\n/);
  // 逐行转换
  const outputLines = inputLines.map(line => {
    // 保留空行格式
    if (!line.trim()) return '';
    // 调用原有处理流程处理单行
    const tokens = lexer(line);
    const ast = parse(tokens);
    return convert(ast);
  });
  // 用换行符拼接输出结果
  out(outputLines.join('\n'));
}

2. 适配词法分析器(Lexer)

确保lexer函数可以正确处理单行文本,避免依赖多行上下文(如果原设计没有跨多行token的话)。如果原lexer是针对整体文本写的,只需确认它不会把换行符当作有效token,或者在处理单行时自动忽略换行符(因为已经提前分割了行)。

3. 适配语法分析器(Parser)

修改parse函数,使其能够处理单行对应的token流,生成独立的语句AST节点。如果原parser是处理整个文档的AST,现在要调整为支持单个语句的AST生成——比如原来的根节点是Program包含多个Statement,现在可以对每行生成一个Statement,最后再组合成完整的Program(或者直接逐行转换)。

4. 转换函数(Convert)的适配

确保convert函数可以正确转换单个语句的AST为对应的JS代码,而不是仅支持整个文档的转换。比如原convert接收整个Program AST,现在可以让它支持接收单个Statement AST,输出单行JS代码。

5. 空行与格式保持

在处理过程中保留输入的空行,避免输出丢失格式。比如在逐行处理时,遇到空行直接返回空字符串,最终拼接时会保留对应的换行。

扩展:支持跨多行的自定义语言语句

如果你的自定义语言存在跨多行的语法(比如多行函数定义、多行字符串),还需要额外修改:

  • 在lexer中添加多行token的识别逻辑(比如检测未闭合的字符串或块,继续读取下一行)
  • 在parser中处理跨多行的AST结构,确保多行内容被解析为一个完整的节点

内容的提问来源于stack exchange,提问作者Vatsa Pandey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 08:02:11