第四章
第四章 验证
在本章中,我们将介绍验证的概念,特别是 Xtext 实现的验证机制:验证
器。通过验证,你可以对 DSL 实现附加的约束检查,这在解析时无法完成的。
Xtext 允许您以一种简单而明确的方式实现这样的约束检查。您只需要与 Xtext
就可能的错误或警告进行沟通,它将在 IDE 中相应地生成错误标记。验证将在
DSL 的用户编辑器的后台运行,以便对输入内容立即提供反馈。我们还将展示,
对于验证期间生成的错误和警告,如何实现快速更正,以帮助用户解决验证错误
问题。本章将介绍以下主题:
Xtext 中的验证
正如我们在第 1 章“实现 DSL”中所预想的那样,解析程序只是实现编程语
言的第一个阶段。特别是程序的整体正确性,在解析过程中总是无法确定。尝试
在语法规范中嵌入额外的约束检查,可能会造成语法规则非常复杂或者是根本不
可能。因为一些额外的静态分析,只有在程序的一些部件已被解析时,才能执行
验证。
其实,最好的做法是,应该尽可能地少在语法中,而尽可能多地在验证器中,
进行验证(我们将在第 9 章“类型检查”和第 10 章“作用域”使用这种做法)。
因为这样可以提供更好的错误消息,并更精确地检测符合快速更正的问题。
验证机制将广泛应用于本书所有 DSL 示例。通常,即使对于小型 DSL,也必
须使用验证来执行额外的约束检查。
使用验证器在 Xtext 中实现这些约束检查,是从相应的 EMF API 继承的一
个概念(参见 Steinberg 等人,2008)。在 EMF 中,您可以实现验证器,来对
EMF 模型的元素执行约束检查。由于 Xtext 使用 EMF 表示解析程序的 AST,验
证机制自然扩展到 Xtext DSL。Xtext 通过为你的 DSL 提供明确的约束规则,
来增强 EMF API 的验证器。此外,Xtext 附带的默认验证器,其中一些将默认
启用,对 DSL 执行许多常见的检查(例如,交叉引用检查)。自定义验证器,
可以和 Xtext 默认的组合使用。
评论0
最新资源