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

PEG.js实现自定义解析语言变量支持时出现赋值与打印异常

问题排查与解决方法

核心问题根因

  • 缺少持久化的变量存储上下文:你在set分支的动作块中给left=middle赋值,仅作用于当前动作块的局部作用域,赋值完成后变量就被销毁,没有真正存储变量映射关系。
  • 规则动作块无返回值:pl规则的两个分支动作块都没有返回值,所以最终解析结果中对应pl的位置全部是undefined。
  • print分支取值错误:你直接alert的middle是identifier规则返回的变量名字符串,不是变量对应的存储值。
  • 空格匹配鲁棒性差:规则中硬编码单个空格" "匹配分隔符,若存在多空格、制表符等情况会直接匹配失败。

修复后的完整PEG.js代码

{{
// 初始化全局变量存储上下文
const variables = {}
}}

start
= begin line (pl)+ end
pl
= varx whitespace left:identifier whitespace to whitespace middle:integer line { 
  variables[left] = middle;
  return { type: 'set', name: left, value: middle };
} 
/ 
print "(" middle:identifier ")" line {
  const val = variables[middle];
  alert(val);
  return { type: 'print', name: middle, value: val };
}

whitespace
= [ \t]+
line
= "\n"
begin
= "start"
print
= "print"
if
= "if"
equals
= "equals"
gth
= "greater than"
identifier
= [a-zA-Z]+ {return text();}
to
= "to"
varx
= "set"
end
= "end"
integer "integer"
= digits:[0-9]+ { return parseInt(digits.join(""), 10); }

验证结果

使用你提供的输入源测试:

start
set a to 5
print(a)
end
  • alert弹窗会正确弹出数值5
  • 解析返回结果中不会再出现undefined,会返回每个pl操作的结构化信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:06:02