0

我从事一个专注于圣经文本的开源项目。我想创建一个标准的字符串格式来构建一个搜索字符串。然后我需要解析搜索字符串并使用给定的选项运行搜索。有许多不同的选项,从搜索范围到搜索多个文本,再到通配符等。

我在想使用 lex/yacc 之类的东西来为这种格式生成解析器可能是个好主意。我认为 Xapian 项目使用柠檬来实现类似的目标。我的问题是,使用这些工具中的一个(或多个)是完成此任务的最佳方式吗?

除了这个问题,我会很感激任何指向这些工具(以及任何其他可能是选项)的资源的链接。到目前为止,我遇到的最大问题是大多数示例和教程要么面向编程语言,要么面向计算器之类的简单工具,而不是解析字符串格式。

4

3 回答 3

1

Lex 和 Yacc 等工具适合您的目的。搜索字符串的解析器与编程语言的解析器没有什么不同(最大的区别是搜索字符串解析器生成指导搜索的规则,而编程语言解析器生成一个解析树,从中生成代码)

我假设您的语法将包含如下规则:

expression : word
           | expression AND expression
           | expression OR expression
           | NOT expression
           | '(' expression ')'

所有这些在 Yacc 中都很容易表达。

您可以查看Lex 和 Yacc 的精简指南,我发现它对学习 Lex 和 Yacc 非常有用

于 2009-11-18T08:14:37.160 回答
1

如果您尝试在 C++ 中构建解析器,请查看

提升::精神

它当然是高级 C++,但它会从 C++ 模板构建相当复杂和高性能的解析器,而无需代码生成。我花了几天时间才开始研究它,但使用和修改样本是直截了当的。我还建议阅读以下书籍:

C++ 模板元编程:来自 Boost 和 Beyond 的概念、工具和技术 David Abrahams 和 Aleksey Gurtovoy

于 2009-11-18T08:45:56.083 回答
0

将“语法错误诊断和消息”牢记在心——如果用户犯了错误,手工制作的递归下降式解析器可以根据它迄今为止扫描的内容、用户可能犯的错误有一些想法。如果您要使用自动化工具,请务必测试它如何响应典型的用户拼写错误 - 天才程序员可以处理来自他们的编译器的神秘消息,而听起来您的目标是一个不太成熟的用户,因此需要一个更友好的界面。

于 2009-11-18T08:02:24.097 回答