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

PEGjs新手求助:如何为自定义解析器添加变量(标识符)声明支持

修正后的PEG.js语法规则及说明

现有语法问题

  • 无持久化变量存储作用域,赋值操作仅修改临时变量不会留存
  • 规则名大小写不匹配:定义的整数规则为Integer,赋值语句中调用的是小写integer,无法正常匹配
  • 变量匹配正则错误:a-zA-z会匹配到非字母的特殊字符,需改为a-zA-Z
  • 未处理语句、关键字、标识符之间的空白字符
  • 起始规则直接返回所有行的执行结果数组,无法直接输出print语句的返回值

修正后的完整语法

{
  // 初始化全局作用域存储变量
  const scope = {}
}

start
  = lines:line* { 
    // 返回最后一条非空执行结果,即print语句的输出
    return lines.filter(res => res != null).pop()
  }

line
  = _ left:var _ "=" _ right:Integer _ ";" _ {
      // 把变量存入全局作用域
      scope[left] = right
      return null
    }
  / _ "print" _ middle:var _ {
      // 从作用域取变量值返回
      return scope[middle]
    }

var
  = [a-zA-Z]+ { return text() }

Integer "integer"
  = [0-9]+ { return parseInt(text(), 10) }

_ "whitespace"
  = [ \t\n\r]*

验证效果

输入你提供的测试代码:

a=4;
print a

解析后输出结果为4,符合预期。

内容的提问来源于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 06:15:03