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

基于伪代码推导变量赋值条件的AST实现问题咨询

问题:推导伪代码中变量赋值对应的单一条件

伪代码示例

patch a:
  if b == "foo1"
  then
    a = "No"
    if c == "foo2"
    then
      if d == "foo3" || d == "foo4" || d == "foo5" || d == "foo6"
      then
        a = "Yes"
      else
        a = "No"
    else
      if c == "foo7"
      then
        if d == "foo8" || d == "foo9"
        then
          a = "Yes"
        else
          a = "No"
      else
        if c == "foo10"
        then
          if d == "foo11" || d == "foo12"
          then
            a = "Yes"
          else
            a = "No"
        else
          if c == "foo13"
          then
            if d != "foo11" && d != "foo12" && d != "foo8" && d != "foo9"
            then
              a = "Yes"
            else
              a = "No"
          else
            a = "Yes"

目标输出示例

需要为每个a的赋值推导对应的单一条件,例如:

a = "Yes" 的对应条件

(b == "foo1" AND c == "foo7" AND (d == "foo8" OR d == "foo9")) OR
(b == "foo1" AND c == "foo10" AND (d == "foo11" OR d == "foo12")) OR
(b == "foo1" AND c == "foo13" AND d != "foo11" AND d != "foo12" AND d != "foo8" AND d != "foo9")

a = "No" 的对应条件

(b == "foo1" AND c == "foo2" AND d != "foo3" AND d != "foo4" AND d != "foo5" AND d != "foo6") OR
(b == "foo1" AND c == "foo7" AND d != "foo8" AND d != "foo9") OR
(b == "foo1" AND c == "foo10" AND d != "foo11" AND d != "foo12") OR
(b == "foo1" AND c == "foo13" AND (d == "foo11" OR d == "foo12" OR d == "foo8" OR d == "foo9"))

初始方案问题

最初用栈维护条件:进入if块压入条件,离开时弹出;进入then块压入AND,进入else块压入OR。该方法在简单场景可行,但无法处理示例中第4行的a = "No"赋值,生成的条件出现逻辑错误(如出现b == "foo1" OR ...,而后续分支会覆盖a的值为Yes)。

更新后的状态与求助

改为基于ANTLR解析树构建AST,定义了以下节点类型:

  • conditionNode:存储if语句
  • assignmentNode:存储赋值操作
  • ASTNode:捕获作用域,包含父节点、then分支、else分支

目前已能轻松推导叶子节点赋值的条件,但非叶子节点(如示例中第4行的a = "No")的条件推导仍未解决,寻求技术解决方案。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 03:38:15