我最近开始研究 C++ 解析树,因为我有一个特定的任务。在 ast_parse (boost-library) 的帮助下生成抽象语法树。然后将此 ast 转换为解析树。有一个 shared_ptr 指向树的根节点。这里一切正常,问题如下:
输入字符串可以是这样的:
NumberOfViews > 3 AND NumberofViews > 3
甚至更糟
NumberOfViews > 3 OR not NumberOfViews > 3
(当然,这总是评估为真,并且可以完全删除)。
所以树中有很多冗余甚至逻辑问题,因为树可以变得非常大。我必须以有效的方式分析树,并解决这些问题(我将从修复重复问题开始)。我不需要解决方案,只需要一些从哪里开始或从哪里看的提示,因为到目前为止我对解析树没有任何经验。
更多信息:
解析树可以变得更复杂一些,可以使用 AND、OR、IN、<=、!=,甚至可以调用特殊函数。它们可以有大约 5000 个字符。这些过滤器由客户创建。大多数时候,现有的过滤器会被复制到一个新的过滤器中,没有人关心冗余或不合逻辑的表达式。所以我无法避免那些虚假的表达。我的目标是拥有相同的 Parse 树(因为已经有一个工作树),只是没有冗余。Parse 树是从 ast 生成的;我考虑过先优化 ast,这样就不用处理解析树本身了。但是,我不知道如何检测解析树中的重复项。