parser String boolean expression

时间:2011-03-28 11:01:31

标签: c# string


我应该构建一个搜索引擎,允许任何人输入任何布尔表达式 (word1 + word2) - !word3 - 其中+表示and-表示or!表示not

然后在数据库中搜索这些单词并返回实现表达式的文档。
所以我用这样的词典:

  Dictionary<string, List<int>> WordsAndDoc = new Dictionary<string, List<int>>();

我搜索了数据库中的每个单词,然后在字典中添加了文档ID列表 我宣布了两种方法 首先合并两个List:

public List<int> Intersect(List<int> P1, List<int> P2)

第二次加入两个名单:

public List<int> Union(List<int> P1, List<int> P2)

问题是:如何解析TextBox中的布尔表达式,如果有+则合并两个单词列表。如果有-则联合两个列表 最终产生一份所需文件的清单ID ...
请帮帮我,谢谢你。

2 个答案:

答案 0 :(得分:0)

我认为你需要写一种语法。 ANTLR项目可以帮助您生成构建在gramar上的C#代码,就像在 LEX和YACC 中一​​样。社区很重要,我希望你能找到你的语法。

我希望它有所帮助

JP

答案 1 :(得分:0)

我不完全确定我理解这个问题,但是这对数据库查询来说不是更容易吗?例如将他们输入的文本转换为:

(word1 + word2) - !word3

SELECT id FROM table WHERE (field like '% word1 %' and field like '% word2 %') 
  and not (field like '% word3 %')

有许多其他方法可以进行查询,例如如果你有全文或其他什么,取决于数据库,但这看起来更像是通过构建正确的查询而不是在事后处理它来做得最好的事情。

相关问题