我正在寻找一个 java 库,它可以将以波兰语/前缀表示法编写的逻辑表达式转换为抽象语法树对象并返回。这是SMT-LIB 标准和CVC4使用的语法 ,我正在尝试创建一些复杂的约束。我不想以任何方式评估表达式。例如
(and (> Money 500) (= Name "Smith"))
应该成为
and
/ \
> =
/ \ / \
Money 500 Name "Smith"
需要或可扩展的附加功能以实现:
- 阅读前缀符号,必须可以对运算符类型做出反应,即某些运算符是可链接的 (+ abc) 表示 a+b+c。这可以通过使用 (+ (+ ab) c) 轻松处理。但是另一个运算符是 (distinct abc),这意味着 a,b,c 成对不同。然而,我想这将需要一个非二叉树。
- 遍历 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
通用算法思路:
树的后缀:表达式树的后缀表示法