我正在使用ANTLRv4构建一个简单的DSL来验证FIX消息。 我的语法目前支持下面的方言1(主要是比较运算符),我期待另外支持方言2。
是否可以为从父语法继承和/或扩展的方言定义语法?
例如,使用我的语法的其他开发人员应该能够定义他们自己的方言并表达遵守该方言的规则,而无需从头开始编写整个DSL。
方言1中的规则:
tag 9 > 0
tag 59 = "A"
方言2中的相同规则:
tag 9 must be greater than 0
tag 59 must be equal to "A"
答案 0 :(得分:1)
Antlr4包含一个名为import
的机制,可以让您将语法分解为逻辑和可重用的块。当您将一个语法导入另一个语法时,它的行为类似于面向对象的继承,这在维护DSL的许多方言时非常有用。
有关基础知识,请参阅this page。 Definitive Antlr4 Reference一书中的详细信息。
答案 1 :(得分:0)
我认为你不能用ANTLR的直接帮助来定义语法方言。
当然,为了考虑对语法进行任何更改,他们必须非常了解当前语法规范中的内容。因此,在进行更改之前,您必须允许他们在某种窗口中查看当前语法。
您可以让他们在编辑器窗口中查看它,然后直接编辑它。