考虑以下对上下文无关文法的扩展,它允许规则在左侧具有一个(或多个)终结符在非终结符的右侧。也就是说,形式的规则:
A b -> ...
右手边可以是任何东西,比如在上下文无关文法中。特别是,不需要右手边的末尾有完全相同的终端符号。在这种情况下,此扩展将是上下文相关的。但终端不仅仅是一个上下文。有时,这个终端被称为“推回”。
显然,这不再是 CFG(类型 2)。它包括类型 1。但它是什么?真的已经是 type-0 了吗?
Prolog 中的定句语法dcg允许此特定扩展。(为了避免误解,我在这里不考虑 Prolog 的完整扩展。即我假设终端来自有限的字母表而不是任意术语,我也不考虑 DCG 中允许的 Prolog 的附加参数,这些参数也进入类型- 0 已经。)
编辑:这是描述扩展的更简单方法:添加到表单的 CFG 规则
A b -> <epsilon>