波兰语/前缀表示法逻辑表达式到表达式树和后面

时间:2015-10-23 08:20:39

标签: java constraints expression-trees polish-notation

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

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

应该成为

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

实现所需或可扩展的其他功能:

  1. 读取前缀表示法,必须能够对运算符类型作出反应,即某些运算符是可链接的(+ a b c)表示+ b + c。这可以通过使用(+(+ a b)c)轻松处理。但另一个算子是(不同的是b c),这意味着a,b,c成对不同。但是,我想这需要一个非二叉树。
  2. 遍历树对象并更改节点内容
  3. 我对语法一无所知,这使得理解有关该主题的一些问题变得更加困难。

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

    这是我到现在为止所发现的。

    关于如何自行编写的问题:

    关于如何实现这种转换的精彩答案: CVC4

    https://stackoverflow.com/a/7867104/5451007

    很高兴听到其中一些可以帮助我:

    可能是类似的问题,但在c#:About Trees and Prefix (Polish) Notation?

    也许使用ANTRL或JavaCC编写解析器和词法分析器是一种选择? Implementing a prefix notation expression parser using Irony

    ANTLR: https://stackoverflow.com/a/4590027/5451007

    有关编程等同的问题的问题: 表达式树Parsing an arithmetic expression and building a tree from it in Java

    的前缀

    后缀到表达式树Build binary expression tree from prefix notation?

    Converting a Postfix Notation to an ExpressionTree

    一般算法创意:

    树的后缀:string to abstract syntax tree

0 个答案:

没有答案