这是后台,我正在尝试创建一个DSL,允许客户编写简单的脚本来查询我们基于mongodb的数据库。我选择antlr来实现DSL。
根据我的理解(请告诉我,如果它不正确)有两种方法将antlr生成的解析器集成到系统中:
所以,你认为哪一个是我作为一个新手应该去的方式?您能列出每种方法的优缺点,或者您还有其他方法可以推荐吗?
答案 0 :(得分:2)
您不应该将业务逻辑嵌入到解析器中,因为潜在的维护难题:您不希望重新编译语法来修复业务逻辑中的错误,更不用说必须在生成的解析器中调试业务逻辑的噩梦般的前景。因此,除了最小的玩具项目之外,任何选项都应该是不可能的。
选项二可以通过多种方式实现:您可以(A)让ANTLR为您生成AST节点,并编写树解析器,或者(B)您可以跳过树解析器,并生成您自己的表示形式解析器的动作。我在Java和C#中都尝试了两种生产项目的方法,这两种方法都运行得很好。我认为(A)和(B)之间的选择在很大程度上取决于您的个人品味,只要业务逻辑不在解析器之外。