java - 语法写作初学者指南

标签 java antlr parser-generator

我正在使用的应用程序从文件导入中输入大量数据,并相应地更新数据库列。我需要想出一个自定义规则引擎,该引擎将根据验证处理所有输入值并相应地执行数据转换。例如

我们应用程序中的一个字段是产品名称。因此,我们需要实现的规则之一是,如果文件中的输入值为小写,则将产品名称从小写转换为大写。同样,还有许多文本/数学转换需要完成。出于这些原因,我们需要提出自定义规则引擎,在其中为每个属性定义规则、解析它们然后应用规则。

我知道 ANTLRJava 的解析器生成器之一。我正在就以下问题寻求建议:
1> 关于解析器生成器工作的一般信息和实现语法的最佳实践。

2> 由于我需要完整地设计这个规则引擎,任何人都可以指点我可以引用的示例规则引擎吗?从 UI 到数据库设计。我将 GWT 用于 UI,将 Java 用于核心逻辑,将 oracle 用于数据库

3> 是否有其他适用于 Java 的解析器生成器

4> 虽然我确实想遵循定义自己的语法并使用解析器生成器来构建此规则引擎的路径,但我是否应该考虑其他任何方法?

最佳答案

您可能只想使用基于 Java 的规则引擎 JbossRules(以前称为 Drools)。或者,脚本引擎可能是实现规则的另一种方式(例如 Apache Rhino(Java 中的 Javascript))。

在这种情况下自己编写似乎有点矫枉过正,但如果最终用户要创建规则/脚本,它可能会让您提供更好的安全保证。

编辑以解决评论中的问题:

我建议使用现有的规则引擎(ala JbossRules/Drools)而不是编写您自己的解析器和语法(用于规则组件)。例如看这里:Drools .

对于规则可能需要使用的专用逻辑(数据库访问或计算库),您应该编写一个由您的规则使用的 Java API(这样规则就不会深入访问您的其他代码,因为如果/当你重构)。无论您使用哪种规则引擎(您自己的或现有的),此建议均适用。

我假设您已经解决了数据输入文件的数据格式,并且您只是在寻找规则格式和规则解析的解决方案。

关于java - 语法写作初学者指南,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9084544/

相关文章:

java - 如何将 KeyListener 添加到整个项目?

java - 删除 JAR 时 Tomcat 6 中的 ClassNotFoundException

c - 是否可以使用 ANTLR 解析 C 头文件?

java - Ant : suppress console logs from antlr

java - ANTLR 树解析器语法重写规则 *

java - 使用 Maven Shade 插件排除 Artifact 未按预期工作

java - 保留一组星期几

antlr - 将 ANTLR 语法翻译成 XText 语法 : how to remove syntactic predicates

c++ - 是否有免费的解析器生成器可以生成 C++ 代码并正确处理 Unicode?

parsing - 解析器生成器中的错误报告和恢复