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

如何用PEG.js实现类似TypeScript的数组类型语法?遇栈溢出问题

解决PEG.js实现TypeScript数组类型语法的栈溢出问题

你写的代码出现栈溢出,核心是无限递归:type规则优先匹配array,而array规则又要先匹配type,PEG.js会不断在这两个规则里循环调用,直到栈被撑爆。

直接调整规则结构,把数组定义成基础类型的后缀,就能彻底避免这个问题,修复后的语法如下:

start = type

type = baseType arraySuffix* {
  // 把多个[]转换成嵌套的array结构
  return arraySuffix.reduce((acc, _) => ({ kind: "array", type: acc }), baseType);
}

baseType = bool / string / int

string = "string" { return { kind: "string" }}
int = "int" { return { kind: "int" }}
bool = "bool" { return { kind: "bool" }}

arraySuffix = "[]"

修复逻辑说明

  • 拆分出baseType专门处理基础类型(bool/string/int),彻底切断和数组规则的递归依赖
  • type规则先匹配基础类型,再匹配任意数量的[]后缀,用reduce把多个连续的[]转换成嵌套的数组结构,比如int[][]会被解析成{ kind: "array", type: { kind: "array", type: { kind: "int" } }}
  • 既符合TypeScript数组类型的语法逻辑,又完全避免了无限递归的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 19:47:03