减少解析的布尔语法
Reducing a parsed boole grammar
我已经为条件语句实现了一个解析器。完整程序的目的是找到与条件匹配的值。例如,在句子:"a>0 AND b==10" 中,我的程序会建议设置 a=1 和 b=10。例如,有时使用 "a>0 AND a+b==10" 等更复杂的句子会变得更加棘手,但我现在正在解决它。
我最担心的是那些形式谬误的句子,所以必须舍弃无解。例如,在 "a==0 AND a>0" 的情况下。这个例子很好办,但是如果你考虑嵌套的话,比如"a==0 AND ((b>3 AND a==10) OR (b<2 AND a==10))"。
我觉得我可以翻译如下:
b>3 => P, b<2 => ¬P, a==0 => Q, a==10 => ¬Q
所以前面的例子是:"Q AND ((P AND ¬Q) OR (¬P AND Q))".
一旦我能得到这样的句子,真正的问题是:是否有一种算法或方法可以减少句子并直接知道它是公理还是谬误?还是创建完整的 T/F 图表并检查所有结果是否为假的最佳方式?
您似乎可以为每个变量使用一组区间。
F.e。条件 b == 2 OR a > 4
给出区间 b => [2]
和 a => (4, ∞)
.
的并集
OR
运算符给出集合的并集,f.e。 a < 5 OR a > 10
给出 (-∞, 5) ∪ (10, ∞)
; AND
运算符给出交集,f.e。 a > 5 AND a < 10
给出 (5, 10)
.
现在,在表达式处理的某个阶段有空集,您可以诊断不一致的情况。
我已经为条件语句实现了一个解析器。完整程序的目的是找到与条件匹配的值。例如,在句子:"a>0 AND b==10" 中,我的程序会建议设置 a=1 和 b=10。例如,有时使用 "a>0 AND a+b==10" 等更复杂的句子会变得更加棘手,但我现在正在解决它。
我最担心的是那些形式谬误的句子,所以必须舍弃无解。例如,在 "a==0 AND a>0" 的情况下。这个例子很好办,但是如果你考虑嵌套的话,比如"a==0 AND ((b>3 AND a==10) OR (b<2 AND a==10))"。
我觉得我可以翻译如下:
b>3 => P, b<2 => ¬P, a==0 => Q, a==10 => ¬Q
所以前面的例子是:"Q AND ((P AND ¬Q) OR (¬P AND Q))".
一旦我能得到这样的句子,真正的问题是:是否有一种算法或方法可以减少句子并直接知道它是公理还是谬误?还是创建完整的 T/F 图表并检查所有结果是否为假的最佳方式?
您似乎可以为每个变量使用一组区间。
F.e。条件 b == 2 OR a > 4
给出区间 b => [2]
和 a => (4, ∞)
.
OR
运算符给出集合的并集,f.e。 a < 5 OR a > 10
给出 (-∞, 5) ∪ (10, ∞)
; AND
运算符给出交集,f.e。 a > 5 AND a < 10
给出 (5, 10)
.
现在,在表达式处理的某个阶段有空集,您可以诊断不一致的情况。