2

我正在寻找一个 java 库,它可以将以波兰语/前缀表示法编写的逻辑表达式转换为抽象语法树对象并返回。这是SMT-LIB 标准CVC4使用的语法 ,我正在尝试创建一些复杂的约束。我不想以任何方式评估表达式。例如

(and (> Money 500) (= Name "Smith"))

应该成为

             and
        /          \
      >             =
    /    \        /    \
  Money 500   Name   "Smith"

需要或可扩展的附加功能以实现:

  1. 阅读前缀符号,必须可以对运算符类型做出反应,即某些运算符是可链接的 (+ abc) 表示 a+b+c。这可以通过使用 (+ (+ ab) c) 轻松处理。但是另一个运算符是 (distinct abc),这意味着 a,b,c 成对不同。然而,我想这将需要一个非二叉树。
  2. 遍历 Tree 对象并更改 Node 内容

我对语法一无所知,这使得理解有关该主题的一些问题变得更加困难。

感谢您的每一个想法和提示!

这是我到目前为止发现的。

关于如何自己写的问题:

一般如何实现这种转换的精彩答案: https ://stackoverflow.com/a/7867104/5451007

关于树和前缀(波兰语)表示法?

如果其中一些可以帮助我,我会很高兴:

可能是类似的问题,但在 c# 中:Implementing a prefix notation expression parser using Irony

也许使用 ANTRL 或 JavaCC 编写解析器和词法分析器是一种选择? https://stackoverflow.com/a/4590027/5451007

ANTLR: 在 Java 中解析算术表达式并从中构建树

编程等效问题时有关问题的问题: 表达式树的前缀 从前缀表示法构建二进制表达式树?

后缀到表达式树将后缀表示法转换为 ExpressionTree

字符串到抽象语法树

通用算法思路:

树的后缀:表达式树的后缀表示法

4

0 回答 0