基于伪代码推导变量赋值条件的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
相关产品推荐
相关产品推荐

