表达式的真值表(作为字符串)

时间:2012-05-25 10:05:46

标签: c# parsing truthtable

我想计算用户输入的表达式(有效逻辑表达式)的真值表作为String。任何人都可以发布现有的解决方案或指导我这样做? 我正在考虑使用BitArray(大小为2 ^ no。变量)作为输出(真值表)。但不知道如何开始。请帮帮我。

前: -

 p or q or r

应该以

结果
 False True True True True True True True 

 a and b 

应该以

结果
 False False False True 

3 个答案:

答案 0 :(得分:1)

没有任何第三方库的方法是使用带表达式的DataTable。

甚至可以评估其他结果值类型而不仅仅是布尔值。

System.Data.DataTable table = new System.Data.DataTable();
table.Columns.Add("", typeof(Boolean));
table.Columns[0].Expression = "true and false or true";

System.Data.DataRow r = table.NewRow();
table.Rows.Add(r);
Boolean result = (Boolean)r[0];

表达式语法与您的示例不同,但它执行相同的操作。一个优点是它的100%.NET框架包含 - >微软管理。 错误处理也不错。缺少运营商等的例外......

available operators

答案 1 :(得分:1)

首先,您需要解析字符串输入以查找变量和表达式的结构(即哪些操作应用于哪些子表达式)。

完成后,您可以将变量的状态表示为二进制整数。对于这种表示,您可以从0开始(意味着所有变量都为假),并为真值表的每一行将整数表示递增1。这样,您只需考虑一次所有可能的组合。

然后将变量的值应用于表达式(根据相关变量的整数的位值替换true / false)并计算表达式的值。

如果想要结果的紧凑表示,则可以将每个输入组合的表达式值存储在线性集合(例如向量)中,其中输出的索引对应于变量值的上述整数表示。如果您知道哪个变量映射到输入的哪个位,您可以随时重新创建完整的表(例如,用于打印)

答案 2 :(得分:1)

我认为CKen(http://cken.sourceforge.net/)(对你有好处)。

CKen同时支持“大写”和“#39;'''并且'' ''''''''''''''&#39

最重要的,多表达式可以在其中使用(通过分隔符):

示例:a,b,c,d,e;(a+b)*c;d*e#a;

另一方面,它非常快!


您必须在表达式中使用变量(变量)之前定义变量。