初学者编写语法的指南

时间:2012-01-31 17:58:59

标签: java antlr parser-generator

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

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

我知道ANTLRJava周围的解析器生成器之一。我正在寻求以下查询的建议:
1 GT;有关解析器生成器工作的一般信息以及实现语法的最佳实践。

2 - ;既然我需要完全设计这个规则引擎,那么有人能指出我可以参考的示例规则引擎吗?从UI到数据库设计。我使用GWT用于UI,Java用于核心逻辑,oracle用于数据库

3>是否还有其他任何解析器生成器用于Java

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

2 个答案:

答案 0 :(得分:1)

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

在这种情况下编写自己的内容似乎有些过分,但如果最终用户要创建规则/脚本,它可能会为您提供更好的安全保障。

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

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

对于规则可能需要使用的专用逻辑(db访问或计算库),您应该编写规则使用的单个Java API(以便规则不会深入访问您的其他代码,因为如果/何时这可能导致错误你重构)。无论您使用哪种规则引擎(您自己的或现有规则),此建议都适用。

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

答案 1 :(得分:1)

有JavaCC,它是一个Parser生成器,并且有用于评估规则的groovy。如果您打算使用脚本引擎取决于语法。如果规则不能用javascript,java,python等表示,并且你想用新语言编写它们,那么你必须使用解析器生成器。但是你总是可以在你创建的方法中做任何你想做的事情,然后从规则中调用它们。规则将由脚本引擎评估。