解析一阶逻辑公式的算法

时间:2014-05-18 21:39:29

标签: algorithm parsing

我正在尝试编写一种算法,用于将一阶(谓词)逻辑中的公式转换为抽象语法树。对于命题逻辑,我使用了分流码算法,但它对于一阶逻辑不起作用,因为括号可以用于分组或指定谓词(或函数)的范围。是否存在可以处理这种特殊并发症的分流码算法的推广?

作为参考,我试图解析的字符串看起来像这样:

"AxEy(P(x) & R(x,y)) -> R(f(a),b)"

1 个答案:

答案 0 :(得分:1)

开括号是谓词范围或函数参数列表分隔符,当且仅当它紧跟在谓词或函数之后。如果它用于分组,则必须遵循前缀或中缀运算符或其他左括号。

如果你不能先验识别函数名称,只要它们必须有名字,那就无所谓了;名称后面的括号是谓词范围或参数列表分隔符。当然,能够识别谓词会很有帮助。

当您将其推入堆栈时,需要标记括号,以便在稍后使用其相应的右括号弹出它时可以创建正确的AST节点。如果它是谓词范围分组器或参数列表分组器,则需要将谓词/函数作为AST的一部分包含在内;它将位于堆栈上的左括号内。