编码语言语法并使用Z3枚举所有接受的终端(Z3py)

时间:2015-05-06 21:12:50

标签: z3 z3py

我有一个问题,我想用Z3制定。但是,我不确定最好的方法是什么。以下是我想要编码的内容和预期输出的说明。

如果我有一个语言语法,其中x,y和z是非终端的"和","或"和" a"是语言终端:

  1. x :: = y"或" y

       | y  
    
  2. y :: = z"和" z

      | z 
    
  3. z :: =" a"
  4. 我想首先对先前的规则进行编码,然后我想生成语法接受的所有可能的终端派生。

    最终的输出是:

    a和a或a和a

    a或

    a和a

    a和a或a

    a或a和a

    ...

    我不知道从哪里开始。编码问题的最佳方法是什么?

    非常感谢任何建议/指导。

    谢谢

1 个答案:

答案 0 :(得分:1)

使用Z3生成约束系统的所有可能解决方案的规范方法是通过将其添加为新的(负)约束来迭代地“禁止”先前找到的解决方案。请参阅Leo's answerthis question

相关问题