这就是我想要实现的目标。我想给我的用户一个类似 google 的文本框,他们可以在其中输入查询。我希望他们能够表达半自然语言,例如
"view all between 1/1/2008 and 1/2/2008"
如果语法必须合理结构化并仅限于这个特定领域,那也没关系……这些是将使用它的专家用户。
最终,我想我希望解析结果可以作为某种表达式树使用。但是,如果您对哪种数据结构可能更好有一些其他想法。
这是在 C# 中:-)
最佳答案
您正在描述一种编程语言。当然,它是一种小型语言(通常称为小型语言或领域特定语言 (DSL))。如果您从未听说过递归下降解析器这个术语,您最好听从 Paul 的建议并使用一些描述的下拉框。
但是,我再次同意他的观点,如果您想这样做,Antlr 是必经之路。该站点上有一些教程可以帮助您入门。基本上,您需要描述语法如何使用 Backus-Naur Form符号。
然后您将在您的语法上运行 Antlr,它将生成您的解析器。然后,您可以将教科书中的输入输入到抽象语法树中。然后您可以使用该树生成查询。这并不像听起来那么困难,但也有一些难度。
如果您真的很喜欢这个和/或想稍微扩展一下您的编程能力,您可以阅读 Dragon Book,又名编译器:原理、技术和工具,了解更多关于该主题的内容。
祝你好运,我的 friend 。
关于c# - 解析用户的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/351793/