我试图写一个算法在一阶(谓语)逻辑转换公式抽象语法树。 对于命题逻辑,我使用的调度场算法,但它不开箱工作为一阶逻辑因为括号既可以在分组或指定的谓词(或功能)的范围内使用。 有没有在调度场算法,可以处理这个特殊并发症的推广?
作为参考,字符串我试图解析是这个样子:
"AxEy(P(x) & R(x,y)) -> R(f(a),b)"
我试图写一个算法在一阶(谓语)逻辑转换公式抽象语法树。 对于命题逻辑,我使用的调度场算法,但它不开箱工作为一阶逻辑因为括号既可以在分组或指定的谓词(或功能)的范围内使用。 有没有在调度场算法,可以处理这个特殊并发症的推广?
作为参考,字符串我试图解析是这个样子:
"AxEy(P(x) & R(x,y)) -> R(f(a),b)"
一个开放的括号是谓词范围或功能参数列表分隔符当且仅当它紧跟谓语或功能,分别。 如果是用于分组,它必须遵循前缀或缀操作或其他开括号。
这并不重要,如果你不能事先确定的函数名,只要它们必须有名称; 在名字括号要么是谓词范围或参数列表分隔符。 这将是非常有意义的,能够识别,当然谓语。
你需要的时候你推到标记堆栈括号,这样就可以创建正确的AST节点,当你以后与其对应的右括号弹出它。 如果它是一个谓词范围石斑或参数列表石斑鱼,你需要包括谓词/函数作为AST的一部分; 这将是正下方的堆栈上的开括号。