c# - 解析用户的查询

标签 c# parsing tokenize

这就是我想要实现的目标。我想给我的用户一个类似 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/

相关文章:

javascript - HtmlAgilityPack下载由javascript异步加载的网页

c# - Bind 和 Map 之外的 Option<T> monad 的标准操作

c - 尝试通过更改语法来解决 Shift Reduce 冲突

javascript - 选择两个词之间的文本

c++ - CString 标记化问题

c# - IIS/.NET 3.5 的 X-Sendfile 或 X-Accel-Redirect 等效项

c# - 显示 DevExpress 网格单元的工具提示

python - 使用 Python,我如何评估压缩前缀符号形式的表达式?

JAVA:统计字符串上的每个单词,并统计单词上的每个字母

c - 使用 strtok() 在 c 中将字符串标记两次