【问题标题】:Is possible to print all the posibilities of an expression like (x AND ( y OR z)) with yacc?是否可以使用 yacc 打印 (x AND ( y OR z)) 之类的表达式的所有可能性?
【发布时间】:2018-12-27 19:05:52
【问题描述】:

我正在尝试打印 ((a AND (b OR c OR d)) AND e AND (f OR g)) 形式的复杂逻辑表达式的所有可能性。例如输出应该是

a, b, e, f
a, c, e, f
a, d, e, f
a, b, e, g
a, c, e, g
a, d, e, g

等等,

我正在使用解析器(PLY for python),它使用LARL 算法,但我不知道它是否是解决此类问题的正确方法。

我找不到以正确方式打印所有可能性的方法,所以我想也许 PLY 它不是完成这项任务的正确工具。

您是否建议我编写自己的解析器来解决此类问题?

【问题讨论】:

  • 你不应该期望解析器除了解析字符串之外做任何事情。对生成的解析树执行计算不是解析器任务的一部分。

标签: python parsing yacc ply lalr


【解决方案1】:

我建议您按照应用程序的要求处理生成的解析树。解析器只是一个前端,它根据你给它的动作规则返回一个句法组织;它不会神奇地完成您的申请。

您仍有编码工作要做:您需要遍历生成的数据结构(在您的控制下)并为您的表达式提供所有子可能性(AND 节点)或任何正数量的可能性(OR 节点)已经解析了。

【讨论】:

    猜你喜欢
    • 2012-10-07
    • 2011-06-05
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 2013-12-22
    • 1970-01-01
    • 1970-01-01
    • 2013-11-30
    相关资源
    最近更新 更多